引用一个面试题:如果程序中没有任何变量引用一个外部类对象,但有变量引用其中的内部类对象,请问外部类对象是否会被垃圾回收器回收?请说明理由!
2014-05-26 23:32
615 查看
当内部类非静态的时候:
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();
Outer.Inner in = out.new Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
class Inner{
private String name = "xxx";
public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象没有被回收
当内部类静态的时候:
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();
Outer.Inner in = new Outer.Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
static class Inner{
private String name = "xxx";
public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象被回收了
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();
Outer.Inner in = out.new Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
class Inner{
private String name = "xxx";
public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象没有被回收
当内部类静态的时候:
class Test{
public static void main(String args[]) throws InterruptedException{
Outer out = new Outer();
Outer.Inner in = new Outer.Inner();
String str = in.getName();
out=null;
System.gc();
Thread.sleep(10000);
}
}
class Outer{
static class Inner{
private String name = "xxx";
public String getName(){
return name;
}
}
protected void finalize(){
System.out.println(this+"被回收了");
}
}
测试结果:外部类对象被回收了
相关文章推荐
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- vs2010 linq语法使用中如果用到外部定义的变量会报错 没有引用对象
- 疑问线程对象Thread启动之后,没有任何引用引用这个Thread对象,是否会被GC回收掉
- js如何判断一个对象{}是否为空对象,没有任何属性
- C++定义一个类,如果成员变量没有说明是共有还是私有那默认的是哪一个?
- 面试题6:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- 已知一指针p,你可以确定该指针是否指向一个有效的对象吗?如果可以,如何确定?如果不可以,请说明原因。
- .有两个CIDR地址块208.128/11和208.130.28/22。是否有那一个地址块包含了另一个地址?如果有,请指出,并说明理由。
- 【Java面试题】2 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析
- js如何判断一个对象{}是否为空对象,没有任何属性
- 一个注意事项:内部类引用的外部变量必须是final的
- js如何判断一个对象{}是否为空对象,没有任何属性
- 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。
- 匿名内部类使用了一个在其外部定义的对象,为什么编译器会要求其参数引用是final呢
- js如何判断一个对象{}是否为空对象,没有任何属性
- Delphi 中实现判断某个外部程序是否运行(如果运行则执行一个命令否则执行一个命令)
- 当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。
- js如何判断一个对象{}是否为空对象,没有任何属性
- NSMutableArray 如果只进行了声明,而没有进行初始化,那么程序不会报错,但是,声明的那个变量不起任何作用
- 一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法