Java面试题整理Java面向对象1.super()与this()的区别?This():当前类的对象,super父类对象。Super():在子类访问父类的成员和行为,必须受类继承规则的约束而this他代表当前对象,当然所有的资源都可以访问.在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.而在方法中super和this使用的方法就差不多了.只不过super要考虑是否能访问其父类的资源.2.作用域public,protected,private,以及不写时的区别?Public:不同包、同一包、类内都可用Private:类内Protected:不同包的子类、同一包、类内都可用不写时:同一包内、类内3.编程输出如下图形。***************代码如下:publicclassPrint{publicstaticvoidmain(String[]args){for(inti=0;i5;i++){for(intj=5;ji;j--){System.out.print(*);}System.out.println();}}}4.JAVA的事件委托机制和垃圾回收机制java事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。垃圾回收机制垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收5.在JAVA中,如何跳出当前的多重嵌套循环?用break;return方法。6.什么是java序列化,如何实现java序列化?(写一个实例)序列化:处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Objectobj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。7.一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制?可以。如果这个类的修饰符是public,其类名与文件名必须相同。8.排序都有哪几种方法?请列举。用JAVA实现一个快速排序?排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)快速排序的伪代码。9.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。重载Overloading一个类多个方法,名称相同,参数个数类型不同。两者都是Java多态性的不同表现。Overloaded的方法是可以改变返回值的类型。1,publicclassCtest(){Publicstaticvoidmain(){System.out.prinln(8+8+”88”+8+8);}}16888810.Final类有什么特点?属性常量方法不可以overridding类不可以继承11.继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:packagetest;publicclassFatherClass{publicFatherClass(){System.out.println(FatherClassCreate);}}子类:packagetest;importtest.FatherClass;publicclassChildClassextendsFatherClass{publicChildClass(){System.out.println(ChildClassCreate);}publicstaticvoidmain(String[]args){FatherClassfc=newFatherClass();ChildClasscc=newChildClass();}}输出结果:C:javatest.ChildClassFatherClassCreateFatherClassCreateChildClassCreate12.内部类的实现方式?答:示例代码如下:packagetest;publicclassOuterClass{privateclassInterClass{PublicInterlass(){System.out.println(InterClassCreate);}}publicOuterClass(){InterClassic=newInterClass();System.out.println(OuterClassCreate);}publicstaticvoidmain(String[]args){OuterClassoc=newOuterClass();}}输出结果:C:javatest/OuterClassInterClassCreateOuterClassCreate13.用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?14.如在COLLECTION框架中,实现比较要实现什么样的接口?15.用插入法进行排序代码如下packagetest;importjava.util.*;classInsertSort{ArrayListal;publicInsertSort(intnum,intmod){al=newArrayList(num);Randomrand=newRandom();System.out.println(TheArrayListSortBefore:);for(inti=0;inum;i++){al.add(newInteger(Math.abs(rand.nextInt())%mod+1));System.out.println(al[+i+]=+al.get(i));}}publicvoidSortIt(){IntegertempInt;intMaxSize=1;for(inti=1;ial.size();i++){tempInt=(Integer)al.remove(i);if(tempInt.intValue()=((Integer)al.get(MaxSize-1)).intValue()){al.add(MaxSize,tempInt);MaxSize++;System.out.println(al.toString());}else{for(intj=0;jMaxSize;j++){if(((Integer)al.get(j)).intValue()=tempInt.intValue()){al.add(j,tempInt);MaxSize++;System.out.println(al.toString());break;}}}}System.out.println(TheArrayListSortAfter:);for(inti=0;ial.size();i++){System.out.println(al[+i+]=+al.get(i));}}publicstaticvoidmain(String[]args){InsertSortis=newInsertSort(10,100);is.SortIt();}}JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口16.编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如我ABC4,应该截为我AB,输入我ABC汉DEF,6,应该输出为我ABC而不是我ABC+汉的半个。答:代码如下:publicstaticvoidsplit(Stringsource,intnum)throwsException{intk=0;Stringtemp=;for(inti=0;isource.length();i++){byte[]b=(source.charAt(i)+).getBytes();k=k+b.length;if(knum){break;}temp=temp+source.charAt(i);}System.out.println(temp);}15、Java编程,打印昨天的当前时刻publicclassYesterdayCurrent{publicvoidmain(String[]args){Calendarcal=Calendar.getInstance();cal.add(Calendar.DATE,-1);System.out.println(cal.getTime());}}16、文件读写,实现一个计数器publicintgetNum(){inti=-1;try{Stringstri=;BufferedReaderin=newBufferedReader(newFileReader(f));while((stri=in.readLine())!=null){i=Integer.parseInt(stri.trim());}in.close();}catch(Exceptione){e.printStackTrace();}returni;}publicvoidsetNum(){inti=getNum();i++;try{PrintWriterout=newPrintWriter(newBufferedWriter(newFileWriter(f,false)));out.write(String.valueOf(i));//可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是Stringout.close();}catch(Exceptione){e.printStackTrace();}}17、指出下面程序的运行结果。classA{static{System.out.print(1);}publicA(){System.out.print(2);}}classBextendsA{static{System.out.print(a);}publicB(){System.out.print(b);}}publicclassHello{publicstaticvoidmain(String[]ars){Aab=newB();//执行到此处,结果:1a2bab=newB();//执行到此处,结果:1a2b2b}}注:类的static代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造18、抽象类和接口的区别?(1)接口可以被多重implements,抽象类只能被单一extends(2)接口只有定义,抽象类可以有定义和实现(3)接口的字段定义默认为:publicstaticfinal,抽象类字段默认是friendly(本包可见)当功能需要累积时用抽象类,不需要累积时用接口。19、什么是类的返射机制?通过类(Class对象),可以得出当前类的fields、method、