欢迎
你好! 这是我在新冠病毒肆虐的寒假进行的读书笔记。打算从第九章开始记录我在看书过程中学到的知识。
两种区域
- 堆(heap) :对象的生存空间。
- 栈(Stack): 方法调用及变量的生存空间。
两种变量
实例变量:声明在类中,方法之外,代表独立对象的“字段”
局部变量:声明在方法中,或是方法的参数。它们是暂时的,只存在于方法调用期间。
局部变量
所有的局部变量都存在于栈上相对应的堆栈块中。
对象引用变量和 primitive 主数据类型变量都是放在栈上的。
不管是实例变量或是局部变量,对象本身都会在堆上。
实例变量
1、带有primitive主数据类型的实例变量的对象,变量所需的空间是在对象中。
2、对象带有其他对象的变量,假设为Dog对象,Java只会留下Dog的引用量而不是对象本身所用到的空间。当引用变量被赋值才会在堆上占有空间。
构造函数
对象被赋值引用之前就执行。
public class Duck{
public Duck()
{
System.out.println("Quack");
}
}
public class UseDuck{
public static void main(String[] args)
{
Duck d = new Duck();//启动构造函数
}
}
如果想要某种对象先初始化再被使用,最好的方法就是把初始化的代码放在构造函数中。
public class Duck{
int size;
public Duck(int ducksize){
System.out.println("Quack");
size = ducksize;
System.out.println("size is "+size);
}
}
public class UseADuck{
public static void main(String[] args){
Duck d = new Duck(42);//传值给构造函数
}
}
只要你有自己写的构造函数,都是再对编译器说,我自己的构造函数不要你管。
可以用无参构造函数来调用我们提供的默认值来构造函数。但如果无法提供默认值,有默认值的无参构造函数就是不合理的。