java基础备忘__14.5.18

来源:互联网 发布:网络卫星电视 编辑:程序博客网 时间:2024/05/24 01:37

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方法转为挂起状态,当线程关联的代码执行完后,线
程变为结束状态。 



0 0
原创粉丝点击