java面试复习 I
1 多线程
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
- 避免点继承的局限,一个类可以继承多个接口。
- 适合于资源的共享。
2 线程的四个状态
1. 新状态:线程已被创建但尚未执行(start() 尚未被调用)。
2. 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。
3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。
4. 阻塞状态:线程不会被分配 CPU 时间,无法执行。
sleep 未放弃锁,wait 放弃锁,需要使用notify才能获得锁。
join是 这个线程执行完了,再执行其他的。
3 string,stringbuffer
String是长度不可变的,StringBuffer和StringBuilder长度都是可以变化的。StringBuffer是线程安全的,StringBuilder不是线程安全的 .StringBuilder 是1.5开始的,建议优先选用它
4 匿名内部类
匿名内部类是在new 对象的时候在后面接 大括号,实现方法。如
interface
Person {
public
void
eat();
}
public
class
Demo {
public
static
void
main(String[] args) {
Person p =
new
Person() {
public
void
eat() {
System.out.println(
"eat something"
);
}
};
p.eat();
}
}
主要用在多线程处理上。参考文档:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html
5 内部类
1 访问形式
class Out { private int age = 12; class In { private int age = 13; public void print() { int age = 14; System.out.println("局部变量:" + age); System.out.println("内部类变量:" + this.age); System.out.println("外部类变量:" + Out.this.age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out().new In(); in.print(); } }
2 静态内部类
只能访问外部类的静态变量。
因为内部类被静态化,因此Out.In可以当做一个整体看
3 私有内部类
只有外部类可控制,访问