Head first java第九章

Head First Java 第九章 对象的前世今生

欢迎

你好! 这是我在新冠病毒肆虐的寒假进行的读书笔记。打算从第九章开始记录我在看书过程中学到的知识。

两种区域

  1. 堆(heap) :对象的生存空间。
  2. 栈(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);//传值给构造函数
	}
}

只要你有自己写的构造函数,都是再对编译器说,我自己的构造函数不要你管。

可以用无参构造函数来调用我们提供的默认值来构造函数。但如果无法提供默认值,有默认值的无参构造函数就是不合理的。

发布了27 篇原创文章 · 获赞 2 · 访问量 680

猜你喜欢

转载自blog.csdn.net/qq_44273739/article/details/104187231