- 创建对象的过程(内存图)
Person类创建对象的过程
Person类创建对象-3个引用指向2个对象
- 局部变量和实例变量的区别
package com.briup.day03;
/*
局部变量和实例变量的区别
**A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
**B:在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
**C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
**D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
引用数据类型变量包括哪些:数组,类,接口,枚举
*/
public class Person {
public Person(){//没有返回值,一般public修饰,也可以用private
System.out.println("无参构造器");
}
//显式初始化:hangou
String name="hangou";
public Person(String name) {
System.out.println("初始化前:"+this.name);
//构造器初始化
this.name=name;
System.out.println("初始化后:"+this.name);
System.out.println("有参构造器");
}
//方法中定义局部变量
/**
* 方法只是开辟一块栈空间,没有初始化。获取方法中的值,要传参才能使用money。
* 使用就是要拿到内存空间中的值。输出也是使用。
*/
public void make(double money) {
System.out.println(money);
}
public static void main(String[] args) {
/*
* 类加载器==》方法区(.class)==》栈(方法,局部变量,没有默认值)==》堆(成员变量,有默认值)
*/
//栈空间中的引用person指向
Person person =
new Person("chouhan");
//new创建堆区中的出来的Person对象
//默认赋值:String类型是null,显式赋值是hangou,初始化赋值chouhan
System.out.println(person.name);
//调用方法并传参
person.make(8899);
//创建第2个对象,在堆区中开辟新的内存空间
Person person2 = new Person("choudan");
System.out.println(person2);
/**
* person3只是标识了一块内存空间,左边表示在栈中开辟了内存空间,但没有new对象,
* 说明没有在堆中开辟内存,=person,也就是把person这个引用的值赋值给person3
*/
//两个引用指向了同一个对象
Person person3=person;
System.out.println(person);
System.out.println(person3);
}
}