对象、引用和指针

1、定义一个Person类、创建它的对象p

【创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例】

在代码中通过Person p = new Person();创建了一个Person的实例,即Person对象,赋给p变量,产生了两个东西:p变量和Person对象;

public class  Person
{
	//定义两个成员变量
	public String name;
	public int age;

	//定义say方法
	public void say(String content)
	{
		System.out.println(content);
	}

	public static void main(String[] age)
	{
		//通过new关键字调用Person类的构造器,返回一个Person实例,并直接将该Person实例赋给p变量
		Person p = new Person();

		//访问p的name实例变量,直接为该变量赋值
		p.name = "lili";

		//调用p的say()方法,声明say()方法时定义了一个形参,调用该方法时必须为形参指定一个值
		p.say("haha");

		//输出p的name实例变量
		System.out.println(p.name);
	}

}

在Person类的定义来看,有两个实例变量,变量是需要内存来存储的,因此在创建Person对象是需要内存来存储Person对象中的实例对象,下图显示了Person对象在内存中的存储以及引用变量p指向实际对象的示意图:

neicun

2、对象、引用、指针的关系

(1)Person对象由多块内存组成,不同内存块分别存储了Person对象的不同成员变量,将这个Person对象赋值给一个引用变量时,Java让引用变量指向这个对象,即程序中的p变量指向这个由多块内存组成的Person对象

(2)类也是一种引用类型,因此程序中的Person类型的变量(p变量)实际上是一个引用,存储在栈内存中,指向实际的Person对象,真正的Person对象存储在堆内存中,栈内存中的变量未存储真正的成员变量,只是存储一个地址,通过这个地址引用到实际对象,Java里的引用就是C里的指针

(3)当一个对象被创建成功后,对象保存在堆内存中,Java不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象;

(4)若希望通过Java的垃圾回收机制来回收一个对象,只需要把它的引用变量赋值为null。

posted @ 2019-12-11 12:29  三月狮子  阅读(647)  评论(0)    收藏  举报