内部类:java支持在一个类中定义一个类,成为内部类,包含内部类的类称为内部类的外嵌类。
内部类和外嵌类的关系:
1.
外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类的方法。
2.内部类的类体中
不可以有类变量和类方法。外嵌类的类体中可以
用内部类声明对象,作为外嵌类的成员。
3.内部类
仅供他的外嵌类使用,其他类不可以用某个类的内部类声明对象。
注意:
1.有内部类的类的字节码文件的格式是 “外嵌类名$内部类名.class”.
2
.内部类可以被修饰为static内部类,此时static内部类就是外嵌类中的一种静态数据类型,这样就可以在程序中使用static内部类来创建对象了
。
匿名类:
和子类有关的匿名类:匿名类就是一个子类。
假设Bank是类,那么下列代码就是用Bank的一个子类(匿名类)创建对象。
new Bank(){
匿名类的类体
};
注意:
1.使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类。
2.
匿名类的类体中不可以声明static成员变量和static方法。
3.由于匿名类是一个子类,但没有类名,所以在创建对象时直接使用父类的构造方法。
和接口有关的匿名类:
interface SpeakHello{代码编译后生成SpeakHello.class, HelloMachine.class, E.class, E$1.class, E$2.class(两个内部类)。
void speak();
}
class HelloMachine{
public void turnOn(SpeakHello hello) //接口参数
{
hello.speak();
}
}
public class E{
public static void main(String args[])
{
HelloMachine machine = new HelloMachine();
machine.turnOn(new SpeakHello(){ //和接口SpeakHello有关的匿名类
public void speak(){
System.out.println("hello,you are welcome");
}
}
);
machine.turnOn(new SpeakHello(){
public void speak(){
System.out.println("你好,欢迎光临");
}
}
);
}
}
异常类:
try-catch语句:将可能出现异常的操作放在try部分,一旦try部分抛出异常对象,那么try将立刻结束执行,转向执行catch部分,例子如下:import java.lang.Integer;
class E{
public static void main(String args[]){
int n=0, m=0, t=1000;
try{
m = Integer.parseInt("8888");
n = Integer.parseInt("ab56"); //发生异常,退出try,转向catch
t = 7777; //t没有机会被赋值
}
catch(NumberFormatException e){
System.out.println("发生异常"+e.getMessage());
}
System.out.println("n="+n+","+"m="+m+","+"t="+t);
try{
System.out.println("故意抛出IO异常!");
throw new java.io.IOException("我是故意的");
//System.out.println("这个输出语句肯定没有机会执行,必须注释,否则编译出错");
}
catch(java.io.IOException e){
System.out.println("发生异常:"+e.getMessage());
}
}
}