「java对象和对象引用」对象与对象引用

博主:adminadmin 2023-01-05 18:18:09 1072

本篇文章给大家谈谈java对象和对象引用,以及对象与对象引用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中对象和对象的引用是怎样不能在于内存中的?

比如 int a=3;

a作为3的引用,存在于栈中,而3也存在栈中。对于java基本数据类型,对象和引用都会被保存在栈里面。

再举个例子String str=new String(“abc”);众所周知,一共创建了两个对象,str作为引用,保存在栈里面。new String(“abc”),可以看做是 “abc” 和new String(); new String()创建了一个对象,保存在堆中。“abc”创建了一个对象,保存在字符串常量池中。

你可以看看这张图,关于String类的内存分配是很有趣的,而且需要记住的是String类是final修饰的。 final修饰的方法不能被重写,final修饰的类不能被继承。

如果哪里说错了各位可以指出来一起交流,谢谢!

java中,类的对象,对象的实例,对象的引用,三者如何进行区分,有何区别呢?

没有“对象的实例”这种叫法,正确的叫法是“类的实例”。

没有学过java, 给你说说我的理解吧!

在java和C++这类语言中,对象(对象和实例是同义词)实际上就是内存中的存储数据一块固定存储空间,并且对象还有一系列的操作这块存储空间的方法。

对象的引用相当于对象的名字,名字与对象本身的区别就好比你的名字和你本人的区别。java里使用对象只能通过引用的方式,基本数据类型的变量和C\C++的变量规则一样。

如:

UserType ut = new UserType();  // ut是引用,实际的对象在内存里。

ut = new UserType(); /*现在ut是另一个对象的引用,先前的对象被垃圾回收了(因为先前的对象不能被再次使用了)。*/

UserType ut2;  // 定义了一个引用ut2,他不引用任何对象,不能使用。。。。

ut2 = new UserType(); // 然ut2成为一个对象的引用。

UserType ut3 = new UserType();

UserType ut4 = new UserType();

ut3 = ut4;   // 现在ut3引用ut4的对象,这里不是赋值。。。

int a = 5;

int b = 4;

a = b;  // 这里是赋值。 a b 依然引用不同的对象

类型转换就是把一种类型的对象当做另一种类型的对象来使用。一些类型转换会自动发生,另一些需要强制类型转换,强制一般都会出问题,自动的也需要注意。

以上纯属个人理解,楼主慎读之。。。。

Java中什么是对象什么是引用还有枚举,求大佬解决最好用表达式。

如果你是初学者,我用最好理解的方式跟你说.

对象:就是一个名词而已,没啥特别的,学过C语言么?学过C语言的话,结构体,就是对象.

如果没学过C,我再找一个方式给你说.不过要说对象,得先说类.

在JAVA中,有一种数据结构,

Class student{

    String name;

    void showname(){

        System.Out.print(this.name)

    }

}

这就是这种数据结构,JDK也会提供很多,系统给你写好的,这个是我程序员自己写的学生类,我们定义了一种学生类,我觉得学生应该有名字属性,还应该有一个让别人知道他名字的能力,所以,他有了名字,有了说出名字的能力,都是我写的,你觉得学生还应该有性别,你就加进去,别赋值.因为学生应该有性别,但不该固定死,你说学生就该是男的么?或者就该是女的?不可能,所以你可以说学生有性别这个属性,但是他到底是什么,我不知道,所以你定义类,不能赋值.

那这是我觉得学生类,所有学生都该这样.

而类跟个体有什么区别呢?这就像你和人类的关系,类有大的方向性的东西,只有个体有具体的特色.

那么个体怎么展现他的特性呢?

还拿这个Student类来说,这个类是大方向,代表所有学生都有名字和说出名字的能力,但具体个体,比如你叫张伟,

那么

Student zhangwei=new Student("zhangwei");

就是通过new关键字,从学生类,创建出来一个真真实实的叫张伟的个体.

那么这个张伟就是对象,所有由new关键字,从类中创建的个体就叫对象.

现在明白什么叫对象了么?

下面说引用,如果你是一个初学者,我希望你只听我说的第一部分.

int number=123;

这就是一个引用,你这条代码,执行后,会在存储空间开辟一个小单元,里面放着123这个实际数据.

那么你想使用这个数据,怎么办呢?你不知道这个小单元的位置啊,怎么用呢?Java和所有编程语言都如此,会给你提供一种方案,那就是,给这个单元起个名字,这个单元就叫number,以后你代码中再写number,我知道去哪个小单元找数据.

而这个number就是在123这个数据单元的引用.或者number引用123这个单元,说起来,中文有点绕,你怎么说好像都对,反正你明白这个意思就行.就是一个东西等价另一个东西,这就是一个队另一个的引用.

这是第一部分,如果你是初学者,听到这里就可以了,如果你是想钻研深度的,下面的继续,

Java中有四种引用,分别为强引用,软引用,弱引用,虚引用.我再强调一遍啊,如果你是新手,别看这部分.容易让你乱.

强引用::::::说起来也容易理解,强引用,就是我刚才写的int number=123这个代码,这就是强引用,我写了这代码,虚拟机运行时,发现,卧槽,内存不够了啊,这可怎么办?要不,我偷偷的,不给你分配内存存储123?也不告诉你?不行!!!虚拟机如果发现内存不够了,就会停止运行,告诉你报错了,内存不够.因为你写的这个代码叫强引用型,特点就是必须要引用成功.

