收好!小编精选JAVA面试常考题型!

本周,编女神又为大家精心挑选了几道面试经常会问到的题目哦~大家要认真学习理解,日积月累都会一点点成为专属自己的知识库哒!小编专线:15504268906

“ 

1. 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示。

package com.lovo;  

import java.util.Arrays;  

import java.util.EmptyStackException;  


public class MyStack {  

    private T[] elements;  

    private int size = 0;  


    private static final int INIT_CAPACITY = 16;  


    public MyStack() {  

        elements = (T[]) new Object[INIT_CAPACITY];  

    }  


    public void push(T elem) {  

        ensureCapacity();  

        elements[size++] = elem;  

    }  


    public T pop() {  

        if(size == 0)   

            throw new EmptyStackException();  

        return elements[--size];  

    }  


    private void ensureCapacity() {  

        if(elements.length == size) {  

            elements = Arrays.copyOf(elements, 2 * size + 1);  

        }  

    }  

}


上面的代码实现了一个栈(先进后出(FILO))结构,乍看之下似乎没有什么明显的问题,它甚至可以通过你编写的各种单元测试。然而其中的pop方法却存在内存泄露的问题,当我们用pop方法弹出栈中的对象时,该对象不会被当作垃圾回收,即使使用栈的程序不再引用这些对象,因为栈内部维护着对这些对象的过期引用(obsolete reference)。在支持垃圾回收的语言中,内存泄露是很隐蔽的,这种内存泄露其实就是无意识的对象保持。如果一个对象引用被无意识的保留起来了,那么垃圾回收器不会处理这个对象,也不会处理该对象引用的其他对象,即使这样的对象只有少数几个,也可能会导致很多的对象被排除在垃圾回收之外,从而对性能造成重大影响,极端情况下会引发Disk Paging(物理内存与硬盘的虚拟内存交换数据),甚至造成OutOfMemoryError。

“ 

2. 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

“ 

3. 静态变量和实例变量的区别?

答:静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。在Java开发中,上下文类和工具类中通常会有大量的静态成员。

“ 

4. 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,因此在调用静态方法时可能对象并没有被初始化。

今天的面试精选题你会了嘛~?

 • end • 

收好!小编精选JAVA面试常考题型!_第1张图片
小编专线:15504268906

小编专线:15504268906

你可能感兴趣的:(收好!小编精选JAVA面试常考题型!)