专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java面试2019常考题系列-(附带答案)

Java面试2019常考题系列-(附带答案)

更新时间:2019-04-08 15:43:10 来源:动力节点 浏览3973次

  一、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;i<5;i++){


  for(intj=5;j>i;j--){


  System.out.print("*");


  }


  System.out.println();


  }


  }


  }


  4、什么是Java序列化,如何实现Java序列化?(写一个实例)


  序列化:


  可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内


  容读取,转化为一个对象。


  处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行


  读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作


  时所引发的问题。


  序列化的实现:


  将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements


  Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:


  FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用


  ObjectOutputStream对象的writeObject(Objectobj)方法就可以将参数为obj的对象写出


  (即保存其状态),要恢复的话则用输入流。


  5、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?


  方法的重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。


  重载Overloading一个类多个方法,名称相同,参数个数类型不同。


  两者都是Java多态性的不同表现。


  Overloaded的方法是可以改变返回值的类型。


  1,publicclassCtest()


  {


  Publicstaticvoidmain()


  {


  System.out.prinln(8+8+”88”+8+8);


  }


  }


  168888


  6、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?


  答:父类:


  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.ChildClass


  FatherClassCreate


  FatherClassCreate


  ChildClassCreate


  7、用插入法进行排序代码如下


  packagetest;


  importjava.util.*;


  classInsertSort


  {


  ArrayListal;


  publicInsertSort(intnum,intmod)


  {


  al=newArrayList(num);


  Randomrand=newRandom();


  System.out.println("TheArrayListSortBefore:");


  for(inti=0;i<num;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;i<al.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;j<MaxSize;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;i<al.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接口


  8、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"


  我ABC"而不是"我ABC+汉的半个"。


  答:代码如下:


  publicstaticvoidsplit(Stringsource,intnum)throwsException


  {


  intk=0;


  Stringtemp="";


  for(inti=0;i<source.length();i++)


  {


  byte[]b=(source.charAt(i)+"").getBytes();


  k=k+b.length;


  if(k>num)


  {


  break;


  }


  temp=temp+source.charAt(i);


  }


  System.out.println(temp);


  }


  9、指出下面程序的运行结果。


  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();//执行到此处,结果:1a2b


  ab=newB();//执行到此处,结果:1a2b2b


  }


  }


  注:类的static代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的


  加载,首先要执行其基类的构造,再执行其本身的构造


  10、抽象类和接口的区别?


  (1)接口可以被多重implements,抽象类只能被单一extends


  (2)接口只有定义,抽象类可以有定义和实现


  (3)接口的字段定义默认为:publicstaticfinal,抽象类字段默认是"friendly"(本包可见)


  当功能需要累积时用抽象类,不需要累积时用接口。


  11、什么是类的返射机制?


  通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、


  modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是返


  射、struts、hibernate都是通过类的返射进行开发的。


  12、类的返射机制中的包及核心类?


  java.lang.Class


  java.lang.refrection.Method


  java.lang.refrection.Field


  java.lang.refrection.Constructor


  java.lang.refrection.Modifier


  java.lang.refrection.Interface


  13、得到Class的三个过程是什么?


  对象.getClass()类.class或Integer.type(int)Integer.class(java.lang.Integer)


  Class.forName();


  14、如何唤起类中的一个方法?


  产生一个Class数组,说明方法的参数


  通过Class对象及方法参数得到Method


  通过method.invoke(实例,参数值数组)唤醒方法


  15、如何将数值型字符转换为数字(Integer,Double)?


  Integer.parseInt(“1234”)


  Double.parseDouble(“123.2”)


  16、如何将数字转换为字符?


  1+””


  1.0+””


  17、如何去小数点前两位,并四舍五入?


  doubled=1256.22d;


  d=d/100;


  System.out.println(Math.round(d)*100);


  18、如何取得年月日,小时分秒?


  Calendarc=Calendar.getInstance();


  c.set(Calendar.YEAR,2004);


  c.set(Calendar.MONTH,0);


  c.set(Calendar.DAY_OF_MONTH,31);


  System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+"


  "+c.get(Calendar.DAY_OF_MONTH));


  19、如何获取某个日期是当月的最后一天?


  当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。


  取下一个月的第一天,下一个月的第一天-1


  publicstaticvoidmain(String[]args)


  {


  Calendarc=Calendar.getInstance();


  c.set(Calendar.YEAR,2004);


  c.set(Calendar.MONTH,0);


  c.set(Calendar.DAY_OF_MONTH,30);


  Calendarc1=(Calendar)c.clone();


  System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+"


  "+c.get(Calendar.DAY_OF_MONTH));


  c.add(Calendar.DAY_OF_MONTH,1);


  if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))


  {


  System.out.println("是最后一天");


  }


  else


  {


  System.out.println("不是取后一天");


  }


  }


  20、float型floatf=3.4是否正确?


  报错,应当是floatf=3.4f


  如果是floatf=3(整数)正确


  21、说出一些常用的类,包,接口,请各举5个


  常用的类:BufferedReaderBufferedWriterFileReaderFileWirterStringInteger


  常用的包:java.langjava.awtjava.iojava.utiljava.sqljavax.xmljavax.sevlet


  javax.ejb.java.netjavax.faces


  常用的接口:ListMapDocumentNodeListEjbObjectEjbHomeSessionBean


  EntityBean


  22、Java中会存在内存泄漏吗,请简单描述。


  会。如:inti,i2;return(i-i2);//wheni为足够大的正数,i2为足够大的负数。结果


  会造成溢位,导致错误。


  23、Java中实现多态的机制是什么?


  静态的多态:方法名相同,参数个数或类型不相同。(overloading)


  动态的多态:


  子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法


  实现接口的实例传与接口的引用调用的实现类的方法。


  24、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?


  动态内存


  存放类实例


  静态内存


  类本身


  垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。


  或通过System.gc()手动收集,但不保证一定执行。


  25、静态变量和实例变量的区别?


  statici=10;//常量


  classAa;a.i=10;//可变


  静态方法可以调用静态变量。


  实现方法可以调用静态变量、实例变量


  26、是否可以从一个static方法内部发出对非static方法的调用?


  不可以,如果其中包含对象的method();不能保证对象初始化.


  27、写clone()方法时,通常都有一行代码,是什么?


  Clone有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。


  28、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在


  try块中可以抛出异常吗?


  Try:执行部分,产生异常


  Catch:捕捉异常


  Finally:不管有没有异常都执行


  Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。


  Throw:抛出一个异常


  在try中可以抛出异常,一般与声明的异常相同。


  自定义异常要继承于Exception或Exception的子类


  29、冒泡排序法


  //相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较


  publicclassBubbleSort{


  privatestaticintal[]=newint[10];


  publicBubbleSort(){


  al[0]=2;


  al[1]=3;


  al[2]=23;


  al[3]=45;


  al[4]=1;


  al[5]=67;


  al[6]=23;


  al[7]=80;


  al[8]=35;


  al[9]=72;


  }


  publicstaticvoidmain(String[]args){


  BubbleSortbs=newBubbleSort();


  System.out.println("排序前:");


  display(al);


  for(inti=0;i<al.length;i++){


  for(intj=0;j<al.length-i-1;j++){


  if(al[j]>al[j+1]){


  swap(j,j+1);


  }


  }


  }


  System.out.println();


  System.out.println("排序后:");


  display(al);


  }


  privatestaticvoiddisplay(int[]al2){


  for(inti=0;i<al2.length;i++){


  System.out.print(al2[i]+"");


  }


  }


  privatestaticvoidswap(inti,intj){


  inttemp=al[i];


  al[i]=al[j];


  al[j]=temp;


  }


  }


  30、StringandStringBuffer的区别?


  String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。


  StringBuffer:长度可变,可以将多个字符串值直接联合,效率高


  31、用Java代码编写堆栈


  publicclassStack{


  int[]data;


  intmaxSize;


  inttop;


  publicStack(intmaxSize){


  this.maxSize=maxSize;


  data=newint[maxSize];


  top=-1;


  }


  /**


  *依次加入数据


  *@paramdata要加入的数据


  *@return添加是否成功


  */


  publicbooleanpush(intdata){


  if(top+1==maxSize){


  System.out.println("栈已满!");


  returnfalse;


  }


  this.data[++top]=data;


  returntrue;


  }


  /**


  *从栈中取出数据


  *@return取出的数据


  */


  publicintpop()throwsException{


  if(top==-1){


  thrownewException("栈已空!");


  }


  returnthis.data[top--];


  }


  publicstaticvoidmain(String[]args)throwsException{


  Stackstack=newStack(1000);


  stack.push(1);


  stack.push(2);


  stack.push(3);


  stack.push(4);


  stack.push(5);


  while(stack.top>=0)


  {


  System.out.println(stack.pop());


  }


  }


  }


  


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>