java基础备忘__14.5.18

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值