java引用被设置为null的疑惑

a=null;
 1 public class C {
 2
 3     protected A webDigester = new A(" first one ");
 4
 5     public void test(){
 6
 7         A a;
 8
 9         a=webDigester;
10
11         a.add(" second ");
12
13         a=null;
14
15         webDigester.display();
16         //猜猜会打印出什么呢?
17     }
18     public static void main(String[] args) {
19
20         C c=new C();
21
22         c.test();
23     }
24
25 }
 1 import java.util.ArrayList;
 2
 3
 4 public class A {
 5
 6         public ArrayList<Object> al=new ArrayList<Object>();
 7
 8         public void display()
 9         {
10             System.out.println("-----start-------");
11             for(Object o:al)
12             {
13                 System.out.println(" ["+o.toString()+"] ");
14             }
15             System.out.println("-----end-------");
16         }
17
18         public A(String msg){
19             al.add(msg);
20         }
21
22         public void add(String msg){
23             al.add(msg);
24         }
25
26         public void  distory()
27         {
28             al.clear();
29         }
30
31 }
时间: 2024-10-09 19:33:39

java引用被设置为null的疑惑的相关文章

关于Java引用,你必须知道这些

引用 Java 虚拟机接管了所有的内存分配与回收工作,极大地减少了程序员的工作量和错误率.GC 在回收内存时,通常采用被称为可达性分析的算法判断一个对象是否可以回收.而在可达性分析中,对象的引用有着决定性的作用.在下图中,GC 从 GC Roots 开始顺着引用链往下寻找对象,发现当前有引用的对象为object 1.object 2.object 3.object 4,而object 5.object 6.object 7虽然互相之间有引用但已经无法从外部引用到.因此,图中 object 1-4

java ThreadLocal线程设置私有变量底层源码分析

前面也听说了ThreadLocal来实现高并发,以前都是用锁来实现,看了挺多资料的,发现其实还是区别挺大的(感觉严格来说ThreadLocal并不算高并发的解决方案),现在总结一下吧. 高并发中会出现的问题就是线程安全问题,可以说是多个线程对共享资源访问如何处理的问题,处理不当会的话,会出现结果和预期会完全不同. 一般情况下,多个线程访问一个变量都是公用他们的值,不过有时候虽然也是访问共享变量,不过每个线程却需要自己的私有变量.这个时候ThreadLocal就有用武之地了.下面是个ThreadL

Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference

http://www.cnblogs.com/skywang12345/p/3154474.html 1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:    强引用  >  软引用  >  弱引用  >  虚引用 ⑴强引用(StrongReference)    强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回

4种Java引用浅解

近期研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型,原因有两个: 理解Java Cache实现.学习Java引用与Java垃圾回收机制的关系 内存资源是有限的,须要合理的利用.Cache不是只HashMap那么简单,Java引用与Java垃圾回收机制也有很紧密的关系. 避免对Java引用的错误使用 某个同事把5000+交易数据放到一个HashMap

在Java代码上设置TextView字体大小

部分源码: /** * Set the default text size to a given unit and value. See {@link * TypedValue} for the possible dimension units. * * @param unit The desired dimension unit. * @param size The desired size in the given units. * * @attr ref android.R.styleab

java窗口按钮设置五个方向

java窗口按钮设置五个方向 代码如下: package Day08; import java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame; @SuppressWarnings("serial")public class ShowBorderLayout extends JFrame{ public ShowBorderLayout() { // 设置BorderLayout的水平间距为5,

【安卓】在java代码中设置drawableLeft时如何给定合适尺寸?

textView.setCompoundDrawables(drawable, null, null, null);时看不到图片,是因为需要手动给定drawable对应的尺寸,即用drawable.setBounds. 如果该drawable为图片,可直接drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());. 即直接给定图片自身尺寸,此时效果和在xml中给定一样. [安卓]在java

Java Swing 之设置窗体背景图片

/** * 设置窗体背景图片 * @author gao */ package com.gao; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class BackgroundDemo extends JFrame{ private Image image; pri

JAVA中BufferedReader设置编码的必要性

实验环境 Myeclipse 默认编码 UTF-8 先看两种读文件的方式: 方式一: InputStreamReader fReader = new InputStreamReader(new FileInputStream(filePathString),"UTF-8"); BufferedReader reader = new BufferedReader(fReader); String line; while ((line = reader.readLine()) != nul