java疯狂讲义 笔记 java疯狂讲义第三版

您所在的位置:网站首页 疯狂java讲义第五版下载 java疯狂讲义 笔记 java疯狂讲义第三版

java疯狂讲义 笔记 java疯狂讲义第三版

#java疯狂讲义 笔记 java疯狂讲义第三版| 来源: 网络整理| 查看: 265

public class Person { public int age; public String name; public void say(String content) { System.out.println(content); } }

Person p1 = new Person();//该语句声明了变量类型为Person、变量名为p1的引用类型变量。同时创建了一个Person类的对象 p1.age = 5;p1.name = “张三”; 我们重点看语句Person p1 = new Person(); 此时需要注意:变量p1在计算机内存中的栈区域,而new Person()对象则在计算机的堆内存中。在这里,可以这样来简单理解计算机的内存——在计算机的内存分为好多个区域,其中有一个区域叫做栈,一个区域叫做堆。 特别注意,只要在方法中声明的变量无论是基础数据类型还是引用数据类型,该变量都会出现在"栈"这个内存区域中。而只要是通过new关键字创造出来的对象都在内存区域的"堆"这个区域中,这一点跟是不是在方法中创建对象无关,只要是通过new关键字创建的对象都会在堆内存区中。

而该赋值语句Person p1 = new Person();实际上并不是把new Person()对象本身赋给了变量p1,而是将new Person()对象所在堆内存区域中的位置信息赋值给p1变量。换句话说Person类型p1变量本身并不是存储了new Person()对象本身,而是存储了该对象所在的名为"堆"内存这一区域中的位置信息。 而p1.age = 5;和p1.name = “张三”;实际的操作流程是先通过p1中存储的new Person()对象所在的位置信息,在堆内存中找到new Person()对象本身。然后再访问new Person()对象里面的成员变量age和name。 而由于并不是通过对象new Person()本身来访问它自己的成员而是通过变量名为p1这一Person类型的变量来间接访问new Person()对象的成员。所以该访问形式也称为讲解访问。而p1类似的变量也称为引用类型变量。

而为什么不能直接访问呢?个人认为大概有以下两个原因。 1.Java语言语法规定是不能直接访问堆内存中的变量的。 2.我们注意看Person类的成员变量,里面有一个int类型的成员变量和一个String类型的成员变量。所以它的实际所占用的空间相对来说还是比普通变量要大的多的,直接使用并不方便。而且直接把对象本身赋值给变量p1,那么p1本身也变得很大了,这样是十分浪费内存空间的。而实际上p1本身是很小的,因为它只需存储对应对象的位置信息即可。同时通过它的位置信息来间接访问也会轻便很多。 这就好比别人问你一个比较复杂的问题,直接回答他是需要费时费力的,而此时我们可以直接给他一个网址,上面就有关于他所问的问题的答案,这样对于你自己来说就会简单很多了,毕竟你仅仅提供了一个网址就解决了他的问题。

其实Java中的应用类型变量本质就是c语言中的指针,里面存储的位置信息就相当于指针中存储的地址信息,new Person();就类似与C语言中的malloc()函数



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3