初学Java之干货理论篇_内部类和匿名类

内部类和异常类

内部类

1.Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类
称为内部类的外嵌类。内部类的外嵌类的成员变量在内部类中仍然有效,内部类的
方法也可以调用外嵌类的方法。
2.内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以调用内部类声明
变量,作为外嵌类的成员。
3.内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。另外,由于
内部类的外嵌类的成员变量在内部类中仍然有效,使得内部类和外嵌类的交互更加方便。

匿名类

1.Java允许我们直接使用一个类的子类的类体创建一个子类对象。也就是说,创建子类
对象时,除了使用父类的构造方法之外还有类体,此类体被认为是一个子类去掉类声明
后的类体,称作匿名类。
2.匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接
用匿名类创建一个对象。
3.假设Bank是类,那么下列代码就是用Bank的一个子类(匿名类)创建对象:
new Bank(){
	匿名类的类体
};
4.匿名类可以继承父类的方法亦可以重写父类的方法。使用匿名类时,必然是在某个
类中直接用匿名类创建对象,因此匿名类一定是内部类,匿名类可以访问外嵌类中的
成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。
5.由于匿名类是一个子类,但没有类名,所以在用匿名类创建对象时,要直接使用父类的
构造方法。
6.尽管匿名类创建的对象没有经过类声明步骤,但匿名对象的引用可以传递给一个匹配的
参数,匿名类常用的方法是向方法的参数传值。
7.void f(A a){}
该方法的参数类型是A类,用户希望向方法传递A的子类对象,但系统没有提供符合要求
的子类,那么用户在编写代码时就可以考虑使用匿名类。
8.匿名类只能够调用一次的原因:创建的时候只在jvm的堆空间新建了对象,并进行初始
化,但栈空间没有一个变量名指向匿名对象。jvm垃圾回收机制在发现堆空间的对象,
没有一个引用指向他,就给回收内存了。
9.和接口有关的匿名类:
Java允许直接用接口和一个类体创建一个匿名对象。此类体被认为是实现了接口的类
去掉类声明后的类体,称作匿名类。
下列代码就是用实现了Computable接口的类(匿名类)创建对象:
 new Computable(){实现接口的匿名类的类体};
 如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递
 给方法的参数,类体必须要重写接口中的全部方法,例如,对于
 void f(Computable x)
 其中的参数x是接口,那么在调用f时,可以向f的参数x传递一个匿名对象,例如:
 f(new Computable(){实现接口的匿名类的类体});

异常类

1.在try-catch语句中,各个catch参数中的异常类都是Exception的某个子类,表明
try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的
catch即可。
3.在执行try-catch语句后,执行finally语句,也就是说,无论在try部分是否发生过
异常,finally语句都会被执行。
	特殊情况:
	(1)如果在try-catch语句中执行了return语句,那么finally语句仍然被执行
	(2)try-catch语句中执行了程序退出程序,即执行System.exit(0);则不执行
		finally语句。
4.在编写程序时可以扩展Exception类定义自己的异常类,然后根据程序的需要来规定哪些
方法产生这样的异常。一个方法在声明时可以使用throws关键字声明要产生的若干个异常
,并在该方法体中给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字
抛出该异常对象,导致该方法结束执行。程序必须在try-catch块语句中调用能发生异常的
方法,其中catch的作用是捕获throw方法抛出的异常对象。

throws和throw

断言

1.断言语句一般用于程序不准备通过捕获异常来处理的错误。
例如:当发生某个错误时,要求程序必须立即停止执行。在调试代码阶段让断言语句发挥
作用,这样就可以发现一些致命的错误。当程序正式运行时可以关闭断言语句,但扔把
断言语句保留在源代码中,如果以后应用程序又需要调试,可以重新启动断言语句。
2.使用assert声明一条断言语句,有两种格式:
(booleanExpression:布尔类型    messageException:字符串类型)
assert booleanExpression;
当布尔值是false时,程序从断言语句处停止执行;否则继续执行。
assert booleanExpression:messageException;
当布尔值是false时,程序从断言语句处停止执行,并输出messageException表达式的值,
提示用户出现了怎样的问题,否则继续执行。
3.当使用java解释器直接运行应用程序时,默认为关闭断言语句,在调试程序时可以使用
-ea启用断言语句,例如:java -ea mainClass
发布了49 篇原创文章 · 获赞 39 · 访问量 5195

猜你喜欢

转载自blog.csdn.net/qq_44749053/article/details/102807865
今日推荐