一、内部类

在一个类中定义另一个类,这样的类成为内部类,包含内部类的类称为 内部类的 外嵌类。

内部类与外嵌类的关系:

1.内部类可以调用其外嵌类的方法和成员变量

2.内部类中不可以声明类变量和类方法

3.外嵌类可以 用内部类声明的对象作为外嵌类的成员

4.内部类仅供其对应的外嵌类使用,其他类不可以声明别的类的内部类对象。

 

还记得static吗?类成员和类变量,在这里,内部类也可以被修饰为static内部类,即外嵌类中的一种静态数据类型,用static修饰后,就可以在其他类中使用static内部类来创建对象了。but,static内部类就不能操作外嵌类中的实例变量了,但可以操作类变量。即把上述中内部类RedCow改成static内部类后,main方法中的注释部分就可以去掉了。

二、匿名类

匿名类,什么是匿名类?没有名字的类啊,那没有名字的类怎么来用呢?没有名字肯定就不能声明对象呀,但是却可以直接创建对象的。那不能声明对象,怎么用这个匿名类呢? 那就作为参数来用呀!

匿名类有两种,一种是与子类有关,一种是与接口有关

其实匿名类就是直接创建对象的啊,无论是与子类有关还是与接口有关,他都是没有类名直接创建的。你看现在若有一个A类,那么我们是如何创建他的对象的? A  a = new A();  这样,就创建了一个A类的对象a,那现在我们是如何创建匿名类呢?  直接写 new  A{  匿名类类体   };   这不就是直接创建了一个类吗,这也就可以理解了匿名类是一个子类吧。也因为匿名类没有名字可以用来声明,所以常常直接创建一个匿名类对象  参数。

1.和子类有关的匿名类

匿名类的特点:

1.匿名类可以继承和重写父类的方法(匿名类就是一个子类)。

2.匿名类一定是内部类,因为他一定是在某个类中直接用匿名来创建对象的。

3.匿名类可以访问外嵌类中的成员变量和方法,但是匿名类中不可以声明static成员变量和static方法

2.和接口有关的匿名类

与接口有关就是用接口名和类体来创建一个匿名类咯。  new  接口名 () {    类体    };

接口和类体组成的匿名类要求类体必须要重写接口中的所有方法。

三、异常类

Java中本身也是包含有很多类的,具体的作用方法我一个菜鸟还是记不住的,就遇到了再记吧。那现在关于异常类中的方法,我还是查一下吧,简单的...

异常类的祖先是Throwable,throwable的直接子类是 Exception 和 Error。

异常对象可以调用下列方法得到或输出有关异常的信息:

public String  getMessage();     //只显示原因,不显示类名

public void printStackTrace();   //跟踪异常发生时堆栈的内容

public String toString();              //显示类名和原因


Java允许方法调用过程中抛出异常对象,终止当前方法的继续执行。

1.try-catch语句

Java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句try部分,一旦try部分抛出异常对象,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,(反正就是try语句里有异常)那么try部分立刻结束执行,转向执行相应的catch部分。  故程序可以将发生异常后的处理放在catch部分,try-catch语句可以由几个catch组成,分别处理发生的相应异常。

其try-catch语句格式为:

各个catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类间不能有父子关系,否则保留一个含有父类参数的catch即可。

public class yichang {
	public static void main(String[] args) {
		int n =0 ,m = 0, t = 1000;
		try{
			m = Integer.parseInt("8888");
			n = Integer.parseInt("ab12");
			t = 999;
		}
		catch(NumberFormatException e){
			System.out.println("发生异常:" + e.getMessage());
		}
		System.out.println("n=" + n + ",m=" + m + ",t=" + t);
		try{
			System.out.println("故意抛出I/O异常!");
			throw new java.io.IOException("我是故意的");
//			System.out.println("这个输出语句是没有机会被执行的");
		}
		catch(java.io.IOException e){
			System.out.println("发生异常:" + e.getMessage());
		}
	}
}

java.lang包中的 Integer 类调用其类方法public static int parseInt(String s)可以将 “数字”格式 的字符串, 如“6789”, 转化为 int型数据 ,但是当试图将字符串“ab89”转换成数字时,例如:int number=Integer.parseInt(“ab89”);方法parseInt()在执行过程中就会抛出 NumberFormatException 对象,即程序运行出现NumberFormatException异常(字符串转换成数字异常)。 

2.自定义异常类

可以自己编写Exception的子类作为自己的异常类。使用 throws 关键字声明要产生的异常(即在要判断方法的方法名后面加throws  编写的异常类类名),使用 throw 关键字抛出该异常的对象,使该方法结束执行。

程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字抛出异常对象

 

3.finally语句

finally语句使用在try-catch语句后面的

在执行了try-catch语句后,执行finally语句,也就是说,无论try部分是否发生异常,finally语句都会被执行。

But,若try-catch语句中执行了程序退出代码( 即执行System.exit(0);  ),则不会执行后面的所有语句(包括finally语句)。

 

 

10-06 17:41