Java面试宝典总结(二)

1.传值与传引用

不管Java参数的类型是什么,一律传递参数的副本。对于基本类型,是传值的副本。对于一切对象型变量,是传引用的副本。

2.修饰符
    public:任何类都可以访问
    protected:在同一个包中的所有类可以访问,以及该类的子类
    default:同一个包中的所有类
    private:只能在本类中访问

3.循环与条件

public class Test{
  public static void main(String[] args){
    for(int i=0;i<=10;i++){
      Integer k = new Integer(i);
      System.out.println("Hello world");
   }
}

从上面的代码中,可以看到for循环下的语句没有用{}。局部变量的声明是在一个块内,也可以理解为在{}内。for循环可以不使用{}的,但仅限于执行语句(其中并不包括变量声明语句),由于这段代码中Integer的作用范围在整个main中,这样就造成了变量重复定义的错误,所以在编译的时候会出错。若要改正,只需要加上一对花括号即可,让变量声明在块内就可以。

4.垃圾收集机制

4.1Java使用被成文垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存。Java使用一系列软指针来跟踪对象的各个引用,并用一个对象表将这些软指针映射为对象的引用。在Java语言中,判断一块内存是否符合垃圾收集标准的标准有两个:(1)给对象赋予空值null,以后再没有使用过。(2)给对象赋予了新值,即重新分配了内存空间。

5.Java中的内存泄露

5.1 在Java中,内存泄露就是存在一些被分配的对象,这些对象有两个特点:(1)对象是可达的,即在有向图中,存在通路可以与其连接。(2)对象是无用的,即程序以后不会再使用这些对象。这些对象不会被GC回收,然而确占用内存。

5.2 内存泄露主要是由什么引起的?都有什么样的情况?

忘记“释放”先前分配的内存,就可能造成内存泄露。如果程序保留对永远不再使用的对象的引用,这些对象将会占用并耗尽内存,这是因为自动化的垃圾收集器无法证明这些对象不再使用。如果存在一个队对象的引用,对象就被定义为活动的,因此不能删除。为了确保能回收对象占用的内存,编程人员必须确保该对象不能到达。通常是将对象字段设置为Null或者从集合中移除对象。当局部变量不再使用时,没有必要将其显示地设置为null,对这些变量的引用会随着方法的退出而自动清除。

保留下来却永远不再使用的对象引用。

典型的内存泄露:

(1)全局集合

(2)缓存

(3)ClassLoader

6.Java中的clone方法

Object类中有clone方法,但是Object又没有实现Cloneable接口。Object类的clone是protected的,不能直接调用,可以被子类调用。Object类的clone会知道对象大小,为它分配足够的内存空间,并将旧对象的内容复制到新的对象中。但是Object.clone()执行前必须先检查class是否实现了Cloneable接口。Cloneable接口是一个标记接口,没有任何内容。clone方法默认是浅拷贝,要想实现深拷贝,就需要重写clone()方法。(图片引用http://blog.csdn.net/u011514810/article/details/52345113)

Java面试宝典总结(二)_第1张图片


你可能感兴趣的:(面试宝典)