文章内容为某大学Java面向对象程序设计的考纲和自翻书及部分网上搜索资料,全不全、对不对不算特别重要,毕竟是自用的嘛。
使用教材:《Java基础入门(第二版)》黑马程序员/编著
第四章:
一、单继承 怎样实现继承?
语法格式:
[修饰符] class 子类名 extends 父类名{
//程序核心代码
}
类的修饰符是可选的,用来指定类的访问权限,可以使用public或者省略不写;子类名和父类名都是必选的,并且子类和父类之间要使用extends关键词实现继承关系。
二、重写:>=父类方法的访问权限
需要注意的是,子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
三、super:
(1)有同名成员,用super访问父类成员
(2)首句,出现一次,调用父类构造方法
(3)创建子类对象,自动先调用父类构造方法
1、使用super关键字调用父类的成员变量和成员方法,具体方法:
super.成员变量/super.成员方法([参数1,参数2,…])
- 使用super关键字调用父类的构造方法,具体格式:
super([参数1,参数2…])
四、Object类 P111
(1)equals()(2)hashCode()(3)getClass()
(4)getName()(3)toString()
常用方法:
方法声明 功能描述
boolean equals(Object obj) 判断某个对象与此对象是否相等
final Class<?> getClass() 返回此Object的运行时类
int hashCode() 返回该对象的哈希码值
String toString() 返回该对象的字符串表示
void finalize()垃圾回收器调用此方法来清理没有被任何引用变量所引用对象的资源
五、final P112/117
(1)修饰变量:局部变量、成员变量(直接初始化、构造方法初始化)
(2)修饰方法 (3)修饰类
1、final修饰的类不能被继承;
2、final修饰的方法不能被子类重写;
3、final修饰的变量(成员变量和局部变量)是常量,只能赋值一次;
六、抽象类 P116
(1)abstract修饰类,不能new对象
(2)可有abstract方法(分号结束,无方法体)
(3)有abstract方法必须定义为abstract类
(4)子类须重写父类abstract方法,否则仍为abstract类
基本语法格式:
//定义抽象类
[修饰符] abstract class 类名{
//定义抽象方法
[修饰符] abstract 方法返回值类型 方法名([参数列表]);
//其他方法或属性
}
*注意* 包含抽象方法的类必须定义为抽象类,但抽象类中可以不包含任何抽象方法。抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。
Tips:定义抽象方法只需要在普通方法上增加abstract关键字,并把普通方法的方法体(大括号以及大括号中的部分)全部去掉,然后在方法名称后增加英文分号即可。
七、接口 P117
(1)默认全部成员变量为:public static final
(2)默认全部成员方法为:public abstract
(3)JDK8后,可有public static方法和public default方法,允许有方法体。
(4)实现类必须重写所有抽象成员方法
(5)一个类可先extends一个类,再implements多个接口
(6)一个接口可以extends多个接口
(7)接口不能implements接口
基本语法格式:
[修饰符] interface 接口名[extends 父接口1,父接口2,…]{
[public] [static] [final] 常量类型 常量名 = 常量值;
[public] [abstract] 方法返回值类型 方法名([参数列表]);
[public] default 方法返回值类型 方法名([参数列表]) {
//默认方法的方法体
}
[public] static 方法返回值类型 方法名([参数列表]) {
//静态方法的方法体
}
}
八、多态
(1)条件:继承、重写、父类引用指向子类对象(向上转型)
(2)向上转型不能用父类引用使用子类中非继承的成员 P122
(3)向下转型:父类引用已指向子类对象后,才能强制向下转型为该子类对象。 P124
(4)instanceof关键字 P125
通常来说,在一个类中定义的属性和方法被其他类继承或重写后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法将呈现多种不同形态。通过多态,消除了类之间的耦合关系,大大提高了程序的可扩展性和可维护性。
instanceof可以判断一个对象是否为某个类(或接口)的实例或者子类实例,语法格式如下:
对象(或者对象引用变量) instanceof 类(或接口)
*使用instanceof关键字判断对象anl本质是否为Cat类型,如果是Cat类型就强制转换为Cat类型。(书P125例题)
九、内部类
(1)成员内部类 P126
外部类使用内部类成员,先定义内部类对象
内部类直接访问外部类成员
其他类访问内部类成员,先创建外部类对象,再用外部类对象创建内部类对象。
- 匿名内部类:实现接口,作参数 P131
- 成员内部类:
在成员内部类中,可以访问外部类的所有成员,包括成员变量和成员方法;在外部类中,同样可以访问成员内部类的变量和方法。创建成员内部类的具体语法格式如下:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
- 局部内部类:
也叫做方法内部类,就是定义在某个局部范围中的类,它和局部变量一样,都是在方法中定义的,其有效范围只限于方法内部。
- 静态内部类:
使用static关键字修饰的成员内部类。与成员内部类相比,在形式上,静态内部类只是在内部类前增加了static关键字,但在功能上,静态内部类中只能访问外部类的静态成员,同时通过外部类访问静态内部类成员时,可以跳过外部类从而直接通过内部类访问静态内部类成员。基本语法格式如下:
外部类名.静态内部类名 变量名 = new 外部类名.静态内部类名();
- 匿名内部类:
匿名内部类其实就是没有名称的内部类,在包含有接口类型参数的方法时,通常为了简化代码,不会创建一个接口的实现类作为方法参数传入,而是通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现。基本语法格式如下:
new 父接口(){
//匿名内部类实现部分
}
十、异常
(1)try中 :发生异常后,其余的语句不会执行
(2)catch:可0~多个,从上往下类型匹配,取其一
(3)finally:可0~1个,除非System.exit(),否则一定会执行
try…catch具体语法格式:
try{
//可能发生异常的语句
}catch (Exception类或其子类e){
//对捕获的异常进行相应处理
}
*在try{}代码块中,发生异常语句后面的代码是不会被执行的。
*有些语句无论是否发生异常都要执行,这事就可以在try…catch语句后,加一个finally{}代码块。
*用于处理无论程序是否发生异常都要执行的语句,该代码块并不受return语句和程序异常的影响。
*注意*finally中代码在一种情况下是不会执行的,那就是在try…catch中执行了System.exit(0)语句。System.exit(0)表示退出当前的Java虚拟机,Java虚拟机停止了,任何代码都不能执行了。
十一、thorws与trhow的比较
throws基本语法格式:
[修饰符] 返回值类型 方法名([参数类型 参数名1…]) throws 异常类1,异常类2,… {
//方法体…
}
与throws有所不同的是,throw用于方法体内,并且抛出的是一个异常类对象,而throws关键字用在方法声明中,用来指明方法可能抛出的多个异常。
***通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。需要注意的是,如果throw抛出的是Error、RuntimeException或它们的子类异常对象,则无需使用throws关键字或try…catch对异常进行处理。
十二、垃圾回收
(1)系统线程
(2)垃圾:无引用指向的对象
(3)可System.gc()通知,但不能指定马上回收
考试选择填空主要围绕前四章的内容,大题程序设计会涉及到常用类、集合、I/O流、GUI、多线程,但大抵是考很基础的,与其看材料不如自己写两个题。绝对不是因为我比较懒哦。。。希望有幸看到这的同学共勉,争取在《Java面向对象程序设计》这门课考出高分!!!