16.接口补充:
17.字符是基本数据类型,字符串是引用数据类型-->两者不能强制转换
18.内部类可以被public,private,友好的,protected,static修饰
19.键盘录入补充:
20.继承关系的补充:
1.子类的有参构造函数和是否调用父类的有参数的构造函数无必然联系。
2.子类即使没有显示构造函数,也会有个无参数的默认构造函数(前提没写别的有参构造函数),仍然会调用父类的构造函数。
21.接口以及异常的补充:
22.接口WindowConstants-->用于设置关闭模式:
23.在Java中,抽象方法不能被private
修饰。这是因为抽象方法的存在是为了让子类去实现的,而private
修饰的方法只能被当前类访问,子类无法访问到被private
修饰的父类方法,因此抽象方法不能使用private
修饰。
如果需要在父类中定义一个能被子类访问的方法,可以考虑使用默认访问修饰符(即不使用任何修饰符)或protected
修饰符,public也可以。这样定义的方法可以被同一个包中的类或子类访问,但不能被其他包的类访问。
24.异常补充:-->异常处理顺序
出现多个catch块时,应该先处理小异常,再处理大异常,也就是将处理父类异常的catch块放在处理子类异常的catch块之后。Exception是所有异常的父类,如果处理Exception的catch语句块放在前面,会导致任何异常在这个catch块都能被匹配,后续catch块将变得没有意义。
25.以下程序执行后,错误的结果是()
public class Test {
private String name = "abc";
public static void main(String[] args) {
Test test = new Test();
Test testB = new Test();
String result = test.equals(testB) + ",";
result += test.name.equals(testB.name) + ",";
result += test.name == testB.name;
System.out.println(result);
}
}
第三个判断语句详解:
name成员变量并没有被static关键字修饰,那么每个Test类的对象被创建时,都会先执行private String name = "abc";(注意这里使用了直接赋值的方式,没有使用new关键字即没有创建新的对象)。在test对象初始化时,JVM会先检查字符串常量池中是否存在该字符串的对象,此时字符串常量池中并不存在"abc"字符串对象,JVM会在常量池中创建这一对象。当testB被创建时,同样会执行private String name = "abc";,那么此时JVM会在字符串常量池中找到test对象初始化时创建的"abc"字符串对象,那么JVM就会直接返回该字符串在常量池中的内存地址,而不会新建对象。也就是说test.name和testB.name指向的内存是同一个,那么test.name == testB.name返回true。
26.this和super关键字总结:
27.综合题:
对于B: 抽象类不一定有抽象方法,但如果一个类中有抽象方法,那么必定是抽象类.
对于C: protected成员在子类可见性可以修改: protected修饰的成员在子类中可见。可以在子类中重写父类的方法或变量的访问控制符,往大的修改。
对于E: final的的成员方法只能读取类的成员变量 这里的类的成员变量包括了两部分: 类变量和实例变量 另外,fianl修饰的方法不能被重写(覆盖)
对于F: String 是不可修改的,因为String 源码 有final修饰的属性value[]。
28.类的修饰:
a.static:
static修饰的为类成员,会随着类的加载而加载,比如静态代码块,静态成员,静态方法(这里只是加载,并没有调用)等等,可以想象一下,如果把一个Class文件中的外部类设为static,目的难道是让这个类随着应用的启动而加载吗?如果在这次使用过程中根本没有使用过这个类,那么是不是就会浪费内存。这样来说设计不合理,总而言之,设计不合理的地方,Java是不会让它存在的。 而为什么内部类可以使用static修饰呢,因为内部类算是类的成员了,如果没有使用静态来修饰,那么在创建内部类的时候就需要先有一个外部类的对象,如果我们一直在使用内部类,那么内存中就会一直存在外部类的引用,而我们有时候只需要使用内部类,不需要外部类,那么还是会浪费内存,甚至会造成内存溢出。使用static修饰内部类之后,内部类在创建对象时就不需要有外部类对象的引用了。 最终结论就是:static可以用来修饰内部类,但是不可以用来修饰外部类
b.修饰符:
内部类可以是静态static的,也可用public,友好的,default,protected和private修饰,
外部类的修饰符只能是public,abstract,final,友好的