JAVA程序员面试常问的东东之一

[size=medium]1、super与this的区别?

super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字。
this出现在类的实例方法中,代表使用该方法的当前对象。也可以出现在类的构造方法中,代表使用该构造方法所创建的对象。
this()代表当前类对象,super()代表父类对象。
表示在子类访问父类的成员和行为,必须受到类继承规则的约束。
在子类的构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入对父类的实例化构造。而this就没有这个要求,因为其本身就进行了实例化构造。
在方法中super和this的使用就差不多了,只不过super要考虑是否访问其父类的资源。


2、继承的时类的执行顺序问题:

请看源码:

A.父类[/size]

package test; 

public class FatherClass{

public FatherClass(){

System.out.println("FatherClass Create");

}

}

[size=medium]B.子类
[/size]
package test; 

import test.FatherClass;

public class ChildClass extends FatherClass{

public ChildClass(){

System.out.println("ChildClass Create");

}

public static void main(String[] args){

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

[size=medium] 请写出B中子类执行后的输出结果。

程序执行首先找的是main方法,而其第一句执行的结果是:FatherClass Create。

由于子类的构造方法中的第一行隐藏着super(),所以执行第二句时,首先还是调用父类的构造方法,所以又输出:FatherClass Create,最后才调用子类自己的构造方法,输出:ChildClass Create

所以答案为:

FatherClass Create

FatherClass Create

ChildClass Create


3、String与StringBuffer的区别

String:长度给定,内容不可变,当多个字符串联合时要先转换为StringBuffer,然后再联合,速度较慢。

StringBuffer:长度可变,内容也可以修改。如:可以在任意位置添加、删除、替换、截取内容,还能反转内容,查找指定内容是否存在。其中添加append)、反转(reverse)是String所没有的。

还可以将多个字符串值直接联合,效率高。

总的来说,在频繁修改字符串内容的地方,最好使用StringBuffer来完成,因为它效能高!


4、编程:使用冒泡法排序一个数组。
[/size]
public class BubbleSort{
private static int al[] = {55,25,3,4,22,9};

public static void main(String[] args) {
BubbleSort bs = new BubbleSort();
System.out.println("排序前:");
display(al);

for(int i=1;i<al.length;i++) {

for (int j = 0; j < al.length; j++) {

if(al[j]>al[i]) {
swap(i,j);
}
}
}
System.out.println();
System.out.println("排序后:");
display(al);
}


private static void display(int[] al2) {
for (int i = 0; i < al2.length; i++) {
System.out.print(al2[i]+" ");
}
}

private static void swap(int i, int j) {
int temp = al[i];
al[i]= al[j];
al[j] = temp;
}

}

[size=medium]
5、String是最基本的数据类型吗?

答:不是,他是java.lang包中一个final类,因此不能继承或则修改该类。
基本的数据类型包括:byte、short、int、long、float、double、char和boolean。


6、int和Integer有什么区别?
答:int是基本数据类型,不是对象、占用一个内存空间,没有方法。基本数据类型还有:long、byte、short、float、double、char以及boolean。
Integer是封装类,有方法以及属性。基本数据类型中相对应的类还有:Long、Double以及Float。

7、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,
输出为按字节截取的字符串。 但是要保证汉字不被截半个,
如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
应该输出为"我ABC"而不是"我ABC+汉的半个"。[/size]
public class quiz{
public static void main(String args[])throws Exception{
String str = "我ABC汉DEF";
String str2 = split1(str,1);
System.out.println(str2);
}

public static String split1(String source,int num) throws Exception{
int k=0;
String temp="";
for (int i = 0; i <source.length(); i++){ //将源字符串拆分为字符数组
byte[] b=(source.charAt(i)+"").getBytes();
k=k+b.length;
if(k>num){
break;
}
temp=temp+source.charAt(i);
}
return temp;
//System.out.println(temp);
}
}



[size=medium]

8、"&"与"&&"的区别是什么?

"&"可以代表位运算符"按位与",也可以代表逻辑运算符"与",此时表示符号两边的条件语句都不判断,即第一个条件为false,第二条件还是要执行。
"&&"代表逻辑运算符"短路与",表示如果第一个条件为false的话,第二个条件就不执行了。


9、float f = 3.4是否正确?

答:错误,因为实数在java中默认的类型为double,即双精度型,长度为64字节,而float为浮点型,长度为32字节,3.4是double型的,赋值个float会损失精度,会内存溢出。应该写为:float f = 3.4F,也可以用自动类型转换:float f = 3;


10、编程:用最有效的方法算出2乘以8等于几?
[/size]
public int Multiple(){
int a = 2;
int b = 3;
int result = 0;
result = a << b;
return result;
}


[size=medium]11、char类型变量中能不能存储一个中文汉字,为什么?

答:可以,因为java中是以unicode编码的,一个char占2个字节,而一个中文汉字也占2个字节,所以完全能放的下。

12、数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length这个属性
String有length()这个方法.[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值