博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名对象与非匿名对象的区别
阅读量:4564 次
发布时间:2019-06-08

本文共 969 字,大约阅读时间需要 3 分钟。

 类封装完以后就可以通过使用new关键字和类的构造方法来创建对象,这种对象分为两种:匿名对象与非匿名对象。何为匿名对象,何为非匿名对象呢?举个例子:假如有如下类:

        package com.heima.vo;

        public class Student{

                    private String name="lisi";
                    private int age=12;
                    public void print(){

                                System.out.println(name+":"+age);

                   }
        }

        这种形式的对象称之为匿名对象:new Student();

        这种形式的对象称之为非匿名对象:Student stu=new Student(); 

        两者的区别:

                1、两者的结构不同,这一点通过其表现形式一目了然,在此不作赘述;

                2、在内存中的分布不同:匿名对象创建的对象只存在于堆中;非匿名对象创建对象时的对象虽然也在堆中,但其类变量却在栈中,栈中的类变量通过创建变量的内存地址来指向相应的对象。

                3、①匿名对象调用方法有意义,而调用类中的属性则没有意义:例如:new Student().name="wangwu";,这属于使用匿名对象调用属性,那么为什么说这样做没有意义呢?当代码执行到这一行代码时则修改new Student()对象的name属性,可是当该条语句被执行后呢?由于这时new Student()没有继续引用,所以此对象在堆中就成了垃圾。那么为什么说匿名对象调用方法有意义呢?方法存在于栈空间,当在内存中创建的对象调用方法时,JVM开始为局部变量开辟内存空间,方法开始执行,方法强调其功能,对象调用方法可以完成其功能,所以匿名对象调用方法有意义。

                ②非匿名对象调用方法或调用类中的属性都有意义(其中前者不在累述,请参见第①点):例如:Student stu=new Student();,stu.name="wangwu"这属于使用非匿名对象调用属性,那么为什么说这样做有意义呢?当代码执行到这一行代码时则修改stu对象的那么属性,此时使用该对象调用print()方法则输出的name值为wangwu,鉴于这一点所以认为非匿名对象调用属性实用意义的。

转载于:https://www.cnblogs.com/aiqingqing/p/4582468.html

你可能感兴趣的文章
文件下载
查看>>
extjs grid renderer用法
查看>>
vue 如何在循环中绑定v-model
查看>>
shell脚本
查看>>
[代码笔记]JS保持函数单一职责,灵活组合
查看>>
cmd 重定向
查看>>
【IOS开发】如何画1像素的线
查看>>
【计算机视觉】双目测距(五)--匹配算法对比
查看>>
KMP模板
查看>>
luogu 1314 聪明的质检员
查看>>
[转载]求职者防骗必读!楼主亲身经历告诉你岗前培训多么不靠谱而且违法!
查看>>
Hibernate内存溢出分析一例
查看>>
基于Axis1.4的webservice接口开发(接口调用)
查看>>
Hive内置函数详解
查看>>
【转】MyEclipse快捷键大全
查看>>
IT职业技能图谱10--Hadoop家族技能图谱
查看>>
Java - 反射(1)
查看>>
控制台中显示执行的Sql语句
查看>>
Linux(Centos7)下搭建SVN服务器
查看>>
安卓开发的Tasks and Back Stack
查看>>