1、即使一个类只有包访问权限,其public main()仍然是可访问的
2、java会自动在导出类(子类)的构造器中插入对基类构造器的调用
3、如果基类有默认构造器,则导出类会在初始化时自动先调用基类构造器,再调用自己的构造器。单如果基类含有带参数的构造器,就不会有默认构造器了,那么子类就不可能默认的知道要调用哪个构造器,并且也不知道该自动传递什么样的参数进去,因此这种情况下需要手工通过super关键字调用基类的构造器。导出类构造器中第一件要做的事情就是调用基类构造器(没有默认基类构造器的情况下),否则编译器将会报错
4、@orerride关键字可以防止你在不想重载夫类方法的情况下意外的重载了父类的方法
5、is-a的关系用继承来表达,而has-a的关系用组合来表达
6、import引入类,import static引入类中的静态方法(包括所有重名的方法)
7、在需要基类的地方传入导出类,导出类自动的转换成了基类,这种情况称为向上转型
8、到底是该使用组合还是继承,一个最清晰的判断方法就是问一问自己是否需要从导出类向基类向上转型,如果必须向上转型,则继承是有必要的,否则需要慎用继承
9、final修饰的常量如果是基本数据类型,则该常量数值不变,如果修饰的是一个引用,则该引用一旦指定了对象以后不能再指定别的对象,常量可以被编译器在编译时执行计算式,可以减轻运行时负担
10、我们不能因为某数据是final的就认为可以在编译期可以知道他的值,事实上,这个值同样可以用随机函数生成,只不过一旦生成以后就不能再改变了
public static final int INT_5 = rand.nextInt(20);
11、java运行生成空白final,声明final单又未给定初始值,无论什么情况,编译器都确保空白final在使用前必须被初始化
12、必须在域定义处或者构造器中对final域进行初始化,否则编译器报错,这正是编译器确保空白final在使用前必须被初始化的原因
13、java允许在参数列表中以声明的方式将参数指明为final,这意味着你无法在方法中更改参数引用所指向的对象,这一特性主要用于向匿名内部类传递参数
14、使用final方法(method)的原因有两个,第一个是把方法锁定,以防止任何继承类修改他的含义,不能被覆盖,第二个原因是效率。
15、final和PRivate关键字,类中所有的private方法都隐式的指定为final的,由于无法取用private方法,所以就无法覆盖它,虽然可以对private方法添加final修饰词,但毫无意义。
16、finla类,当将某个类的整体定义为final时,就表明了不打算继承该类,而且也不允许别人这么做。final类中的所有方法都隐式的指定为final,因为无法覆盖他们,可以在final
类中给方法添加修饰词final,这同样也毫无意义
17、java类的加载发生于创建类的第一个对象之时,当时当访问static域或者方法时,也会发生加载
18、加载一个类时,类中的所有static域都会按照书写顺序依次加载
19、类中无论是成员变量还是方法中的变量的初始化过程,都在调用构造函数之前发生
新闻热点
疑难解答