网站整体设计流程房屋装修免费设计出图
web/
2025/9/29 22:55:09/
文章来源:
网站整体设计流程,房屋装修免费设计出图,有没有专门做采购的网站,建筑网app2019独角兽企业重金招聘Python工程师标准 偶然想起Java中对象和引用的基本概念#xff0c;为了加深下对此的理解和认识#xff0c;特地整理一下相关的知识点#xff0c;通过具体实例从两者的概念和区别两方面去更形象的认识理解#xff0c;再去记忆。12一、对… 2019独角兽企业重金招聘Python工程师标准 偶然想起Java中对象和引用的基本概念为了加深下对此的理解和认识特地整理一下相关的知识点通过具体实例从两者的概念和区别两方面去更形象的认识理解再去记忆。12一、对象和引用的概念 在Java中万物皆对象比如我们定义一个简单的动物类 class Animal {String count;String weight;....
} 12345有了这个Animal类之后我们可以来创建一个Animal对象 Animal an new Animal(); 1我们把编写这个语句的动作就称作创建一个对象细化这个动作为 1. 右面的”new Animal”是以Animal类为模板的在堆空间里创建一个Animal对象 2. 末尾的”( )”代表着在对象创建之后立即调用Animal类的构造函数对新生成的对象进行初始化。如果没构造函数Java会有一个默认的构造函数的 3. 左面的”Animal an” 创建了一个Animal类引用变量。即以后可以用来指向Animal对象的对象引用 4. “” 操作符使对象引用指向刚才创建的那个Animal对象。 拆分开也就是等同于 Animal an;
an new Animal(); 12有两个实体一个是对象引用变量一个是对象本身。 在java中都是通过引用来操纵对象的这也是两者的区别。 二、对象和引用的区别 1、关联性 1. 当对象的引用变量指向对象时两者就互相联系起来改变引用的属性就会改变对象的属性 2. 如果同一个对象被多个引用变量引用的话则这些引用变量将共同影响这个对象本身 3. 在java中都是通过引用来操纵对象的。 2、差异性 1. 一个对象可以被不同的引用变量来操纵同时一个引用变量也可以指向不同的对象但是同一时刻下只能指向一个对象。 2. 从存储空间上来看对象和引用也是相互独立的对象一般存储在堆中而引用存储在堆栈中存储速度而更快。 对于引用变量的深层含义未必在初学的时候就能深刻理解 所以理解好下面这两句话的真正含义非常重要 Case ccnew Case();Case cc;
ccnew Case();123451.先搞清楚什么是堆什么是栈。 Java开辟了两类存储区域对比二者的特点 存储区域存储内容优点缺点回收栈基本类型的变量和对象的引用变量存取速度比堆要快仅次于寄存器栈数据可以共享存在栈中的数据大小与生存期必须是确定的缺乏灵活性。栈中主要存放一些基本类型的变量当超过变量的作用域后Java会自动释放掉该变量,内存空间可以立即被另作他用堆由new等指令创建的对象和数组可以动态地分配内存大小生存期也不必事先告诉编译器由于要在运行时动态分配内存存取速度较慢由Java虚拟机的自动垃圾回收器来回收不再使用的数据堆栈的存储特点决定了其中存储的数据类型。 注意栈内存储的除了基本类型的变量String int 这种类型的变量还会存储对象的引用变量。java中引用变量实际上是一个指针它指向的是堆内存中对象实例。 引用变量就相当于是为数组或对象起的一个名称以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。 2.给引用变量赋值 回过头再来看代码 实际上里面分解成了四个步骤。 Case cc; 在栈内存里面开辟了空间给引用变量cc这时ccnull
ccnew Case();1. new Case()在堆内存里面开辟了空间给Case类的对象这个对象没有名字
2. Case()随即调用了Case类的构造函数
3. 把对象的地址在堆内存的地址给引用变量cc1234567这样我们就明确了 Java中这里的“”并不是赋值的意思而是把对象的地址传递给变量对象创建出来其实连名字都没有因此必须通过引用变量来对其进行操作。 为了形象地说明对象、引用及它们之间的关系可以做一个或许不很妥当的比喻。对象好比是一只很大的气球大到我们抓不住它。引用变量是一根绳 可以用来系汽球 紧接着就会问引用变量是怎么传递的呢 这就涉及到Java唯一的参数传递方式——按值传递 看下面一段代码 public class ObjectRef {基本类型的参数传递public static void testBasicType(int m) {System.out.println(m m);//m50m 100;System.out.println(m m);//m100}参数为对象不改变引用的值s即sMain指向的对象执行了append方法在原来的字符串上加了段“_add”public static void add(StringBuffer s) {s.append(_add);}参数为对象改变引用的值 引用变量指向了一个新的对象已经不是sMain指向的对象了public static void changeRef(StringBuffer s) {s new StringBuffer(Java);}public static void main(String[] args) {int i 50;testBasicType(i);System.out.println(i);i50StringBuffer sMain new StringBuffer(init);System.out.println(sMain sMain.toString());sMaininitadd(sMain);System.out.println(sMain sMain.toString());sMaininit_addchangeRef(sMain);System.out.println(sMain sMain.toString());sMainJava}
} 看这里给人的感觉是传递过来的明明是对象的引用为什么就是值得传递呢 因为传递之前被传的就是个引用啊我们所谓的“传地址”在传之前那可是一个实例传过来的是实例的地址。这里传递的值从始至终就是个地址sMain就是个地址传给s还是个地址。你们感受下 参数为对象不改变引用的值
s即sMain指向的对象执行了append方法在原来的字符串上加了段“_add”public static void add(StringBuffer s) {s.append(_add);} 以上输出的结果会是“init_add” 而这里s引用了一个新的对象根本没有进行参数的传递它和之前的sMain没有关系了。 参数为对象改变引用的值
引用变量指向了一个新的对象已经不是sMain指向的对象了public static void changeRef(StringBuffer s) {s new StringBuffer(Java);}以上输出的结果会是“Java” . . 引用《Java编程思想》中的一段话 倘若“将一个对象赋值给另一个对象”实际是将“引用”从一个地方复制到另一个地方 转载于:https://my.oschina.net/architectliuyuanyuan/blog/1630113
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84123.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!