首先我们来看一组代码的注释:

 

 

public class Oor{                                       //定义一个类
 public static void main(String args[]){      //主方法
  Person per = new Person();                //创建并实例化对象
  per.name="张三";                                  //为属性赋值
  per.age = 30;                                        //为属性赋值
  per.tell();                                               //调用方法
 }

}


class Person
{
 String name;      //声明姓名属性
 int age;              //声明年龄属性
 public void tell(){             //定义方法
  System.out.print("姓名:"+name +",年龄:"+age);     //输出姓名  年龄

}

在这里我们知道 :

//类属于引用传递类型,从数组中可以知道,引用数据类型必然存在栈内存、堆内存的引用关系 实际上类与对象的使用易燃存在这样的关系
由上面的案例我们知道public class Oor
{
 public static void main(String args[] ){
  person per =new person();
}
  }
  使用new 开辟堆内存空间
  ,现在我们回过来思考。栈内存和堆内存的概念。
  Person per = new Person();
  声明对象:Person per 与数组声明一样,数组名称就保存在栈内存中,只开辟了栈内存的对象是无法使用的,必须有其他堆内存的引用才可以使用。
  。通过new Person(),在堆中开辟空间,所有的内容都是默认值。
String 是一个字符串,本身就是一个类,就是一个 引用数据类型,则此时的默认值就是null
 int是一个整数数据类型,本身是一个数,所以是基本数据类型,则此时的默认值就是0
 如果进一步划分以上的代码就可以写成如下的格式:调用属性:对象属性 调用方法();
 那么接下来的per.age=30 ;在这里为对象赋值
 那么per.name="张三";  也是为对象赋值,只是赋值的对象不同而已,一个是为name赋值,一个是为age赋值
 在下面per.tell(); 调用类中的方法。

接下来我们看赋值两个对象。

 

public class Oor{                                       //定义一个类
 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 调用tell方法输出
  System.out.print(" 输出per2的值");
   per2.tell();      //per2 调用tell方法输出。

 }

}


class Person
{
 String name;      //声明姓名属性
 int age;              //声明年龄属性
 public void tell(){             //定义方法
  System.out.print("姓名:"+name +",年龄:"+age);     //输出姓名  年龄

}

在这里我们可以看到,开辟了不同的栈内存和堆内存,也就是说,。他们使用是不受干扰的,互不干扰。pre1有自己的内存空间。pre2也有自己的内存空间,所以输出的结果是不一样的,接下来我们看一下,输出结果一样的情况。

 

public class Oor{                                       //定义一个类
 public static void main(String args[]){      //主方法
  Person per1=null;                //声明per1对象
  Person per2=null;               //声明per2对象
  per1 = new Person();       //实例化per1对象
  per2 = per1;     //只实例化了per1 并没有实例化per2.per1的内存使用权限交给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 调用tell方法输出
  System.out.print(" 输出per2的值");
   per2.tell();      //per2 调用tell方法输出。

 }

}


class Person
{
 String name;      //声明姓名属性
 int age;              //声明年龄属性
 public void tell(){             //定义方法
  System.out.print("姓名:"+name +",年龄:"+age);     //输出姓名  年龄

}

在这道代码中,per1的内存权限交给per2来使用,那么栈内存和堆内存都一样,所以说输出的结果都是一样的,即使在per2中有赋值。