面试题整理
- 格式:doc
- 大小:37.00 KB
- 文档页数:4
1、Java中的异常处理机制的简单原理和应用。
每当产生异常之后,如果没有程序进行相应的处理,则程序将出现中断的现象,那么,此时实际上一旦产生一个异常之后,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 NestedClass 和InnerClass 的不同
使用static声明的内部类就是外部类,可以通过外部类.内部类直接访问
普通的内部类是不能够直接被外部所访问的,需要通过外部类实例再找到内部类实例
7、HashMap和Hashtable的区别
HashMap
1、Jdk1.2之后推出,是新的类。
2、采用异步处理方式,性能较高,但是属于非线程安全。
3、允许设置null
Hashtable
1、jdk1.0时推出,是旧的类
2、采用同步处理方式,性能较低,但是属于线程安全
3、不允许设置null,否则将出现NullPointerException
8、什么时候使用assert?
1、Jdk1.4之后增加的新关键字----assert,表示断言,既程序执行到某个地方之后值肯定是预计好的。
2、一般开发中很少使用assert
3、要想使用断言,则必须使用-ea参数
9、GC是什么?为什么要有GC?
GC:垃圾收集
使用GC可以进行垃圾空间的释放操作
10、String = 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
1、在一个定义的若干方法
2、所有的方法名称相同,但是参数的类型或个数不同
重写:override
1、在继承的关系中
2、子类定义了与父类同名的方法,参数类型或个数最好完全一样,注意访问
权限不能更加严格。
重载的时候不是依靠返回值类型区分的,而是靠参数。
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()?
使用start()方法,因为要通知JVM进行cpu资源的分类。
19、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return之前执行,只要是finally{}的代码永远会被执行。
20、编程题:写一个Singleton出来。
核心就是构造方法私有化
Package org.lxh.demo;
Public class Singleton{
Private static final Singleton sin=new Singleton();
Private Singleton(){
}
public static Singleton getInstace(){
return sin;
}
}
在Java中有Runtime类、Class类都属于单例设计。
21、编一段代码,实现在控制台输入一组数字后,排序后在控制台输出。
假设数字中间使用“”进行分隔,既然要排序,则可以使用集合保存,使用treeset保存。
package ibm.etp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class demo {
public static void main(String[] args) throws Exception{ BufferedReader buf = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("请输入一组数据,中间使用空格分隔:");
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()+"、");
}
}
}
以上的操作中,因为所有的数据都已经假设是正确的数字,但是实际中有可能是字符串第一种方法:允许有字符串,但是将所有的字符串忽略
第二种方法:不允许有字符串,如果出现了字符串,则程序不再向下继续执行。
replaceAll(“\\D+”,“”)。