关键字

static关键字有那些作用?

static关键字主要有两种作用:第一,为特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类关联在一起,而不是对象。
主要有4种使用情况:

  1. static成员变量
    Java语言中没有全局的概念,但可以通过static关键字来达到全局的效果。
  2. static成员方法
    static方法中不能使用this和super关键字,不能调用非static方法,也不能访问非static类型的变量,只能访问所属类的静态变量和方法。
    static一个很重要的用途是实现单例模式。单例模式的特点是该类只能有一根实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的static方法,只能通过该类提供的按方法来获取类的对象。
class Singleton {
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  1. static代码块
    JVM在加载类时汇之星static代码块。
  2. static内部类

使用switch时有哪些注意事项?

在使用switch(expr)时,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数类型可以是基本类型int或是对应的包装类Integer。
由于byte,short,char类型的值都能被隐式地转换为int类型,因此这些类型以及它们对应的包装类都可以作为switch的表达式。但是 long,float,double不能隐式转换,故不能作为switch的表达式。
case语句之后可以是直接的常量数值,也可以是一个常量计算式,还可以是final型的变量,但不能是变量或者是带有变量的表达式,例如i*2等,当然更不能是浮点型数。
从Java 7开始,switch开始支持String类型,本质是调用hashCode()方法,得到一个int型的hash值。

volatile有什么作用?

1. 可见性:

Java会把经常访问的变量缓存起来,但是在多线程场景中,变量的值可能因为别的线程而改变了,而该缓存的值不会相应改变,会造成读取的值和实际的变量不一致。被volatile类型定义的变量,系统每次调用都是直接从对应的内存中提取,不会利用缓存,所有线程在任何时候所看到的的变量的值都是相同的。

2.添加内存屏障,阻止重排

由于volatile不能保证操作的原子性,一般情况下不能代替sychronized。此外,使用volatile会阻止编译器对代码的优化,因此会降低程序的执行效率。

strictfp有什么作用?

使用strictfp声明的类、接口或者方法,在声明的范围内,Java编译器以及运行环境会完全依照IEEE二进制浮点数运算标准来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的

你可能感兴趣的:(关键字)