软引用::::那么这是什么,这也是一种引用类型,目的就是,告诉虚拟机,啊,你运行吧,我要创建int number=123,但是,我允许你在出现内存不足时,释放123这个空间,不用担心我不让,我同意了,你可以在内存不足时删掉我.

这就是软引用,那具体怎么实现呢?

int number=123;

SoftReference ruanyinyong=new SoftReference(number);

number=null;

ruanyinyong=get();

这段代码就是在创建一个软引用,首先第一行肯定是一个硬引用,就是,无论你内存够不够,你必须给我创建数据.

第二行通过系统提供的创建软引用的类,来为你创建一个软引用,就是将number等价的存到ruanyinyong这个变量中.

第三行,释放number这个硬引用为弱引用(后面说),就是告诉系统,number现在不是硬引用了,你可以删除我了.但是,不幸的是,number在第二行已经重新扔给了ruanyinyong.

现在ruanyingyong就出现了.懂么?

弱引用:::::下面是弱引用,弱引用在刚才说了一嘴,什么是弱引用呢?弱引用就是比软引用还低级的引用方式,软引用是内存不足,才会删除,弱引用是内存不管你足不足,我虚拟机垃圾回收器只要在周期性扫描垃圾的时候发现你小子了,你就给我玩蛋去.

怎么达成弱引用呢?那就是使用number=null这种方式,来释放内存,其实这就是弱引用了,你必须通过=null的方式来告诉虚拟机,这个数据没用了.但是注意,虚拟机的垃圾回收期是周期性扫描的,也就是说,你虽然写了=null,但是他不一定立刻删除,需要扫描到你的时候,才会删除.但是,你还要注意一点,那就是,虽然还没删除,但是引用已经断开了,人家没删除指的是具体数据单元的数据123没删除,而不是说你这个引用number没删除,其实即使你的123没删除,但是number的引用的那根线已经切断了,你也无法通过number去引用了.

虚引用::::唉呀妈呀,你这也没个悬赏,我可是一个字一个字给你手写的,就看你爱学,喜欢认真研究的人,才给你写的,你要不好好看,多对不起啊.

虚引用我不是很清楚,这个你自己百度下吧,我也查过了,不是很看的懂,所以没法用自己的语言给你解释了.

最后最后最后,你的枚举是吧.

枚举,我还真把JAVA源代码给反编译成汇编看过,枚举其实就是一个Class类,特殊的类.

你反编译,看代码,发现它也是类,可是为啥特殊呢?

这个没法有通俗易懂的语言,我也没法按你是新手或者老手不同解释,这就一个解释,不懂,你就去看明白啥是类就行了.

我给你描述一个类:

构造器是私有化的,类中的属性只有get方法,没有set 方法,而且所有属性都是静态的最终的,这样子的类,就是枚举类型.

为啥呢?因为枚举嘛,本意就是不想让你再创建新的对象,只让你使用他枚举列表里提供的常量,那么私有化构造器,你就无法使用new调用构造器去创建新对象了.而保证成员属性不可变,那就是不提供set方法,只有get方法.而属性是最终的finall类型的,也进一步禁止你修改属性.

所以你只能用他提供的,不能自己去构造,修改任何数据.这就是枚举.

这个类其实就是枚举了.但是这个我们写出来的模仿出来的枚举,跟真正的枚举类是差不多的,只差一点,我们写的这个,可以通过反射的形式,创建对象,而我们当初设计枚举时,可一定一定一定不允许用户创建新的或者修改数据啊,你只能用,不能创建啊!那怎么办?没事,你自己模仿的枚举不行,我系统提供一个,枚举类,连反射都无法创建对象,看你怎么办?所以我们写的,跟系统提供的区别仅在于,我们的通过常规手段创建不了,但是反射能创建,而系统提供的,反射都无法创建对象.

那么你会发现,卧槽,这个特性很符合我们26中设计模式中的"单例模式"的需求啊,设计单利模式不也是需要私有化构造器,然后提供一个不可变的,静态的对象么?这个算是扩展,你了解单例模式,再说,其实现实中就有很多人用枚举来完成单例模式,代码更优雅,更安全,更美观,我就这么干....

java中,"对象引用"和"对象"问题

a只是保存了引用,也就是对象的地址,真正的对象就是new出来的那个

所以a 可以指向new a 也可以指向new b, 运行时会根据地址获取真正的对象

Java中对象和对象引用的区别

对象在内存的一个屋子里存放(内存像很多屋子). 对象引用值,就是屋子的门牌号,通过这个门牌号可以找到这个屋子.(并不单纯是对象内存地址) 对象属性值,就...

java中对象实体与对象的引用有何不同?

对象引用的目的地才是对象的实体。

在java引用对象的赋值中,实际上是对引用的赋值;而对象实体不发生变换。

特别能够说明问题的是在引用型对象用final 关键字修饰的时候,表示引用的确定而不是对象实体的不可变。

final StringBuffer s = new StringBuffer();

s.append("abc");

这样是可以的,因为s引用指向确定的StringBuffer 对象,对象实体变化是可以的。

但是如果是String的话,就不可以显式的更改了。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

java对象和对象引用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于对象与对象引用、java对象和对象引用的信息别忘了在本站进行查找喔。