本章目标
掌握JAVA中的内存划分
初窥Java引用传递
垃圾的产生分析
内存划分:对象创建之初
class Person{
String name;//声明姓名属性
int age;//声明年龄属性
public void tell(){//取得信息的方法
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class ClassDemo02 {
public static void main(String[] args) {
Person per = new Person();//创建并实例化对象
}
}
内存操作:为属性赋值
class Person{
String name;//声明姓名属性
int age;//声明年龄属性
public void tell(){//取得信息的方法
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class ClassDemo03 {
public static void main(String[] args) {
Person per = null;//声明对象
per = new Person();//实例化对象
per.name = "张三";//为 name 属性赋值
per.age = 30;//为 age 属性赋值
per.tell();//调用类中的方法
}
/*结果:
* 姓名:张三, 年龄:30
* */
}
声明多个对象
class Person{
String name;//声明姓名属性
int age;//声明年龄属性
public void tell(){//取得信息的方法
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class ClassDemo04 {
public static void main(String[] args) {
Person per1 =null;//声明 per1 对象
Person per2 =null;//声明 per2 对象
per1 =new Person();//实例化 per1 对象
per2 =new Person();//实例化 per2 对象
per1.name = "张三";//设置 per1 对象的 name 属性内容
per1.age = 30;//设置 per1 对象的 age 属性内容
per2.name = "李四";//设置 per2 对象的 name 属性内容
per2.age = 33;//设置 per2 对象的 age 属性内容
System.out.print("per1 对象中的内容 -->");
per1.tell();//per1 调用方法
System.out.print("per2 对象中的内容 -->");
per2.tell();//per2 调用方法
}
/*结果:
* per1 对象中的内容 -->姓名:张三, 年龄:30
* per2 对象中的内容 -->姓名:李四, 年龄:33
* */
}
内存划分
对象引用传递
class Person{
String name;//声明姓名属性
int age;//声明年龄属性
public void tell(){//取得信息的方法
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class ClassDemo05 {
public static void main(String[] args) {
Person per1 =null;//声明 per1 对象
Person per2 =null;//声明 per2 对象
per1 =new Person();//只实例化 per1 一个对象
per2 = per1;//把per1 的堆内存空间使用权给per1
per1.name = "张三";//设置 per1 对象的 name 属性内容
per1.age = 30;//设置 per1 对象的 age 属性内容
//设置 per2 对象的内容,实际上就是设置 per1 对象的内容
per2.age = 33;
System.out.print("per1 对象中的内容 -->");
per1.tell();//调用类中的方法
System.out.print("per2 对象中的内容 -->");
per2.tell();
}
/*结果:
* per1 对象中的内容 -->姓名:张三, 年龄:33
* per2 对象中的内容 -->姓名:张三, 年龄:33
* */
}
引用传递内存图
垃圾产生
class Person{
String name;//声明姓名属性
int age;//声明年龄属性
public void tell(){//取得信息的方法
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class ClassDemo06 {
public static void main(String[] args) {
Person per1 =null;//声明 per1 对象
Person per2 =null;//声明 per2 对象
per1 =new Person();//实例化 per1 对象
per2 =new Person();//实例化 per2 对象
per1.name = "张三";//设置 per1 对象的 name 属性内容
per1.age = 30;//设置 per1 对象的 age 属性内容
per2.name = "李四";//设置 per2 对象的 name 属性内容
per2.age = 33;//设置 per2 对象的 age 属性内容
per2=per1;//将 per1 的引用传递给per2
System.out.print("per1 对象中的内容 -->");
per1.tell();//调用类中的方法
System.out.print("per2 对象中的内容 -->");
per2.tell();
}
/*结果:
* per1 对象中的内容 -->姓名:张三, 年龄:30
* per2 对象中的内容 -->姓名:张三, 年龄:30
* */
}
垃圾产生的内存关系