第二周
1、类的多态:属性不会被覆盖,当父类和子类中存在相同的属性名时,子类中会有两个,具体是哪个值,看声明的类名!!
方法会被覆盖,编译看左边,执行看右边。
2、char c1='A';int i=65; c1==i //true 不论谁先谁后
3、
4、
重写equals时,必须要进行强制类型转换,否则原对象并没有子类的属性值,强制转换之后获得
5、多态性:编译和运行的不一致(子类对象的多态性),方法的重写;
格式:Object obj=new String("hello"); 父类的引用指向子类的对象
多态的好处:不用在方法里,一般为方法中的形参。
减少了大量重载的方法的定义,开闭原则(对扩展开放,对修改关闭)
举例: public boolean equals(object obj)
6、
7、
8、静态方法不能调用非静态属性!!!调用的属性前面必须用static修饰。
构造器是用来初始化对象的信息,而不是类的信息。
9、同一个类的方法可以互相加载,因为一开始全都已经加载到方法区里了。
10、初始化对象:构造器由父及子,先调静态代码块!!非静态代码块和显示赋值的顺序不相上下,谁放在前面先调用谁。
属性赋值顺序:初始化赋值-》显示赋值/非静态代码块赋值-》构造器赋值-》对象.属性赋值
在创建对象时,首先找到父类(父类的非静态代码块->构造器->子类的非静态代码块->子类的构造器)
此时父类中的method已经被子类覆盖,为当前对象的method,即为重写的method。
11、static只能用来修饰成员变量和成员方法,不能用来修饰局部变量,局部变量作用域在方法体内,当方法被调用时局部变量获得内存的空间,到方法结束,所占据的内存空间释放。
12、对象设为静态,即指向的地址不能变,但对象里的属性值如果不是静态则可以变。
13、成员变量和局部变量即使名字相同,如果在初始化时没有默认赋值,则是完全不同的两个变量。
当外部类和内部类有相同的成员变量名时:
第一个是形参传进的name
第二个是该内部类中的成员变量name
是外部类的成员变量name
14、自动装箱时,当数值在一定范围内,不同数值对象指向的地址相同
15、==符号进行比较时,两边的数据类型必须是兼容(自动类型转换)或者相等。
为不同对象类型,不能进行比较
Integer自动拆箱成为int型,然后自动类型转换成为double
Java三元运算符要求返回的数值类型相同,如果返回的数据类型不一样,则进行字符强转,返回类型精度更高的类型。
16、单例模式 :某个类中只有一个实例,构造方法私有化。分为懒汉式和饿汉式。
将构造器和实例化类的对象设为私有,然后以公共的方法返回该对象。
实例化对象为私有静态变量,因为返回对象的方法是静态方法。
17、异常 一般需要人为处理的异常是编译时异常
18、 栈中有多个划分区域,其中包含局部变量表和操作数栈
return 数据;分为两个过程,先将数据放到操作数栈中,然后再将操作数栈中的值拿出去进行返回。当return语句在try-catch-finally中时,放完操作数栈会执行finally语句,最后返回。
finally里有return 结果为11;finally里没return 结果为10因为当try里return时会把num=10的值暂时放入操作数栈,++num改变的是局部变量表中的值,则回到try中得到的数据是10。
19、运行时异常不用throws 进行处理,因为运行时异常不做处理会一直向上抛,最终会交给JVM处理,JVM将会打印出异常的跟踪栈信息,并终止程序运行
20、在开发中,用一个变量存放当前已有的对象,初始化的数组中对象的个数可能远远大于实际个数,因此返回实际对象时,应当以变量个数为准重构新的对象
21、exception下有两个类,分别是Checked Exception和RuntimeException,运行异常相对于其它异常它编译时可以通过,一般对于运行时异常都不处理,出现的可能性概率高。
22、finalize是在object中的方法,当类的对象要被GC回收时,可以使用finalize进行最后的语句的执行,在jdk9之后不推荐使用
23、在catch里面也出现异常了,还是会执行finally
24、
25、同一进程的不同线程之间共享方法区和堆,但隔离虚拟机栈、程序计数器和本地方法栈