java常见面试题

学习了MLDN李兴华老师的java常见面试题的教程,现记录下来和大家分享一下,希望可以对将要面试的童鞋们有所帮助!

1.Java中的异常处理机制的简单原理和应用

A.每当产生异常之后,如果没有程序进行相应的处理,则程序将出现中断的现象,那么,此时实际上一但产生一个异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句进行捕获的话,则可以进行异常处理,如果没有的话,则交给JVM进行处理,当try语句捕获到了异常之后,会与catch中类型进行匹配,如果匹配成功,则使用此catch语句进行处理。

应用:简单的引用,就是在所有有throws关键字的地方加入try...catch
如果按照一个标准做法的话,try,catch finally,throw,throws关键字应该一起使用。



2.垃圾回收的优点和原理。并考虑2种回收机制
将无用的对象空间进行释放,两种回收:自动回收,手工调用System.gc()方法,实际上调用System.gc()就相当于调用了Runtime.getRuntime().gc()方法。


3.Error与Exception有什么区别?
Error表示是由JVM进行处理的,是JVM出错。
Exception是可以由程序进行处理的,使用try..catch进行处理



4.谈谈final,finally,finalize的区别
final是定义常量、方法、类的,声明的方法不能被重写,声明的类不能被继承
finally:是异常的统一出口
finalize:是垃圾回收前的收尾工作,是Object类中定义的



5.Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
允许继承和实现,因为匿名内部类就是在抽象类和接口的基础之上发展起来的。


6.static nested class 和 inner class的不同。
使用static声明的内部类就是外部类,可以通过外部类.内部类直接访问
普通的内部类是不能够直接被外部所访问的,需要通过外部类实例再找到内部类实例



7.HashMap和Hashtable的区别
HashMap
JDK1.2之后推出,是新的类
采用异步处理方式,性能较高,但是属于非线程安全
允许设置null
Hashtable

JDK1.0时推出,是旧的类
采用同步处理方式,性能较低,但是属于线程安全
不允许设置null,否则将出现NullPointerException



8.什么时候用assert?
JDK1.4之后增加的新关键字--asssert,表示断言,即程序执行到某个地方之后值肯定是预计好的
一般开发中很少使用assert
要想使用断言,则必须使用-ea参数



9.GC是什么?为什么要有GC?
GC:垃圾收集
使用GC可以进行垃圾空间的释放操作



10.String s = new String("xyz");创建了几个String Object?
产生了两个实例化对象,一个是匿名对象"xyz",一个是通过关键字new实例化的


11.sleep()和wait()有什么区别?
sleep是Thread类中定义的方法,表示线程的休眠,会自动唤醒
wait()是Object中定义的方法,需要手工调用notify()或notifyAll()方法



12.Java有没有goto?
goto属性保留的关键字,java中存在goto,只是无法使用。


13.数组有没有length这个方法?String中有没有length()这个方法?
数组中存在length这个属性, String中存在length()方法


14.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
重载:overload
在一个类中定义的若干方法
所有的方法名称相同,但是参数的类型或个数不同
重写:override
在继承的关系中
子类定义了与父类同名的方法,参数类型或个数最好完全一样,注意访问权限不能更加严格
重载的时候不是依靠返回值类型区分的,而是靠参数





15.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
依靠hashCode()和equals()两个方法完成,==属于地址值比较,而equals属于内容比较,使用的是equals()方法




16.列举出一些最常见到的runtime exception
NumberFormatException ArrayOutIndexOfBoundException NullPointerException ClassCastException




17.abstract class 和 interface有什么区别?
抽象类
由抽象方法和常量、变量、全局常量、构造方法、普通方法组成
使用abstract声明
子类要通过extends继承抽象类,子类如果不是抽象类,则必须重写抽象类中的全部抽象方法
存在单继承局限,一个子类只能继承一个抽象类
抽象类可以实现若干接口
接口
全部由抽象方法和全局常量组成
使用interface声明
子类通过implements实现接口,子类如果不是抽象类,则必须重写抽象类中的全部抽象方法
不存在单继承的局限,一个子类可以同时实现多个接口
接口不能继承一个抽象类,但是允许的继承多个接口



