static关键字
-
作用: ① 为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关
② 希望某个方法或属性与类而不是对象关联在一起,即在不创建对象的情况下可以通过类来直接调用方法或使用类的属性.
-
static在java中有四种使用情况:
①static成员变量:全局静态变量,随着类的加载而加载,所有的实例都指向同一个内存地址.
②static成员方法:类的方法,不需要创建对象就可以通过类名直接调用 – 单例模式
③static代码块:静态代码块,随着类的加载而加载,注意:static代码块只会被执行一次.
④static内部类:静态内部类,可以不依赖于外部类实例对象而被实例化.静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法(包括私有类型)
volatile关键字 – 防止编译器做优化
volatile是一个类型修饰符(Type Specifier),用来修饰被不同线程访问和修改的变量.
对于不被volatile修饰的成员变量,编译器有可能会对这个变量进行优化,在读取数据的时候可能会从缓存里去读取,如果其他线程已经修改了这个数据,则无法读取到修改后的数据.
使用了volatile关键字修饰成员变量后,当系统每次使用它的时候,都是直接从对应的内存中提取,而不会利用缓存.
int和Integer的区别是什么?
①int是java语言提供的8中基本的原始数据类型之一,当作为对象的属性时,默认值为0。Integer是Java为int提供的包装类,默认值为null.所以,int无法区分为赋值为0与未赋值的情况,而Integer可以。
② int是基本数据类型,在使用的时候是值传递;Integer是引用传递
③ int只能用来做基本的运算,而Integer里封装了很多方法,以供使用
④当需要往容器(比如List)里存放整数时,无法直接存放int,因为List里面放的都是对象.这种情况下只能使用Integer