JAVA软件工程师面试常问的东东之一

JAVA程序员面试常问的东东之一
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()这个方法.