---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
3.final关键字:final是一个修饰符,可以修饰类,方法,变量;final修饰的类不可以被继承;final修饰的方法不可以被覆盖;final修饰的变量是一个常量,只能复制一次。
4.抽象类:抽象类不可以实例化;抽象类必须有子类覆盖其所有抽象方法后才可以实例化;abstract不可以与private、static、final关键字共存。抽象类可以定义抽象方法,也可以定义非抽象方法。抽象类可以有构造方法,用于对子类属性初始化。
5.接口:接口的方法都是抽象的,变量都是全局常量,成员都是公共的权限.java不支持多继承,但是可以多实现.接口可以多继承.原理在于方法体是否存在.抽象类的继承是is a关系,在定义该体系的基本共性内容,接口的实现是like a关系 ,在定义体系额外功能.
6.多态:父类或者接口的引用指向之类的对象,提高了代码的扩展性。不能调用子类的特有内容。多态的前提:必须有继承或实现,要有覆盖。Animal a = new Cat();向上转型,将子类型特有属性隐藏,不能使用子类特有的方法,a不能访问Cat的特有功能。Cat c = (Cat)a;向下转型,为了使用子类的特有功能。对于转型,子类对象在做着类型的变化。Instanceof:用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前,用于健壮性的判断。成员变量,编译和运行都参考等号的左边,Fu f = ZI(); f调用成员变量是父类的。成员方法(非静态):编译时看f的引用类型,去Fu类找show方法,若不存在则编译失败,运行是看引用指定的对象;存在动态绑定,编译看左边,运行看右边,如果zi类的show方法不存在则,调用父类的,因为继承的关系,
图示:
静态方法:存在静态代码块中,不依赖对象调用;非静态方法需要动态绑定,依赖对象。编译和运行都看左边,其实对于静态方法是不需要对象的,直接用类名调用。
7.内部类:内部类可以直接访问外部类的成员,外部类要访问内部类,必须建立内部类的对象;直接访问内部类的的成员(非private,非static):Outer.Inner In = new Outer().new Inner();如果是静态内部类:Outer.Inner in = new Outer.Inner();如果内部类是静态的,成员是静态的可以直接调用:Outer.Inner.function();如果内部类中定义静态成员,该内部类必须定义为静态的;内部类可以直接访问外部类的成员:内部类持有外部类的引用。局部内部类访问局部成员时需要把成员声明为finnal类型:
class Outer{
int num = 3;
void method(){
finnal int x = 5;
class Inner{
void show(){
System.out.println("show..." + x);
}
}
}
}
内部类在局部位置上只能访问局部中被finnal修饰的局部变量。
8.匿名内部类:内部类必须继承或实现一个外部类或接口,一个匿名子类对象,格式:new父类(或接口名){}; 当函数是借口类型时,而且接口中的方法不超过三个,可以使用匿名内部类作为实际参数传递。
9.Object 类中的equals(obj)方法,接受Object对象,比较对象的地址,内部是通过比较(this==obj)实现的。
10.异常:Throwable有两个子类:Error,Exception;Error特点:是有jvm抛出的严重性问题,这种问题发生一般不针对性处理,直接修改程序。Jvm先检查语法错误,再检查异常。Throw用在方法内,抛出的是异常对象,throws 用于方法声明,抛出的是异常类,可以抛出多个,。异常的分类:编译时被检测异常(Exception和其子类除了RuntimeException体系),希望在编译时就进行检查,做针对性处理;运行时异常,这种问题的发生无法让功能继续,运算无法进行,更多是因为调用者的原因导致的或者引发了内部状态的改变导致的,问题一般不处理。异常是jvm正常运行期间抛出的异常。自定义异常时要么继承Exception要么继承RuntimeException。
11.多catch父类的catch放在最下边;异常处理的原则:1.函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用try扑捉,否则编译失败。2.如果调用到了声明异常的函数,要么try要么throws,否则编译失败。3.功能内容可以解决异常,用catch,解决不了用throws告诉调用者去解决。4.若抛出多个异常需要多个catch针对处理。Finnally代码块通常用于关闭资源,如果catch里边有system.exit退出虚拟机则finnally不执行。没catch就没有处理,try finally组合中没有catch,需要声明抛出。
Void show() throws Execption{
Try{
//开启资源
Throw new Execption():
}
Finally{
//关闭资源
}
}
对于try代码块中,执行到有异常语句时则跳转到catch去处理,try代码块中异常语句后边的代码不再执行;只有try中发生异常才回去catch中找相应的处理,如果没有则报错。
注意事项:1.子类在覆盖父类的方法时,父类的方法如果抛出异常,那么子类只能父类异常或该异常的子类。2.如果父类抛出多个异常,那么子类只能抛出父类异常的子集。3.如果父类的方法没有抛出异常,那么子类覆盖方法时绝对不能抛出异常,如果有异常需要处理只能try。多catch时,父类的catch放在最下边。
12.jar包:通过设置classPath后可以直接使用
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------