一道恶心的JAVA面试题

问下面程序输出结果:

 public class Test3{
 
 public static void main(String[] args){
        FlyMen f = new FlyMen();
    }
}


class Bird{
    static int wingsNumber = 2;
    static {
        System.out.println ("I am Bird");
    }
   
    public Bird(){
     System.out.println ("Bird constructor");
    }
    
}

class FlyMen extends Bird{
    static{
     System.out.println ("I am fly Men");
    }
   
    public FlyMen(){
     System.out.println ("fly constructor");
    }
}

运行结果:

I am Bird
I am fly Men
Bird constructor
fly constructor

主要考察的是static和游离块的用法,有些变态,如果将Bird类中游离块前的static去掉,则输出结果为:
I am fly Men
I am Bird
Bird constructor
fly constructor

当然,请问以下是一道最新的Java面试题: 题目:什么是Java中的“内存泄漏”(Memory Leak)?如何避免内存泄漏? 解析:内存泄漏指的是程序在动态分配内存后,无法再次回收利用,导致内存占用不断增加,最终耗尽可用内存。在Java中,内存泄漏通常是由于程序未正确释放不再使用的对象导致的。 常见导致内存泄漏的情况包括: 1. 长生命周期对象持有短生命周期对象的引用:如果一个长生命周期对象持有一个短生命周期对象的引用,并且没有及时释放,那么短生命周期对象将无法被垃圾回收,从而造成内存泄漏。 2. 静态集合持有对象的引用:如果一个对象被添加到静态集合中,而没有被正确移除,那么即使该对象已经不再使用,也无法被垃圾回收,从而造成内存泄漏。 3. 资源未关闭:如果程序使用了一些需要手动关闭的资源(如文件流、数据库连接等),但在使用完毕后未正确关闭,会导致资源无法释放,从而造成内存泄漏。 为避免内存泄漏,可以采取以下措施: 1. 及时释放不再使用的对象:在不再需要使用一个对象时,要及时将其引用置为null,以便垃圾回收器可以回收该对象的内存。 2. 关闭资源:对于需要手动关闭的资源,使用完毕后要确保调用相应的关闭方法,以释放资源占用的内存。 3. 避免过度使用静态集合:尽量避免将对象添加到静态集合中,并注意在适当的时候从集合中移除对象。 4. 使用内存分析工具进行检测:可以使用一些Java内存分析工具(如VisualVM、MAT等)来检测潜在的内存泄漏问题。 以上是关于内存泄漏的简要解析以及如何避免的建议。在面试中,你可以进一步扩展和深入讨论这个问题,并提供自己的实际经验和解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值