Java基础面试题(二)

2014-11-24 01:25:29 · 作者: · 浏览: 1
ain(String[] args) { // TODO Auto-generated method stub //A a = new B(); Test1 t = new Test1(); t.i=9; t.test=new Test(); t.test.i=10; Test1 t1=new Test1(t); System.out.println(t1.i); System.out.println(t1.test.i); } } class Test{ public int i; public Test(){ } public Test(Test t){ i=t.i; } }


8、Java中public,protected,private,default的区别?

public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是“default”,也就是在成员前不加任何权限修饰符。
这四个修饰符的访问权限如下表:
-----------------------------------------------
类内部 package内 子类 package外
public 允许 允许 允许 允许
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
private 允许 不允许 不允许 不允许
-----------------------------------------------
Java的访问控制是停留在编译层的,也就是它不会再class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。
其实,通过反射的手段,是可以访问任何包下任何类中的成员的,例如,访问类的私有成员也是可能的。

9、Java中接口的方法只能是public abstract类型的,可以省略,变量只能是final static类型的,可以省略。

10、Java中equal和==的区别是什么?

首先看一段代码:
public class Test1{

    public static void main(String args[]){
            String a="1234";
            String b="1234";
            String c = new String("1234");
            System.out.println(a==b);
            System.out.println(a==c);
            System.out.println(a.equals(c));
    }

}


结果:
true
false
true
首先应该先了解java中String new和直接赋值的区别。
第二个为false的原因在于a和c指向的是不同的对象。==运用在基本数据类型的时候,通过比较他们的实际的值来判定是否相等,而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。通过new来创建的字符串单独生成一个对象,所以a和c指向的不是同一个对象。

equal()方法是java.lang.object的方法,也就是所有的Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等。对于字符串String类来说,他的equal方法用来比较字符串的字符序列是否 完全相等。

11、Java中char的取值范围?

Java中char采用Unicode编码格式,用两个字节来表示一个字符,一共16bit,它所能表示的最大值为2的16次方

12、Java中char能否存储汉字?

char是可以存储汉字的,每个中文字符都有对应的Unicode编码。

13、Java中Overload(重载)和Override(覆盖)的区别

重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型,不关心返回值类型。
覆盖,是指在子类中对父类的某方法进行重新定义,其子类的该方法名以及参数位置和个数以及返回值均与父类相同,从而在调用子类的该方法时,不会执行父类的方法。如果在父类中以final定义的方法,在子类中无法重写。

14、以下代码的输出是什么?

public class Test1 {

	public Test1() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new B();
		System.out.println("----------------");
		B b = new B();
	}
}
class A{
	static{
		System.out.println("AAAAAAAAAAAAAA static");
	}


	public A() {
		
		//super();
		System.out.println("AAAAAAAAAAAAAA");
		// TODO Auto-generated constructor stub
	}
	
}

class B extends A{
	static{
		System.out.println("BBBBBBBBBBBBBBB static");
	}
	public B() {
		
		//super();
		System.out.println("BBBBBBBBBBBBBB");
	}
}


结果:
AAAAAAAAAAAAAA static
BBBBBBBBBBBBBBB static
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
----------------
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法

15、Java中的几种引用方式:强引用、软引用、弱引用、虚引用的区别?

在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。
但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这种物品现在已经无用了,保留它会占空间,但是立刻扔掉它也不划算,因 为也许将来还会派用场。对于这样的可有可无的物品,一种折衷的处理办法是:如果家里空间足够,就先把它保留在家里,如果家里空间不够,即使把家里所有的垃 圾清除,还是无法容纳那些必不可少的生活用品,那么再扔掉这些可有可无的物品。
从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
1) 强引用
平时我们 编程的时候例如:Object object=new Object();那object就是一个强引用了。如果一个对象具有强引用,那就类似于必不可少的生活用品,