疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java面试集合(三)


 

 前言

大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢

1.在Java中是否可以含有多个类?
答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致。

2.说说&和&&的区别?
答:&&短路与,当第一个表达式为false时,第二个表达式不会进行。&,当一个表达式为false时,第二个表达式会进行。

3.char变量类型,能否存储一个中文汉字?
答:可以储存一个汉字,因为char是用Unicode编码来存储的,所以可以存储。

4.final关键字修饰变量时,是引用不变,还是引用对象不变?
答:使用final关键字修饰变量时,是引用变量不能变,引用变量所指对象中的内容是可以改变的。

5.静态变量和实例变量的区别?
答:静态变量前要加static修饰,而实例变量不用。在静态变量中不需要实例对象来调用输出,而实例变量则需要进行实例化,才能使用。

public class Test{     public int i = 1;     public static int j = 0;     public static void main(String[] args) {         Test in = new Test();         System.out.println(in.i);         System.out.println(j);     }    }

6.如何理解Math类中的ceil,floor,round?
答:ceil为天花板,则向上取整为取大的值,补充到整数;floor为地板,则向下取整为取最近小的整数;round为周围,四舍五入,原则在原来基础上+0.5,超过0.5的进位,不超过0.5就取进小整数。

7.Overload和Override的区别?
答:Overload为重载,Override为覆盖,重写。

8.请说说分层设计的好处?
答:

  • 实现了软件之间的解耦
  • 便于进行分工
  • 便于对软件组件的重用
  • 便于进行维护
  • 便于对功能的扩展

9.Java中实现多态的机制是?
答:父类或接口定义的引用变量指向子类具体实现类的实例对象,引用变量指向具体的实例对象。

10.说说abstract,interface?
答:

  • abstract修饰class为抽象类,抽象类不能创建实例对象,抽象类中的方法不必要抽象abstract修饰,但是含有abstract修饰的方法的类则必须是抽象类。
    abstract class内可以没有抽象方法,不可以被实例化,但是可以被声明。

  • interface接口中的所有方法必须是抽象的,接口中方法默认为public abstract类型,接口中变量类型默认public static final类型。
    接口中的成员变量必须定义初始化,实现接口类必须在该类实现所有的方法。

在抽象类中有构造方法,接口中没有;抽象类中有普通成员变量,接口中没有;抽象类中可以有静态方法,接口中不能有静态方法。

11.什么是内部类?
答:内部类是在一个类的内部定义的类,静态内部类可以有静态成员变量,而非静态内部类不能有静态成员;内部类可以在外部类中的方法中定义,也可以在外部类的方法外定义。

静态内部类中对外部类进行引用,只有非静态外部类才能对外部类进行引用。

在静态内部类中不需要进行外部类的实例,就可以进行实例化,而非静态内部类需要在外面创建内部类的实例对象,创建时,一定要先创建外部类的实例对象,然后用外部类的实例对象去创建内部类的实例对象。

12.String是否可以被继承?
答:不可以被继承,因为java.lang.String类是final类型的,不能继承的类,被final关键字修饰的类,并且不能被修改,不能改变!

当一个final类型中,String s = "Vic";s = s + " love ";表示原有的对象并没有被改变而是该引用转向了新的对象,原有的s引用不在指向原有的对象了。

13.1到99累加的String和StringBuffer效率?

StringBuffer sb = new StringBuffer(); for(int i = 0; i<100; i++){  sb.append(i); }
String str = new String(); for(int i = 0; i<100; i++){  str = str + i; }

StringBuffer只创建一个对象,而String创建了多个对象。

14.说说final,finally,finalize?
答:final用于修饰属性,方法,类,被修饰的属性是不可以变的,被修饰的方法是不可被覆盖的,被修饰的类是不可以被继承的。

finally这个是在异常处理语句中的一部分,finally中的语句是总要执行的。

finalize是垃圾回收集机制的,记住这点就够了。

15.在Java中有几种方法来实现线程?
答:

//new Thread(){}.start(); new Thread(){  public void run(){  } }.start();
new Thread(new Runnable(){  public void run(){  }  }).start();

16.说说迭代器模式?
答:

public static void print(String str){  Iterator it = str.iterator();  while(it.hasNext()){   String str = it.next();   System.out.println(str);  } }

17.说说装饰者模式?
答:

public interface Person{  void eat(); } public class Student implements Person{  public void eat(){   System.out.println("eating");  } } public class Me implements Person{  private Student student;  Me(Student student){   this.student=student; } public void eat(){  System.out.println("study");  student.eat();  System.out.println("sleeping");  } } public class PersonDemo{  public static void main(String[] args){   Student student = new Student();   Me me = new Me(student);   me.eat();  } }

