java对象引用
Ⅰ java有几种对象引用
1.强引用(StrongReference)
强引用是java中最常见的一种引用方式,当一个程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用变量操作实际的对象.当一个对象被一个或一个以上的引用变量所引用时,它处于可达状态,不可能被系统垃圾回收机制回收。
2.软引用(SoftReference)
软引用需要通过SoftReference类来实现,当一个对象只有软引用时,它有可能被垃圾回收机制回收。对于只有软引用的对象而言,当系统内存空间足够时,它不会被系统回收,程序也可使用该对象;当系统内存空间不足时,系统可能会回收它。软引用通常用于对内存比较敏感的程序中。
3.弱引用(WeakReference)
弱引用通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低。对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。当然,并不是说当一个对象只有弱引用时,它就会立即被回收——正如那些失去引用的对象一样,必须等到系统垃圾回收机制运行时才会被回收。
4.虚引用(PhantomReference)
虚引用通过PhantomReference类实现,虚引用完全类似于没有引用。虚引用对对象本身没有太大影响,对象甚至感觉不到虚引用的存在。如果一个对象只有一个虚引用时,那么它和没有引用的效果大致相同。虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和引用队列联合使用
Ⅱ java中对象和对象引用的区别
1.何谓对象?
在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话:
“按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词。”
从这一句话就可以理解到对象的本质,简而言之,它就是类的实例,比如所有的人统称为“人类”,这里的“人类”就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是“人类”的实例。
2.何谓对象引用?
我们先看一段话:
“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”
这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同的概念。举个例子,我们通常会用下面这一行代码来创建一个对象:
Person person = new Person("张三");
有人会说,这里的person是一个对象,是Person类的一个实例。
也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。
到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码:
Person person;
person = new Person("张三");
这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用,是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");
Ⅲ java 中 什么是引用对象
Java中基础类型(如int、long、short、double、byte、char、float)是传值,其他类型或自定义类型都是传引用。
举个例:
public class A {
private int a;
public void setA(int a) {
this.a = a;
}
public static void main(String[] args) {
A obj = new A();
modifyA(obj);//这里obj就是引用对象,方法modifyA对obj的修改不会影响obj对象所在内存地址。
}
public void modifyA(A a) {
a.setA(10);
}
}
Ⅳ java 中怎么获得对象引用的名称
在使用python时,和你有类似的想法。我用for循环遍历了实例对象名称列表,for语句中,加入instanceName = item。在类中,直接调用instanceName即可。
Ⅳ java中的当前对象的引用是指什么呢
就是 你声明出的Student对象,你声明的时候会给他姓名和年龄属性吧。。this 关键字,就是你取得你声明对象的。具体东西。例如this.name; 取得name值 就是这样。望采纳
Ⅵ 分析java对象的几种引用(reference)
java对象的引用reference分为有强引用,软引用,弱引用,虚引用这几种形式。1、Soft Reference(软引用) 指到的对象,即使没有任何Direct Reference,也不会清除,一直到jvm内存不足且没有Direct Reference时候才会清除。 应用场景:常用来设计缓存,不但可以将对象缓存起来,也不会容易造成内存不足。2、Weak Reference(弱引用) GC一旦发现了弱引用关系进行就开始收集对象。 应用场景:想查看某些对象信息,又不想影响GC对其的收集工作。 与GC的交互: 1.将referent置为null引用; 2.将堆中的目标对象设置为finalizable(可结束的); 3.先执行finalize(),释放内存,软引用添加到RefernceQueue中。 ReferenceQueue在 soft renference和 weak reference中可以为null,但虚应用中必须有!3、PhantomReference(虚引用) 与GC的交互: 1.不将referent置为null引用;而是将堆中的目标对象设置为finalizable(可结束的); 2.先软引用添加到RefernceQueue中。然后收集对象,释放内存 附注:ReferenceQueue在 soft renference和 weak reference中可以为null,但虚引用中必须有!4、抽象类Reference分析 java.lang.ref包中有四个类,他们的关系是PhantomReference,WeakReference,SoftReference继承了抽象类Reference。Reference类中,有thread子类(ReferenceHandler),并在静态区域中开启,对pending字段进行实时的监控。 pending是由jvm来赋值的,当Reference内部的referent对象的可达状态改变时,jvm会将Reference对象放入pending链表。 一旦relevent= null,垃圾收集时会标记WeakReference的referent为不可达get()返回null,并且通过赋值给pending ,触发ReferenceHandler线程处理pending。 ReferenceHandler线程要做的是将pending对象enqueue,但默认我们所提供的queue,也就是从构造函数传入的是null,实际是使用了ReferenceQueue.NULL,Handler线程判断queue为ReferenceQueue.NULL则不进行操作,只有非ReferenceQueue.NULL 的queue才会将Reference进行enqueue。 希望通过以上内容的介绍,能够给你带来帮助。
Ⅶ 什么是对象引用JAVA
你这方面的问题太多了,加295663995.
对象引用也就是说
指向对象那堆空间的首地址的指针。
Person
p
=
new
Person();
new
Person();创建了一个Person对象,这个对象赋值给了p
p获取的不是Person对象,而是Person对象的首地址。
p就是
new
Person();对象的引用。
Ⅷ 关于java里返回对象的引用
accountId的数据类型不是Account
Ⅸ 关于java中对象引用的理解
通过a来改变A[1]的值,应该是A[1]=a;
然后数组的下标是从0开始的,如果你的需要是往第一个位置添加内容的话,那应该写成A[0]=a;
你的代码的意思是:
int a; 定义了一个int整数类型的变量,名字是a.
a = A[1]; 把数组A下标为1的数值赋值给a,因为你只定义了数组,没有加内容,所以默认为0,此时a=0;
a=123,又把123这个数值赋值给a,此时a=123;
全部过程没有对数组进行操作,所以打印出的内容是0;
建议你看看赋值语句相关的资料。至于你后面的问题,不是很明确。如果有需要,把具体的问题代码放出来。
Ⅹ JAVA:”对象的引用“是什么意思
JAVA:”对象的引用“意思是定义一个变量,这个变量指向的是一个对象,所以叫对象的引用。
Objectobj=newObject();
//obj:对象的引用
//newObject():对象
//Object:类