JAVA软件工程师面试常问的东东之一
JAVA程序员面试常问的东东之一
1、super与this的区别?
super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字。
this出现在类的实例方法中,代表使用该方法的当前对象。也可以出现在类的构造方法中,代表使用该构造方法所创建的对象。
this()代表当前类对象,super()代表父类对象。
表示在子类访问父类的成员和行为,必须受到类继承规则的约束。
在子类的构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入对父类的实例化构造。而this就没有这个要求,因为其本身就进行了实例化构造。
在方法中super和this的使用就差不多了,只不过super要考虑是否访问其父类的资源。
2、继承的时类的执行顺序问题:
请看源码:
A.父类
请写出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、编程:使用冒泡法排序一个数组。
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+汉的半个"。
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等于几?
11、char类型变量中能不能存储一个中文汉字,为什么?
答:可以,因为java中是以unicode编码的,一个char占2个字节,而一个中文汉字也占2个字节,所以完全能放的下。
12、数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length这个属性
String有length()这个方法.
1、super与this的区别?
super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字。
this出现在类的实例方法中,代表使用该方法的当前对象。也可以出现在类的构造方法中,代表使用该构造方法所创建的对象。
this()代表当前类对象,super()代表父类对象。
表示在子类访问父类的成员和行为,必须受到类继承规则的约束。
在子类的构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入对父类的实例化构造。而this就没有这个要求,因为其本身就进行了实例化构造。
在方法中super和this的使用就差不多了,只不过super要考虑是否访问其父类的资源。
2、继承的时类的执行顺序问题:
请看源码:
A.父类
package test; public class FatherClass{ public FatherClass(){ System.out.println("FatherClass Create"); } }B.子类
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(); } }
请写出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、编程:使用冒泡法排序一个数组。
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; } }
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+汉的半个"。
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); } }
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等于几?
public int Multiple(){ int a = 2; int b = 3; int result = 0; result = a << b; return result; }
11、char类型变量中能不能存储一个中文汉字,为什么?
答:可以,因为java中是以unicode编码的,一个char占2个字节,而一个中文汉字也占2个字节,所以完全能放的下。
12、数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length这个属性
String有length()这个方法.