首页 > 代码库 > Java修饰符/关键字

Java修饰符/关键字

修饰符分类:

  • 权限修饰符:public、protected、default、private
  • 其他修饰符:abstract、static、final、transient、volatile、native、synchronized、strictfp

public:

  • public的使用对象:public可以修饰 类、抽象类、接口,还可以修饰 方法和变量
  • public修饰的对象可以被所以其他类访问

protected:

  • protected的使用对象:protected可以修饰 方法和变量,不能修饰类(外部类) ,内部类较特殊,后面单独研究。
  • protected修饰的对象可以被 同一包内的类或它的子类所访问

default:

  • default的使用对象:default可以修饰 类、抽象类、接口,还可以修饰 方法和变量
  • default修饰的对象可以被 同一包下的类访问

private:

  • private的使用对象:private可以修饰 方法和变量,不能修饰类(外部类)
  • private修饰的对象只在该类内部可见,外部不可访问,包括他的子类也不能访问、不能覆盖

换个角度看:

  • 类、抽象类、接口可以被public、default修饰
  • 方法和变量可以被public、protected、default、private所有权限修饰符修饰

Q&A:

  • Q:为什么类不能被private、protected修饰?
  • A:private好理解,private的类完全孤立不能为外界所访问,毫无用处;就类而言如果被protected修饰时等价于default,其他的包的类根本无法引用它而产生子类

abstract:

  • abstract用于修饰 类、接口或方法
  • abstract修饰的类即抽象类不能初始化,含未实现即abstract的方法
  • 所有的接口默认是abstract的,当然也可以显示用abstract修饰

final:

  • final用于修饰 类、变量或方法
  • final类不能被继承、final变量不能被修改、final方法不能被覆盖
  • final变量必须初始化,可以在声明时或构造函数里面赋值
  • final变量如果是引用变量,变量的value可变,但不能给引用重新赋值(新对象)
  • final变量如果同时被static修饰,那必须在声明时初始化,不能放到构造函数
  • 构造函数里面调用的方法最好是final的
  • Oracle Tutorial: http://docs.oracle.com/javase/tutorial/java/IandI/final.html
class FinalTest{    private final List foo = new ArrayList();//    public FinalTest()    {        //foo = new ArrayList(); 如果声明时没有初始化,可以在这里初始化    }        public void updateFoo(){        foo.add( new String() );//可以改变被应用对象的值        //foo = new ArrayList(); //编译错误,不能赋予新的对象    }}

static:

  • static可修饰 变量、方法块,不能修饰外部类
  • static的变量或方法属于具体的类,而不是某个实例,所有实例共享该变量或方法,实例可以改变static变量,也可以通过类名直接调用
  • static的方法不能直接访问 实例变量或方法,static方法里面也不能使用this

 

transient:

native:

volatile:

strictfp:

synchronized:

Java修饰符/关键字