Java经典面试题大全Word下载.docx
《Java经典面试题大全Word下载.docx》由会员分享,可在线阅读,更多相关《Java经典面试题大全Word下载.docx(114页珍藏版)》请在冰豆网上搜索。
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"
}
子类:
importtest.FatherClass;
publicclassChildClassextendsFatherClass
publicChildClass()
ChildClassCreate"
publicstaticvoidmain(String[]args)
FatherClassfc=newFatherClass();
ChildClasscc=newChildClass();
输出结果:
C:
>
javatest.ChildClass
FatherClassCreate
ChildClassCreate
12.内部类的实现方式?
答:
示例代码如下:
publicclassOuterClass
privateclassInterClass
PublicInterlass()
InterClassCreate"
publicOuterClass()
InterClassic=newInterClass();
OuterClassCreate"
OuterClassoc=newOuterClass();
输出结果:
javatest/OuterClass
InterClassCreate
OuterClassCreate
13.用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?
14.如在COLLECTION框架中,实现比较要实现什么样的接口?
Comparable接口
15.用插入法进行排序代码如下
importjava.util.*;
classInsertSort
ArrayListal;
publicInsertSort(intnum,intmod)
al=newArrayList(num);
Randomrand=newRandom();
TheArrayListSortBefore:
"
for(inti=0;
i<
num;
i++)
al.add(newInteger(Math.abs(rand.nextInt())%mod+1));
al["
+i+"
]="
+al.get(i));
publicvoidSortIt()
IntegertempInt;
intMaxSize=1;
for(inti=1;
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);
break;
TheArrayListSortAfter:
for(inti=0;
InsertSortis=newInsertSort(10,100);
is.SortIt();
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable接口和Comparator接口
16.编程:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如"
我ABC"
4,应该截为"
我AB"
,输入"
我ABC汉DEF"
,6,应该输出为"
而不是"
我ABC+汉的半个"
。
publicstaticvoidsplit(Stringsource,intnum)throwsException
{
intk=0;
Stringtemp="
;
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);
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++;
PrintWriterout=newPrintWriter(newBufferedWriter(newFileWriter(f,false)));
out.write(String.valueOf(i));
//可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String
out.close();
17、指出下面程序的运行结果。
classA{
static{
System.out.print("
1"
publicA(){
2"
classBextendsA{
a"
publicB(){
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.DAY_OF_MONTH,30);
Calendarc1=(Calendar)c.clone();
c.add(Calendar.DAY_OF_MONTH,1);
if(c.get(Calendar.MONTH)!
=c1.get(Calendar.MONTH))
{
System.out.println("
是最后一天"
else
不是取后一天"
}
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"
));
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;
BubbleSortbs=newBubbleSort();
System.out.println("
排序前:
display(al);