匿名对象与非匿名对象的区别

类封装完以后就可以通过使用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,鉴于这一点所以认为非匿名对象调用属性实用意义的。

时间: 2024-10-20 11:06:44

匿名对象与非匿名对象的区别的相关文章

静态对象与非静态对象

Java静态对象和非静态对象有什么区别?? 静态对象                                                        非静态对象      是类共同拥有的.                                          是类独立拥有的, 内存空间上是固定的                                              空间在各个附属类里面分配 先分配静态对象的空间                   

js遍历数组对象和非数组对象

//---------for用来遍历数组对象 var i,myArr = ["a","b","c"]; for (var i = 0; i < myArr.length; i++) { console.log(i+":"+myArr[i]); }; //---------for-in 用来遍历非数组对象方法一. var man ={"1":"a","2":&qu

【C++总结】函数形参,返回const对象与非const对象

非引用形参 //交换函数,传递的实参只是参数的副本.并不能起到交换作用 void swap(int a, int b) { int m = a; a = b; b = m; } 指针形参 //可以起到交换作用 void swap(int *a, int *b) { int m = *a; *a = *b; *b = m; } 引用形参 //可以起到交换作用 void swap(int &a, int &b) { int temp = a; a = b; b = temp; } const形

[Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bits.bitAt(4);//1 bits.bitAt(8);//1 bits.bitAt(9);//0 enable方法被重载了,可以传入一个索引或索引的数组.第二个类的API是字符串集合:无序的字符串集合 var set=new StringSet(); set.add('Hamlet'); se

js高级---本地对象、内置对象、宿主对象

名词参考: 原生对象:也叫内部对象.本地对象.native object 内置对象:Build-in object 宿主对象:host object ECMA-262 定义: 原生对象:独立于宿主环境的ECMAScript实现提供的对象.与宿主无关,在javascript(远景浏览器).nodejs(node平台).jscript(ie浏览器).typescript(微软平台)等等中均有这些对象.简单来说,本地对象就是 ECMA-262 定义的类(引用类型).在运行过程中动态创建的对象,需要ne

4.8static关键字,4.9嵌套类,4.10匿名累,4.11对象初始化器

4.8主要讲了static关键字,并且具体介绍了静态字段,静态属性,静态方法,静态类,静态构造方法,单例模式,具体是采用什么方式访问的. 4.9介绍了一个概念叫嵌套类,类定义在另一个类的内部,由于嵌套类被声明的位置比较特殊,致使其访问权限与引用方式与普通类有所区别. 4.10匿名类:使用匿名类的方式创建实例,可以将一组只读属性封装到单个对象中. 4.11对象初始化器:对象初始化器可以有效解决一个类中属性过多的问题. 原文地址:https://www.cnblogs.com/ma214zq/p/1

c#和JS字符串format实现(可实现JSON对象,c#实体对象,C#匿名对象,替换)

首先看一下JS实现方法,此方法在网上找的,具体地址忘了,代码如下: String.prototype.format= function () { if (arguments.length == 0) return this; var param = arguments[0]; var s = this; if (typeof (param) == 'object') { for (var key in param) s = s.replace(new RegExp("\\{" + ke

原生对象、内置对象、宿主对象的区别

1.内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集:而后者包括了一些在运行过程中动态创建的对象. 2.引擎扩展对象是一个并不太大的集合,一般来说比较确定,它们也属于引擎的原生对象(但不属于ECMA规范的原生对象). 3.宿主对象不是引擎的原生对象,而是由宿主框架通过某种机制注册到JavaScript引擎中的对象. 4.一些宿主会把自己提供的对象/构造器也称为“原生对象”,例如Internet Explorer 7就把它

java 对象锁和类锁的区别(转)

java 对象锁和类锁的区别   转自 <http://zhh9106.iteye.com/blog/2151791> 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途