您的位置:首页 > 编程语言 > Java开发

java基础备忘__14.5.18

2014-05-18 21:38 197 查看
1、

局部变量前不能放置任何访问修饰符  (private,public,和protected)。final 可以用来修饰局部变量 。局部变量——方法体中定义的变量。

2、

abstract method前不可加final和private。

3、

public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
如果在addOne方法内改变o的指向,如o = new Other();就出错,但是成员变量i没被final修饰,可以被改变。

4、

成员变量有默认值,如int i;默认值为0。但是当成员变量被final修饰,就没有默认值,需要改成final int i = 0;

5、

静态方法不能直接访问非静态方法。在静态方法中,可以通过s.addOne();形式调用,s为类实例,addOne()为非静态方法。

6、

interface  A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
x调用不明确,JVM编译出错,调用父类x可用super.x,可通过A.x确定x,因为接口变量默认为public static final。

7、

interface Playable {
void play();
}
interface Bounceable {
void play();
}
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name =name;
}
public void play() {
ball = newBall("Football");
System.out.println(ball.getName());
}
}
接口中 Ball ball = new Ball("PingPang");默认为public static final  Ball ball = new Ball("PingPang");

不可以改变ball指向,所以ball = new Ball("Football")出错。

8.final, finally, finalize 的区别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 

内部类要访问局部变量,局部变量必须定义成 final类型,例如,一段代码…… 

finally是异常处理语句结构的一部分,表示总是执行。 

finalize 是 Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可

以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被

调用 

9.error 和 exception有什么区别? 

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指

望程序能处理这样的情况。  exception表示一种设计或实现问题。也就是说,它表示如果程

序运行正常,从不会发生的情况。 

10.多线程有几种实现方法?同步有几种实现方法? 

多线程有两种实现方法,分别是继承 Thread类与实现Runnable接口 

同步的实现方面有两种,分别是synchronized,wait与notify 

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉

InterruptedException(中断异常)异常。 

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒

某一个等待状态的线程,而是由 JVM确定唤醒哪个线程,而且不是按优先级。 

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是

让它们竞争。 

11.当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可

进入此对象的其它方法? 

分几种情况: 

     1. 其他方法前是否加了synchronized关键字,如果没加,则能。 

     2. 如果这个方法内部调用了 wait,则可以进入其他synchronized方法。 

     3. 如果其他个方法都加了 synchronized关键字,并且内部没有调用wait,则不能。 

12.线程的基本概念、线程的基本状态以及状态之间的关系 

  状态:就绪,运行, synchronize 阻塞, wait和sleep挂起,结束。 wait必须在 synchronized

内部调用。 

  调用线程的 start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状

态,遇到 synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞

转为运行,在这种情况可以调用 wait方法转为挂起状态,当线程关联的代码执行完后,线

程变为结束状态。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java