java面试知识点汇总2

来源:互联网 发布:产品网络推广方案 编辑:程序博客网 时间:2024/06/05 00:55

成员变量和方法是静态和非静态的统称,成员分为静态成员和非静态的成员。
----------------------------------------------------------------------
在静态方法中不能使用this和super关键字。
子类的继承性:
1.子类和父类在同一包中:除private外都可以继承
2.子类和父类不在同一包中:除了private和友好的(不写)的之外,都可以继承
变量和方法的调用:
1.private:只在当前类中可以用对象调用
2.友好的:同一个包下的其他类可以访问,但包外就不可以。
3.protect:在同包下的类中访问有效。 
4.public:在任何类中都可以使用对象调用,没有是否在同一包下的限制
----------------------------------------------------------------------

int和Integer的区别:
内存区别:基本数据类型直接分配内存,包装类必须在堆中创建对象
使用区别:基本数据类型的默认初始化值为0,包装类的默认初始化值为null。

有关Integet类和int类的面试题:
面试题1------------------------------------------------------------------
1.Integer类中提供了比较两个int类型值的大小的方法,该方法为compareTo方法,
该方法返回的结果为:第一个数如果大于第二个数返回-1,相等返回0,
第一个数小于第二个数返回1.
同样Byte类中也提供了比较两个数大小的方法,也为compareTo方法,
该方法的返回结果为:如果两个数相等那么返回0,
否则返回第一个数减去第二个数的值。
如:Byte a = new Byte("15");
    Byte b = new Byte("12");
    int result = a.compareTo(b); 
得到的result的值为3 = 15-12。

面试题2------------------------------------------------------------------
已知:
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
那么:
i1 == i2 的结果为true
i3 == i4 的结果为false
原因:Integer i1 = 127;执行时系统进行了自动装箱操作,
即在底层自动调用了Integer.valueOf(127);方法,查看源码我们得出以下结论:
在使用Integer类的valueOf(num);方法进行自动装箱时,
如果num不在[-128,128)范围之内,那么会生成新对象,即返回new Integer(num);
所以i3==i4的值为false。
Integer.valueOf方法在调用时,内部有一个缓存池cache,缓存池存储了[-128,128)
范围内的Integer对象,当num在这个范围之内时,不是创建新的Integer对象,而是
返回缓存池内的对象,因为两者值相等,所以返回缓存池中的同一个对象,
即指向缓存池中的同一个位置,故i1==i2的值为true。
----------------------------------------------------------------------
Integer底层设计时为什么使用[-128,128)缓存池?
原因:[-128,128)都是一些比较常用的数据,通过缓存池可以提高效率。
发现:范围刚好为byte类型的取值范围:-128~127。

0 0