18.说说单例模式?

//私有构造方法;私有静态引用,返回值为静态的公有方法 public class Singleton{  private static Singleton singleton = new Singleton();  private Singleton(){  }  public static Singleton getInstance(){   return singleton;  } }

19.说说工厂模式?

public interface School{  void Study(); } public class Studentone implements School{  public void Study(){   System.out.println("studyone");  } } public class Studenttwo implements School{  public void Study(){   System.out.println("studytwo");  } } public interface AllSchool{  School getSchool(); }  public class Studentone implements AllSchool{  public School getSchool(){   return new Study();  } }  public class Studenttwo implements AllSchool{  public School getSchool(){   return new Study();  } }  public class SchoolDemo{  public void test(){   AllSchool allSchool = null   //one   allSchool = new Studentone();   Studentone one = allSchool.getSchool();   one.Study();   //two   allSchool = new Studenttwo();   Studenttwo two = allSchool.getSchool();   two.Study();  } }

20.说说原型模式?
答:实现Cloneable接口,重写Object类中的clone方法

21.说说生成器模式?
答:

class Ym{  public void ymRequest(){   System.out.println("getYm");  } } interface Target{  public void request(); } class Ym extends Ym implements Target{  public void request(){   super.ymRequest();  } } public class Test{  public static void main(String[] args){   Target adapter = new Adapter();   adapter.request();  } }

22.说说代理模式?

//静态 public interface Info{  public void infoOne():  public void infoTwo(); }  public class TrueInfo implements Info{  public void infoOne(){  }  public void infoTwo(){  } }  public class FlaseInfo implements Info{  private Info trueInfo;  public FlaseInfo(Info trueInfo){   this.trueInfo = trueInfo;  }  public void infoOne(){  }  public void infoTwo(){  } }  public class Test{  public static void main(String[] args){   Info trueInfo = new TrueInfo();   Info flaseInfo = new FlaseInfo(trueInfo);   flaseInfo.infoOne();   flaseInfo.infoTwo();  } }

23.说说外观模式?

public class Studentone{  public void One(){   System.out.println("Studentone one");  }  public void Two(){   System.out.println("Studentone two");  } }  public class Studenttwo{  public void One(){   System.out.println("Studenttwo one");  }  public void Two(){   System.out.println("Studenttwo two");  } }  public class School{  public void Study(){   Studnetone one = new Studentone();   one.One();   one.Two();   Studenttwo two = new Studnettwo();   two.Ono();   two.Two();  } }  public class Test{  public static void main(String[] args){   School school = new School();   school.Study();  } }

24.说说冒泡排序?

public class Demo{  public static void main(String[] args){  int[] nums = { 3,1,7,5,8,9,23,45};  for(int i = 0; i< nums.length-1;i++){   for(int j = 0;j<nums.length-1-i;j++){    if(nums[j]>nums[j+1]){    int temp = nums[j];    nums[j] = nums [j+1];    nums[j+1] = temp;  } }  for(int j = 0; j<nums.length;j++){  Systm.out.println(nums[j]);  } }

25.说说选择排序?

//这种就是排序算法,比如有6个人,第一轮要进行5次比较 //第一轮 for(int index=1;index<arr.length;index++) { if(arr[0]>arr[index]) {   int temp = arr[0];   arr[0] = arr[index];   arr[index] = temp; } } print(arr);  //第二轮 for(int index=2;index<arr.length;index++) { if(arr[1]>arr[index]) {   int temp = arr[1];   arr[1] = arr[index];   arr[index] = temp; } } print(arr);  //第三轮 for(int index=3;index<arr.length;index++) { if(arr[2]>arr[index]) {   int temp = arr[2];   arr[2] = arr[index];   arr[index] = temp; } } print(arr);  //第四轮 for(int index=4;index<arr.length;index++) { if(arr[3]>arr[index]) {   int temp = arr[3];   arr[3] = arr[index];   arr[index] = temp;  } } print(arr);  //第五轮 for(int index=5;index<arr.length;index++) { if(arr[4]>arr[index]) {   int temp = arr[4];   arr[3] = arr[index];   arr[index] = temp;  } } print(arr);  //第六轮没有,我们arr.length=6举例 //int index = 6;index<arr.length; false  public static void selectionSort(int[] arr) { for(int count=1;count<arr.length;count++) {  for(int index=count;index<arr.length;