Java 修饰符是用来修饰类、变量、及方法的访问限定或类型限定,public,protected,private,default,是访问限定修饰符,static,final,abstract,transient,volatile为类型限定修饰符。
注意:protected修饰后,不同包中的非子类不可访问
类型限定:顾名思义就是用来限定变量的类型(注意不是数据类型),被其修饰的变量有如下特性
Static关键字用法
- 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
- static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
- 既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
- 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化
- static是不允许用来修饰局部变量。修饰方法里的变量
- static修饰类的时候只能是内部类
- 执行顺序:父类静态代码块--子类静态代码块--父类构造方法--子类构造器
static修饰类的时候只能是内部类
被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类(见如下代码):
需要注意的是当一个内部类没有使用static修饰的时候,是不能直接使用内部类创建对象,须要先使用外部类对象点new内部类对象及(外部类对象.new 内部类())
public class OuterClass { public static class InnerClass{ InnerClass(){ System.out.println("============= 我是一个内部类'InnerClass' ============="); } } } public class TestStaticClass { public static void main(String[] args) { // 不需要new一个InnerClass new OuterClass.InnerClass(); } }
如果没有用static修饰InterClass,则只能按如下方式调用:
package inner_class; public class OuterClass { public class InnerClass{ InnerClass(){ System.out.println("============= 我是一个内部类'InnerClass' ============="); } } } public class TestStaticClass { public static void main(String[] args) { // OutClass需要先生成一个实例,然后再new一个InnerClass(); OuterClass oc = new OuterClass(); oc.new InnerClass(); } }