Java经典面试题大全.docx

上传人:b****5 文档编号:6488234 上传时间:2023-01-07 格式:DOCX 页数:114 大小:95.08KB
下载 相关 举报
Java经典面试题大全.docx_第1页
第1页 / 共114页
Java经典面试题大全.docx_第2页
第2页 / 共114页
Java经典面试题大全.docx_第3页
第3页 / 共114页
Java经典面试题大全.docx_第4页
第4页 / 共114页
Java经典面试题大全.docx_第5页
第5页 / 共114页
点击查看更多>>
下载资源
资源描述

Java经典面试题大全.docx

《Java经典面试题大全.docx》由会员分享,可在线阅读,更多相关《Java经典面试题大全.docx(114页珍藏版)》请在冰豆网上搜索。

Java经典面试题大全.docx

Java经典面试题大全

Java面试题整理

Java面向对象

1.super()与this()的区别?

This():

当前类的对象,super父类对象。

Super():

在子类访问父类的成员和行为,必须受类继承规则的约束

而this他代表当前对象,当然所有的资源都可以访问.

在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.

而在方法中super和this使用的方法就差不多了.只不过super要考虑是否能访问其父类的资源.

2.作用域public,protected,private,以及不写时的区别?

修饰符

相同类

相同包

子类

整体

Private

Yes

Default

Yes

Yes

Protected

Yes

Yes

Yes

Public

Yes

Yes

Yes

yes

Ø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事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。

在这种方案中,监听器简单的等待,直到它收到一个事件。

一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。

如果一个对象没有指向它的引用或者其赋值为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);

}

}

168888

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

FatherClassCreate

FatherClassCreate

ChildClassCreate

12.内部类的实现方式?

答:

示例代码如下:

packagetest;

publicclassOuterClass

{

privateclassInterClass

{

PublicInterlass()

{

System.out.println("InterClassCreate");

}

}

publicOuterClass()

{

InterClassic=newInterClass();

System.out.println("OuterClassCreate");

}

publicstaticvoidmain(String[]args)

{

OuterClassoc=newOuterClass();

}

}

输出结果:

C:

>javatest/OuterClass

InterClassCreate

OuterClassCreate

13.用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?

14.如在COLLECTION框架中,实现比较要实现什么样的接口?

Comparable接口

15.用插入法进行排序代码如下

packagetest;

importjava.util.*;

classInsertSort

{

ArrayListal;

publicInsertSort(intnum,intmod)

{

al=newArrayList(num);

Randomrand=newRandom();

System.out.println("TheArrayListSortBefore:

");

for(inti=0;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

{

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

{

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

{

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.编程:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。

但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

答:

代码如下:

publicstaticvoidsplit(Stringsource,intnum)throwsException

{

intk=0;

Stringtemp="";

for(inti=0;i

{

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

k=k+b.length;

if(k>num)

{

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编码的混乱,因此此处写入的是String

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

1a2b

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

1a2b2b

}

}

  注:

类的static代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造

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

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

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

(3)接口的字段定义默认为:

publicstaticfinal,抽象类字段默认是"friendly"(本包可见)

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

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

通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。

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

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

java.lang.Class

java.lang.refrection.Method

java.lang.refrection.Field

java.lang.refrection.Constructor

java.lang.refrection.Modifier

java.lang.refrection.Interface

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

对象.getClass()

类.class或Integer.type(int)Integer.class(java.lang.Integer)

Class.forName();

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

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

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

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

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

Integer.parseInt(“1234”)

Double.parseDouble(“123.2”)

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

1+””

1.0+””

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

doubled=1256.22d;

d=d/100;

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

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

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));

27、如何取得从1970年到现在的毫秒数

Java.util.Datedat=newDate();

longnow=dat.getTime();

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

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

取下一个月的第一天,下一个月的第一天-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("不是取后一天");

}

}

29、如何格式化日期?

Importjava.text.SimpleDateFormat;

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddhh:

mm:

ss");

Datedat=newDate();

//把日期转化为字符串

Stringstr=sdf.format(dat);

System.out.println(str);

//将字符串转化为日期

Java.util.Dated1=sdf.parse(“yyyy-mm-dd”);

30、编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。

Stringa=newString("中".getBytes("gb2312"),"iso-8859-1");

 

Stringa=newString("中".getBytes("iso-8859-1"));

32、Strings=newString("xyz");创建了几个StringObject?

New了一个,”XYZ”本来又是一个

两个

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

报错,应当是floatf=3.4f

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

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

常用的类:

BufferedReaderBufferedWriterFileReaderFileWirterStringInteger

常用的包:

java.langjava.awtjava.iojava.utiljava.sqljavax.xmljavax.sevletjavax.ejb.javax.faces

常用的接口:

ListMapDocumentNodeListEjbObjectEjbHomeSessionBeanEntityBean

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

会。

如:

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

结果会造成溢位,导致错误。

37、java中实现多态的机制是什么?

静态的多态:

方法名相同,参数个数或类型不相同。

(overloading)

动态的多态:

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

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

38、垃圾回收器的基本原理是什么?

垃圾回收器可以马上回收内存吗?

有什么办法主动通知虚拟机进行垃圾回收?

动态内存

存放类实例

静态内存

类本身

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

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

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

statici=10;//常量

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

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

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

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

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

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

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

43、JAVA语言如何进行异常处理,关键字:

throws,throw,try,catch,finally分别代表什么意义?

在try块中可以抛出异常吗?

Try:

执行部分,产生异常

Catch:

捕捉异常

Finally:

不管有没有异常都执行

Throws:

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

Throw:

抛出一个异常

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

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

45、冒泡排序法

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

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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1