一:内部类
1、定义
Java的类中除了成员变量和方法以外还存在第三种数据类型,就是所谓的内部类。内部类就是在类中在定义一个类,而包含内部类的类被称为外嵌类。
2、内部类与外嵌类的关系
1:内部类的外嵌类的成员变量在内部类中依然有效,内部类中的方法也可以调用外嵌类的方法。‘
2:内部类中不能声明类方法和类变量(关键字static修饰的),内部类声明的对象可以放到外嵌类中,为外嵌类的成员变量。
3:内部类仅供其外嵌类使用,其他类中不能存在其他类的内部类的对象。
4:如果内部类被修饰为static类,那么他就是外嵌类的一种静态数据类型,此时程序就可以在其他类中使用static内部来创造对象了。
【注】非内部类不能是static。
public class RedCowForm{
static String Formname;
RedCow cow; //内部类对象
RedCowForm(){
}
RedCowForm(String s){
cow=new RedCow(150,112,120);
Formname=s;
}
public void ShowCowMess(){
cow.speak();
}
class RedCow{
String cowName="红牛";
int height,weight,price;
RedCow(int h,int w,int p){
height=h;
weight=w;
price=p;
}
void speak(){
System.out.println("我是"+cowName+",身高"+height+",体重"+weight+"kg,生活在"+formName);
}
}
}
public class Test{
public static void main(String args[]){
RedCowForm form =new RedCowForm("红牛农场");
form.showCowMess();
form.cow.speak();
}
}
二:匿名类
1:和子类有关的匿名类
如果一个类没有显示的声明一个子类,但是有又用其子类声明一个对象时,java规定可以用子类的类体来创建一个对象,因为这个类体没有被声明,所以被称为匿名类。
特点:
1:匿名类可以继承父类的方法,并且可以重写父类的方法。
2:匿名类一定是内部类。
3:匿名类可以访问外嵌类的方法和变量,匿名类内部不能声明static的变量和方法。
4:匿名类是一个子类,且没有类名,所以使用匿名类创建一个对象时,调用的是其父类的构造方法。
2:和接口有关的匿名类
Java中放一个接口名后跟着一个类体时(实现了computer接口类去掉类声明后的部分),我们可以将其看做时匿名类。
例如:
new Computer{ //computer是一个接口,这个类体实现了改接口。
};
【注】
1:这个匿名类实现了改接口。
2:如果某个方法的参数时接口类型,就可以使用接口名和类体创建一个匿名对象用来传递方法的参数。但是需要重写接口内的所有方法。
3:异常类
所谓的异常类就是指用来处理程序在运行过程中出现的异常情况。一般有关键字throw抛出一个Exception子类的实例表示异常发生。
1:try-catch语句
此语句用来处理异常情况。将可能出现的异常操作放在try部分。一旦出现异常,try就会立刻停止执行,转而执行catch部分(可以有几个部分)
例如:
try{
//包含肯会发现异常的语句
}
catch(ExpectionSubClass1 e){
...
}
catch(ExpectionSubClass2 e){
...
}
2:自定义的异常类
在编写程序时可以自己定义Expection类的子类,根据实际情况来规定那些方法可以解决这样的异常。一个方法在声明时可以使用关键字throw来声明要产生的若干异常。
4:断言
断言语句是Java语言中用来调试程序的一种语句。它可以保留在源代码中。由关键字assert来声明。
断言语句有两种格式:
assert booleanExpression;
assert booleanExpression:messageExpression
例如:
assert num>3
//如果表达式结果为true则继续执行,否则停止。
启动和关闭断言语句语句,Java默认时关闭断言语句的,当需要开启时可以通过
java -ea mainClass
来开启。
5:总结
1:Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类称为外嵌类。
2:和某类有关的匿名类是该类的一个子类,该子类没有明显的用类声明来定义。
3;和某接口有关的匿名类就是实现的该接口的类,
4:Java的异常可以出现在方法的调用过程中,即在方法的调用过程中抛出异常现象,导致程序运行出现异常,并且等待处理。Java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch的try部分,try部分出现异常后,try部分立刻终止运行,执行catch部分。