关键字总结
不可变对象
final
修饰的类不能被继承,修饰的方法不能被重写,private修饰的方法默认也会加final修饰,修饰基本数据类型的变量不能被重新赋值,修饰引用数据类型不能,在变量初始化之后不能指向其他引用
Collections.unmodifiable
返回的集合不能被重新赋值,并且集合内容也不能被修改如Collections.unmodifiableMap(map),如果此时向新map中put会直接抛异常,而final修饰的引用数据类型,虽然变量指向的对象不能被修改,但是对象的内容却可以被修改
static
静态代码块
- 作用:一般用以给静态变量赋值
- 执行顺序静态代码块->构造代码块->构造方法
- 静态代码块只在第一次new执行一次,之后不再执行,用以初始化类
构造代码块和构造函数的区别
非静态代码块与构造函数的区别是: 非静态代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。
非静态代码块的作用
限定变量的作用范围
判断字符串内容是不是相等、和判断Integer值是否相等要用equels
- 在没有改写equels方法的情况下,equels判断和==具有相同的作用,都是判断两个对象的地址是不是相同
- String类型和Integer类型重写了equels方法,所以可以直接用equels判断对象内容是否相等
- 判断对象是不是某个类型用object isinstansof object,注意左右都必须为对象;基本数据类型可以转换为object对象
枚举类型Demo
public class EnumTest01 {
//使用枚举存放四季
public enum Season{
Spring,Summer,Autumn,Winter
}
public static void main(String[] args) {
//调用枚举
System.out.println(Season.Summer);
}
}
生成随机数的两种方法
```
Random r = new Random();
int i = r.nextInt(100)// 生成0-100的随机数
#```
int i = (int)(Math.random()*100)//生成0-100随机数
前者需要导包,后者不需要