1.有符号右移“》”,如果是正数,高位处补0,负数补1
无符号右移">>>",不论正负数都补0
2.int x, y;
while(x=y){}
编译时不通过,java不会将int值转为布尔值
3.|,&为按位操作,||,&&叫逻辑判断
4.布尔型变量不允许进行任何类型的转换
5.char,byte,short,ingt,long不能进行 ! && || 的逻辑判断,不能强转为boolean型
float,double不能进行按位操作,如 ^,~,&,|,>>,<<
6.java中没有goto语句,但是有标签操作(常搭配break,continue使用)
使用标签的理由是有循环嵌套存在,想直接从多层嵌套中跳出,格式为 break 标签名;或continue 标签名 ;前者跳出后不再执行嵌套的循环,后者再次跳入嵌套的循环执行
7.java没有全局变量,用static 方法类似这个功能
8可以在类中定义finalize()方法,当垃圾回收器准备释放对象占用的内存空间就会先调用finalize()方法,在finalize()做一些清理内存,释放内存的工作,如close等。但是java对象可能不被垃圾回收,而且回收并不等同于c++中的析构
垃圾回收的特点:
(1)对象可能不被垃圾回收
(2)垃圾回收并不等于“析构”
(3)垃圾回收只与内存有关(也就是说使用垃圾回收器的唯一原因是为了回收程序不再使用的内存)
记住,无论是“垃圾回收”还是“终结”都不保证一定会发生,如果JVM并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收回复内存的
如何找到存活 的对象
垃圾回收机制
(1)停止---复制,清理堆中空间是很多的碎片(活着的对象不连续)
(2)标记---清扫,清理堆中空间只有少数的死对象,一大片都是活着时
9.
在类的内部,变量的定义先后顺序决定了初始化的顺序,即使前两定义散步于方法定义之间,仍就会在任何方法(包括构造器)呗调用之前得到初始化
int i; person p = new person 都是类中定义的变量,尤其是p
10.static 关键字不能应用于局部变量,因为static是修饰类中内容的
11.类中加载顺序
静态的函数及变量(只加载一次),成员变量(先赋默认的值,然后再初始化动作),构造器
构造器实际是静态方法,只不过没有显式的使用static关键字
12.构造代码块在匿名内部类做初始化时很常用,构造代码块在构造器之前调用
13.可变参数列表
public void getName(String...names){
for(String name : names){
syso(name);
}
}
getName(“wangkai”,“cange”,"北山")
可变参数列表可以传入0个参数
getName();
14.枚举
枚举 JavaSE5才有
public enum Spiciness{
NOT,MILD,MEDIUM,HOT,FLAMING
}
创建了一个名为SPICINESS的枚举类型,具有五个值,惯例权威大写字母,因为它们是常量
调用:Spiciness.NOT
创建枚举时,会自动添加一些方法,toString(),ordinal()方法用来表示某个特定enum常量的声明顺序,以及static value()方法用来按照enum常量的声明顺序,产生由这些常量值构成的数组(获取常量值)
调用方法,Spiciness.value(),此时取出所有的枚举值(静态的)
s.ordinal(),获取对应枚举值在枚举类表中的序号,从0开始
枚举有一个特别适用的用途,用在switch语句中,客服了switch语句以前只能判断char,int,byte,short类型的限制
15.每个编译文件只能有一个public修饰的类,否则编译失败,所以如果在该编译单元中还有额外的类的话,那么在包之外的世界是无法看到这些类的,这是因为他们不是public类,