Thinking In Java 学习笔记 5.初始化和清理

构造器 构造方法 与类同名 没有返回值 自动初始化
可以有多个,带不同类型的参数,没有写构造方法时会有默认构造方法,它没有参数,默认构造器是default的。
需要在包外返回某个类对象时需要重写构造器。
overloading 方法重载 方法名相同,参数类型顺序不同
向下转型需要强制类型转换,向上转型自动转换

this this 关键字只能用于那些特殊的类——需明确使用当前对象的句柄。


static
1.我们不可从一个 static方法内部发出对非 static方法的调用
2.若将一个 static方法置入一个类的内部,它就可以访问其他static 方法以及static 字段。
3.它意味着一个特定的方法没有this。

垃圾回收
垃圾收集并不等于“破坏”!
我们的对象可能不会当作垃圾被收掉!
垃圾收集只跟内存有关!
局部变量需要手动初始化, 全局变量默认初始化
内存分配以较大的块为单位,每个块由相应的代数来记录它是否存活,某个块被引用,代数增加
停止——复制
标记——清扫(只会产生少量垃圾时使用)
初始化顺序
主类,先static代码块。再main
先静态对象,后非静态对象
静态变量和方法 只初始化一次
在类的内部,对象在任何方法调用之前被初始化
static main
new 一个类 先初始化成员变量,再初始化构造方法
静态代码块
static int i;
static{
i = 47;
}
实例初始化字句
String s1;
String s2;
{
s1 = new String("abc");
s2 = new String("cccc");
System.out.println(s1 + s2);
}
初始化顺序
class A{
static {
System.out.println("static A");
}
void f() {
System.out.println("A.f()");
}
void g() {
this.f();
}
}
public class Test extends A{
void f() {
System.out.println("Test.f()");
}
void g() {
this.f();
super.g();
System.out.println("Test.g()");
}
public static void main(String[] args) {
Test t = new Test();
t.g();
}
static {
System.out.println("static Test");
}
}
output
static A
static Test
Test.f()
Test.f()
Test.g()

猜你喜欢

转载自blog.csdn.net/jjj1299894209/article/details/80894589
今日推荐