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、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,
输出为按字节截取的字符串。 但是要保证汉字不被截半个,
如"我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;
 
     }
}