「java引用实现」java 直接引用
今天给各位分享java引用实现的知识,其中也会对java 直接引用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java关于接口引用实现该接口类的对象
接口是抽象的,用来解耦最适合。而且可以发挥多态的优势。
给你举个例子
interface
A
{
void
run();
}
class
B
implements
A{
void
run()
{
System.out.println("我是B");
}
}
class
C
implements
A{
void
run()
{
System.out.println("我是C");
}
}
如果你这么写:
A
a
=
new
B();
a.run();//这里打印出“我是B”,如果前面new的是C这里就打印出“我是C”。
所以这个类就和B和C这2个类解耦,BC的改变都不会影响到你当前这个类。
Java中的几种引用方式
Java中有几种不同的引用方式,它们分别是:强引用、软引用、弱引用和虚引用。下面,我们首先详细地了解下这几种引用方式的意义。 强引用在此之前我们介绍的内容中所使用的引用都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 软引用(SoftReference)SoftReference 类的一个典型用途就是用于内存敏感的高速缓存。SoftReference 的原理是:在保持对对象的引用时保证在 JVM 报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取决于垃圾收集器的算法 以及垃圾收集器运行时可用的内存数量。 弱引用(WeakReference)WeakReference 类的一个典型用途就是规范化映射(canonicalized mapping)。另外,对于那些生存期相对较长而且重新创建的开销也不高的对象来说,弱引用也比较有用。关键之处在于,垃圾收集器运行时如果碰到了弱可及对象,将释放 WeakReference 引用的对象。然而,请注意,垃圾收集器可能要运行多次才能找到并释放弱可及对象。 虚引用(PhantomReference)PhantomReference 类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行 pre-mortem 清除操作。PhantomReference 必须与 ReferenceQueue 类一起使用。需要 ReferenceQueue 是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时,PhantomReference 对象就被放在它的 ReferenceQueue 上。将 PhantomReference 对象放在 ReferenceQueue 上也就是一个通知,表明 PhantomReference 对象引用的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。Reference与ReferenceQueue的配合使用。 GC、Reference与ReferenceQueue的交互 A、 GC无法删除存在强引用的对象的内存。 B、 GC发现一个只有软引用的对象内存,那么:① SoftReference对象的referent 域被设置为null,从而使该对象不再引用heap对象。② SoftReference引用过的heap对象被声明为finalizable。③ 当heap 对象的 finalize() 方法被运行而且该对象占用的内存被释放,SoftReference 对象就被添加到它的 ReferenceQueue(如果后者存在的话)。 C、 GC发现一个只有弱引用的对象内存,那么:① WeakReference对象的referent域被设置为null,从而使该对象不再引用heap对象。② WeakReference引用过的heap对象被声明为finalizable。③ 当heap对象的finalize()方法被运行而且该对象占用的内存被释放时,WeakReference对象就被添加到它的ReferenceQueue(如果后者存在的话)。 D、 GC发现一个只有虚引用的对象内存,那么:① PhantomReference引用过的heap对象被声明为finalizable。② PhantomReference在堆对象被释放之前就被添加到它的ReferenceQueue。 值得注意的地方有以下几点:1、GC在一般情况下不会发现软引用的内存对象,只有在内存明显不足的时候才会发现并释放软引用对象的内存。 2、GC对弱引用的发现和释放也不是立即的,有时需要重复几次GC,才会发现并释放弱引用的内存对象。 3、软引用和弱引用在添加到ReferenceQueue的时候,其指向真实内存的引用已经被置为空了,相关的内存也已经被释放掉了。而虚引用在添加到ReferenceQueue的时候,内存还没有释放,仍然可以对其进行访问。
java怎么实现传递引用
import java.util.*;
import java.text.*;
import java.lang.reflect.*;
public class test
{
public static void main(String[] args) throws Exception
{
String abc = "yourname";
System.out.println(abc);
upper(abc);
System.out.println(abc);
Integer i = 3;
change(i);
System.out.println(i);
}
//当然如果对象作为参数要改变他内部状态的话,该对象必须是mutable的,如果是String那么是无法被改变的
//Integer同样是immutable的,不过可以通过反射来改变immutable的状态
public static void change(Integer x) throws Exception
{
f = abc.getClass().getDeclaredField("value");
f.setAccessible(true); //需要改变内部状态成mutable.
f.setInt(x,x+1);
}
public static void upper(String str) throws Exception
{
Field f = str.getClass().getDeclaredField("value");
f.setAccessible(true); //需要改变内部状态成mutable.
char[] ch = (char[])f.get(str);
for(int i=0;i ch.length;i++)
if(ch[i]='a' ch[i] ='z')
ch[i] = (char)(ch[i] + ('A'-'a'));
}
}
在Java中要引用对象的属性和方法,需要怎么实现?
属性:第一种就是自己定义一个public的公共属性,然后调用就行了(不安全),第二种就是创建一个private的私有的属性,生成公共的set和get方法(封装),然后调用;
方法:同类中方法为静态方法可以直接调用,不为静态方法需要new和不同类中要new出对象,然后调用其方法;
左上角有我头像,有很多朋友在一起相互交流学习。
关于java引用实现和java 直接引用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-05,除非注明,否则均为
原创文章,转载请注明出处。