有关java的一些基础知识

1。常量一种特殊的变量,因为编译器把他们当作值(value)而不是域(field)来对待。如果你的代码中用到了常变量(constant variable),编译器并不会生成字节码来从对象中载入域的值,而是直接把这个值插入到字节码中。这是一种很有用的优化,但是如果你需要改变final域的值,那么每一块用到那个域的代码都需要重新编译。 不是所有的final数据都是常量,只有编译期能确定数值的才能算是常量。

 

2。在接口中,定义的域(field)默认是public static final的

     而定义的方法默认是public abstract的。

3。内部类可以在其他类中定义,也可以在一个语句块内部定义,也可以在表达式内部匿名定义。

    a。内部类可以使用包含它的类的静态和实例成员变量,即使他们是private的,但是对于局部变量,只有声明为final的才可以被内部类访问。

    b。若声明为static,就不能访问其外部类的非静态成员。

    c。若想在内部类中声明任何static成员,则该内部类必须声明为static类。

    d。非静态的内部类,持有其外部类对象的引用,可以访问其所有成员,而静态内部类不持有其外部类对象的引用,所以只能访问其外部类的静态成员。

 

4。类成员变量有默认值,因为类成员变量在堆中赋初值。而局部变量必须赋值才能使用,否则会出现编译错误。因为局部变量使用的是栈内存,出于效率考虑,虚拟机不会为栈上的变量设置默认值。

 

5。类不能同时声明为final和abstract的,否则会编译错误。

 

6。子类方法只能抛出比父类范围更小的异常(如父类的异常或者其父类异常的子类)。子类方法的可见性不能小于父类。即:子类不能比父类的限制更多,不然在使用父类引用指向子类对象时,可能会发生无法访问或者异常没有被catch的危险。

 

7。wait notify yield sleep

wait:当前线程进入信号量或者锁的待召队列,并且放弃信号量或者锁,只有等到其他线程发出notify通知后,才能进入就绪队列。

notify:当前线程发出通知,通知当前信号量或者锁的待召队列中的某个线程进入就绪队列,但是当前线程并不会放弃信号量或者锁,继续执行。

yield:当前线程停止执行,放弃执行权,进入就绪队列。

sleep:当前线程停止执行指定的时间,但是不会放弃持有的锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值