zoukankan      html  css  js  c++  java
  • java android面试题分析总结

    本文参考多处,一并感谢!

    http://www.blogjava.net/fanyingjie/archive/2007/06/27/126467.aspx

    http://baike.baidu.com/view/1788559.htm

    http://honda418.iteye.com/blog/315893

    http://jeff-tang.blog.163.com/blog/static/141686909201022010522906/

    1.short转换相关的

    其一,

    package com.jue.test;
    
    public class TestMain {
        public static void main(String args[]){
            short s1 = 1;
            s1 = s1 + 1;
        }
    
    }

    编译结果

    DescriptionResourcePathLocationType
    Type mismatch: cannot convert from int to short TestMain.java/TestShort/src/com/jue/testline 6Java Problem

    分析:

    s1+1会自动转换成int类型,导致s1= s1+1;损失精度。

     其二,

    package com.jue.test;
    
    public class TestMain {
    	public static void main(String args[]){
    		short s2 = 2;
    		s2 += 2;
    	}
    }

    编译结果:成功

    分析:

    反编译之后

    package com.jue.test;
    
    public class TestMain
    {
      public static void main(String[] args)
      {
        short s2 = 2;
        s2 = (short)(s2 + 2);
      }
    }

    故猜测:这可能是java编译器的语法糖。

    2.RuntimeException与普通异常,error的区别。

    Checked Exception:在编译时就能够被Java编译器所检测到的。

    UncheckedException:则是编译时,java编译器不能检查到。

      RuntimeException 普通Exception Error
    受控异常
    产生原因 开发者的编程错误 由于外界环境所限,
    本身潜在的一些问题
    Java运行时的系统错误,资源耗尽,是一种严重的,
    程序无法修复的问题
    例子 NullPointerException
    ArrayOutOfIndexException
    ClassCastException
    ArithmeticException
    UnsupportedOperationException
    ClassNotFoundException
    IOException
    FileNotFoundException
    VirtualMachineError
    StackOverflowError
    OutOfMemoryError

    3.finally的一个面试题

    package com.jue.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TestMain {
    
    	public static void main(String[] args) {
    		test();
    	}
    
    	private static void test() {
    		List list = new ArrayList();
    		try {
    			System.out.println("return!!");
    			return;
    		} catch (Exception e) {
    			System.out.println("catch Exception !!");
    		} finally {
    			System.out.println("finally!!");
    		}
    	}
    
    }


    结果:

    return!!
    finally!!

    分析:即便在try中return;finally总会被执行的意义不变,仍然会执行。


    4.final,finalize,finally的区别

    final:关键字,表不变

    修饰:

    • 方法:方法不可Override
    • 类:不可被继承
    • 基本类型量:常量,值不可变
    • 符合类型量:引用不可变,即引用的值不可变
    final Object o1 = new Object();
    o1 = new Object();

    finally:关键字,Java异常处理机制的一部分,在异常发生时,用来提供一个必要的清理的机会。

    finalize:Object类的方法(参考自百度百科

    意义:Java技术允许使用finalize()方法在垃圾回收器将对象回收之前,做一些必要的清理操作。

    调用前提:这个对象确定没有被引用到。

    工作原理:

    • 垃圾收集器准备好释放对象占用的空间。
    • 首先调用其finalize方法。
    • 下一次垃圾收集过程中,真正回收内存。

    不确定性:

    • finalize的执行时间是不缺定的。
    • 一个对象引用另一个对象,并不能保证finalize的方法按照特定的执行顺序。

    5.Override,Overload

      Override Overload
    签名+返回值 相同 方法名相同,签名不同
    关系 父子类继承关系 通常是同一类层次中
    识别 运行时多态
    根据具体的对象,
    查询对象的虚方法表,确定调用关系
    编译时多态
    由对象的外观类型(即声明类型)决定
    修饰符限制 非private
    非static
    非final
    无特别
    异常关系 子类方法不能抛出被父类方法更多的异常 无特别
    可见性关系 子类不能比父类访问权限更窄
    (里氏替换原则决定)
    无特别

    6.Collection Collections

    Collection:接口,集合类的接口,一个契约,提供了集合基本的大小,添加,清除,遍历方法等。

    Collections:工具类,提供了很多静态方法,给集合提供一些查询,比较,排序,交换,线程安全化等方法。

    7.Integer 缓存

    package com.jue.test;
    
    public class TestMain {
    
    	public static void main(String[] args) {
    		Integer i1 = 1;
    		Integer i11 = 1;
    		System.out.println(i1 == i11);
    
    		Integer i2 = 200;
    		Integer i22 = 200;
    		System.out.println(i2 == i22);
    
    	}
    
    }
    

    结果 :

    true

    false

    分析:反编译结果为

    package com.jue.test;
    
    import java.io.PrintStream;
    
    public class TestMain
    {
      public static void main(String[] args)
      {
        Integer i1 = Integer.valueOf(1);
        Integer i11 = Integer.valueOf(1);
        System.out.println(i1 == i11);
    
        Integer i2 = Integer.valueOf(200);
        Integer i22 = Integer.valueOf(200);
        System.out.println(i2 == i22);
      }
    }

    可以看出,对于Integer i = 1;编译器做了额外的处理,即Integer.valueof();

    Integer source code

    public static Integer valueOf(int i) {
    	assert IntegerCache.high >= 127;
    	if (i >= IntegerCache.low && i <= IntegerCache.high)
    		return IntegerCache.cache[i + (-IntegerCache.low)];
    	return new Integer(i);
    }

    可以看出Integer对于一定 范围内的数字从Cache中取得,对于额外的,调用new创建。

    IntegerCache源码如下:

    private static class IntegerCache {
    	static final int low = -128;
    	static final int high;
    	static final Integer cache[];
    	static {
    		// high value may be configured by property
    		int h = 127;
    		String integerCacheHighPropValue = sun.misc.VM
    				.getSavedProperty("java.lang.Integer.IntegerCache.high");
    		if (integerCacheHighPropValue != null) {
    			int i = parseInt(integerCacheHighPropValue);
    			i = Math.max(i, 127);
    			// Maximum array size is Integer.MAX_VALUE
    			h = Math.min(i, Integer.MAX_VALUE - (-low));
    		}
    		high = h;
    		cache = new Integer[(high - low) + 1];
    		int j = low;
    		for (int k = 0; k < cache.length; k++)
    			cache[k] = new Integer(j++);
    	}
    
    	private IntegerCache() {
    	}
    }
    故可以知道Integer的大小,默认是从-128到127,对于这个范围内的数组做了缓存的处理。

    8.sleep方法和wait方法的区别

      wait sleep
    所属类 Object Thread
    意义 让线程挂起 让线程休眠指定的时间
    释放锁 否(这个跟锁本来就没有关系)
    恢复  1.有参:wait指定时间
    2.无参:等待其他线程notify
    1.根据参数长度自动恢复。
    2.异常打断
    使用限制 wait,notify必须持有当前对象锁的情况下调用 无特别
    抛出异常
    静态方法




  • 相关阅读:
    HTML
    汉企,新的起点
    表格标签
    常用标签
    HTML
    我的未来规划
    世界首富如何炼成? 看盖茨20条箴言
    获取Java项目根目录 N多方法(转载)
    进程间通信——管道
    necessitas
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3149516.html
Copyright © 2011-2022 走看看