1)内部类
内部类访问规则:
1、内部类可以访问外部类的中的成员,包括私有。(外部类不可以私有)之所以能访问外部类是因为内部类中有外部类的引用,格式是 外部类名.this.
2、外部类要访问内部类,需要建立内部类的对象。如果在主函数中直接访问内部类,需要把返回值类型写成 外部类.内部类 变量名 = new 外部对象().new内部对象()
3、内部类被静态修饰的话,要想访问外部类,外部类也必须是静态的。
如何在主函数中访问被静态修饰的内部类里面的非静态成员,格式:new 外部类.内部类().内部类非静态成员
如何在主函数中访问被静态修饰的内部类里面的静态成员,格式:外部类.内部类.内部类静态成员
4、匿名内部类
格式:new 父类或者接口名(){覆盖父类或者接口的方法}.方法()
注意:匿名内部类中的方法最好不要超过三个,不然覆盖起来会很痛苦。
2)异常
问题:1、严重类:Error 一般不编写针对性的代码进行处理
2、异常:Exception
Eception -----》ArithmeticException 算法异常
异常的处理:
try
{需要被检测的代码;}
catch(异常类 变量)
{处理方式}
finally
{一定会执行的语句;}
关键字:throws 程序编写过程中如果有问题的地方要标记throws,提醒调用者去解决。
class T
{
int chu (int x,int y) throws ArithmeticExeption,ArrayIndexOutOfBoundsEception 这个是多异常
{
return x/y;
}
}
class TDemo
{
public static void main (String [] agrs)
{
try{
T a = new T();
System.out.println( a.chu (4,0) ); }
catch (ArithmeticExeption A){}
catch (ArrayIndexOutOfBoundsEception E){} 抛出了几个异常,就catch几个
}
}
自定义异常信息 :因为父类中已经对异常信息的操作都完成了,所以在自定义类时,只需要在子类中构造函数中用super语句就可以了。
class T extends Exception
{
T (String msg)
{ super(msg); }
}
throw new T ();程序中哪里有问题就用这个语句抛出。
throw 和throws的区别
throws定义在函数上,throw定义在函数内
throws后面跟的是异常类,可以跟多个,用逗号隔开。throw后面跟的是异常对象
特点知识点:
RuntimeException及其子类
如果在函数内抛出该异常,函数上可以不用声明,编译通过
如果在函数上抛出该异常,调用者可以不用处理,编译通过
finally 代码块 程序一定会被执行到的代码,一般是执行关闭程序的代码
只有一种情况finally不会被执行到,就是它的前面有System.exit(0);
异常在子父类中覆盖的体现:
1、子类在覆盖父类时,如果父类的方法抛出了异常,子类的覆盖方法只能抛出父类的异常或者该异常的子类
2、如果父类的方法在抛出多个异常时,那么子类在抛出异常时,只能抛出父类异常的子集
3、如果父类或者接口的方法没有抛出异常,那么子类在覆盖其方法时也不能抛出异常。
4、如果子类的方法发生了异常,只能try不能抛。
3)包
package:对类文件进行分类管理。相当于文件夹。
package放在程序的第一行。
运行的时候需要写类的全名称:即 包名.类名
编译时,需要指定地址:javac -d . pacdemo.java
包与包的访问:
被访问的包中的类的权限需要public
引用包中的类,需要写类的全名:即包名.类名
如果包中的类权限没有足够大,相当于封装。所以说不是私有就是封装。