主要是两种,SAX和DOM
SAX 就是逐行读取,直到找到目标数据为止
DOM 是先全文档加载,然后读取
示例 33 : 关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
示例 34 : 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以包括多个类,但是只能出现一个public修饰的类,但是可以出现多个非public修饰的类。
示例 35 : java中有几种类型的流?
Java中所有的流都是基于
字节流,所以最基本的流是
输入输出字节流
InputStream
OutputStream
在字节流的基础上,封装了字符流
Reader
Writer
进一步,又封装了缓存流
BufferedReader
PrintWriter
以及数据流
DataInputStream
DataOutputStream
对象流
ObjectInputStream
ObjectOutputStream
以及一些其他的奇奇怪怪的流 ~~~
示例 36 : java中会存在内存泄漏吗,请简单描述。
因为Java是自动进行垃圾回收管理的,所以不存在 C语言中同等概念的内存泄漏,但是存在Java特色的内存泄漏
当某些对象不被使用,但是又有非直接引用指向的时候,那么就不满足垃圾回收的条件,而形成内存泄漏。
比如代码中的例子,每个Object创建的时候,有一个引用o指向,接着就被放进了集合al中。 下一个Object创建的时候,上一个Object就没有引用指向了。
这些Object都没有引用指向,但是却放在ArrayList中,而这个Arraylist忘记了回收,那么里面的所有对象,都会一直存活下去,虽然不再被使用了。
package j2se;
import java.util.ArrayList;
public class MemoryLeak {
static ArrayList<Object> al = new ArrayList<Object>();
public static void main(String[] args) {
for ( int i = 0 ; i < 100 ; i++) {
Object o = new Object();
al.add(o);
}
}
}
|
示例 37 : java中实现多态的机制是什么?
示例 38 : 静态变量和实例变量的区别?
静态变量 直接通过类就可以访问,无需实例
实例变量 比如通过类的某个具体实例,才可以访问
示例 39 : 什么是java序列化,如何实现java序列化?
序列化指的是把一个Java对象,通过某种介质进行传输,比如Socket输入输出流,或者保存在一个文件里
实现java序列化的手段是让该类实现接口 Serializable,这个接口是一个标识性接口,没有任何方法,仅仅用于表示该类可以序列化。
示例 40 : 是否可以从一个static方法内部发出对非static方法的调用?
不行,因为非static方法需要一个具体的实例才可以调用,而调用 static方法的时候,不一定存在一个实例
示例 41 : 在JAVA中,如何跳出当前的多重嵌套循环?
在外部循环的前一行,加上标签
在break的时候使用该标签
即能达到结束多重嵌套循环的效果
public class HelloWorld {
public static void main(String[] args) {
outloop:
for ( int i = 0 ; i < 10 ; i++) {
for ( int j = 0 ; j < 10 ; j++) {
System.out.println(i+ ":" +j);
if ( 0 ==j% 2 )
break outloop;
}
}
}
}
|
示例 42 : List、Map、Set三个接口,存取元素时,各有什么特点?
示例 43 : Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以 implements(实现)interface(接口)?
匿名内部类本质上就是在继承其他类,实现其他接口
如例:
匿名类1,就是继承了Thread
匿名类2 ,就是实现了Runnable接口
package j2se;
public class HelloWorld {
public static void main(String[] args) {
new Thread() {
public void run() {
}
};
new Runnable() {
public void run() {
}
};
}
}
|
示例 44 : 内部类可以引用外部类的成员吗?有没有什么限制?
可以使用
如果是非静态内部类,可以使用外部类的所有成员
如果是静态内部类,只能使用外部类的静态成员
示例 45 : 多线程有几种实现方法,都是什么?
通常来讲,Java 创建一个线程有三种方式
1. 继承一个Thread类
2. 实现Runnable接口
3. 匿名内部类
详细请参考
Java 创建一个线程的三种方式
示例 46 : sleep() 和 wait() 有什么区别?
首先sleep和wait之间没有任何关系
sleep 是Thread类的方法,指的是当前线程暂停。
wait 是Object类的方法, 指的占用当前对象的线程临时释放对当前对象的占用,以使得其他线程有机会占用当前对象。 所以调用wait方法一定是在synchronized 中进行
示例 47 : 说出数据连接池的工作机制是什么?
数据库连接池原理:
因为创建连接和关闭连接的行为是非常耗时的,会显著降低软件的性能表现。解决办法就是先创建n条数据库连接Connection,循环使用,但是不进行关闭,这样再执行SQL语句,就不需要额外创建连接了,直接使用现成的连接就可以了,从而节约了创建连接和关闭连接的时间开销。
参考
自己设计一个数据库连接池类:ConnectionPool
示例 48 : 简述synchronized和java.util.concurrent.locks.Lock的异同 ?
1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。
2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。
3. synchronized在发生异常和同步块结束的时候,会自动释放锁。而Lock必须手动释放, 所以如果忘记了释放锁,一样会造成死锁。
完整的Lock教程请查看:
Lock对象
示例 49 : Class.forName的作用?为什么要用?
Class.forName常见的场景是在数据库驱动初始化的时候调用。
Class.forName本身的意义是加载类到JVM中。 一旦一个类被加载到JVM中,它的静态属性就会被初始化,在初始化的过程中就会执行相关代码,从而达到"加载驱动的效果"
示例 50 : 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
这要看情况而定,如果该对象的其他方法也是有synchronized修饰的,那么其他线程就会被挡在外面。否则其他线程就可以进入其他方法。
示例 51 : 给我五个你最常见到的runtime exception。
NullPointerException 空指针异常
ArithmeticException 算术异常,比如除数为零
ClassCastException 类型转换异常
ConcurrentModificationException 同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常
IndexOutOfBoundsException 数组下标越界异常
NegativeArraySizeException 为数组分配的空间是负数异常