18.启动一个线程是用run()还是start()?
A.使用start()方法,因为要通知JVM进行CPU资源的分配。


19.try里有一个return语句,那么紧跟在这个try后的finally里的code会不会被执行,会眨巴时候被告执行,在return前还是后?

A.会执行,在return之前执行,只要是finally()的代码永远会被执行。




20.写一个单例模式的例子
核心:构造方法私有化
package weichao.interview.ex1


public class Singleton
{
private static final Singleton sin = new Singleton();
private Singleton(){}
public static Singleton getInstance()
{
return sin;
}
}

在Java中Runtime类,Class类都属性单例设计





21.编一段代码,实现在控制台输入一组数字后,排序后在控制台输出
package weichao.interview.ex1

public class Demo
{
public static void main(String[] args)
{
BufferedReader buf = new BufferedReader(nnew InputStreamReader(System.in));
System.out.println("请输入一组数据,中间使用空格分隔");
String str = buf.readLine();
Set<Integer> set = new TreeSet<Integer>();
String s[] = str.split(" "); // 进行拆分
for(String x : s)
{
set.add(Integer.parseInt(x)); // 加入数据
}
System.out.print("排序之后的结果是:");
Iterator<Integer> iter = set.iterator();
while(iter.hasNext())
{
System.out.print(iter.next() + " ");
}
}
}



22.列出某个文件夹下所有的文件
A.使用递归调用

package weichao.interview.ex1


public class ListFiles
{
public static void main(String[] args)
{
File file = new File("d:" + File.separator + "doc");
fun(file);
}
public static void fun(File file)
{
if(file.isDirectory())
{
File f[] = file.listFils();
if(f != null)
{
for(int x = 0; x < f.length; x++)
{
fun(f[x]);
}
}
else
{
System.out.println(file);
}
}
}
}





23.char型变量中通常的能存贮一个中文汉字?为什么?
A.可以存放,因为使用的是unicode编码


24.多线程有几种实现方法,都是什么?同步有几种实现方法?都是什么?
A.两种实现方法,继承Thread类,实现Runnable接口
Thread类是Runnable接口的子类
使用Runnable接口可以实现资源共享的目的
所有的线程操作都必须通过Thread类的start()方法启动


两种实现同步的方法:
同步代码块:Synchronized(this){}
同步方法





25.float型float f = 3.4 是否正确?
A.不正确,因为默认情况下3.4是double类型的数据


26.String与StringBuffer的区别?
A.String不可修改,StringBuffer允许修改


27.Class.forName的作用?为什么要用?
A.Class.forName属于向容器之中加载驱动程序。


28.int和Integer有什么区别?
A.int是基本数据类型,Integer是包装类
在JDK1.5之后,可以实现自动装箱及拆箱的操作



29.用最有效率的方法算出2乘以8等于几?
A.就是使用移位操作:2<<3


30.请说出类集框架的完整结构。
A.类集框架最大的接口:Collection,Map,Iterator
Collection:存放单值
List:允许有重复内容
ArrayList:异步处理,新的操作类,非线程安全
Vector:同步处理,旧的操作类,线程安全,支持Enumeration输出


Set:不允许有重复内容,靠HashCode()和equals进行重复验证
HashSet:无序存放
TreeSet:有序存放,按Comparable排序
Map:存放一对值
HashMap:新的类,异步处理,非线程安全,允许有null
Hashtable:旧的类,同步处理,非线程安全不允许有nulll
Properties:属性操作类
TreeMap:有序排列,按key排序,根据Comparable指定排序规则
Iterator
迭代输出,依靠Collection接口中的iterator方法输出,是新的输出标准
Enumeration:旧的输出操作。



31.是否可以继承String类

A.不可以,因为String类使用了final声明


[谢谢MLDN!谢谢李兴华老师!]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值