访问修饰符和类型限定修饰符

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();
    }
}

猜你喜欢

转载自www.cnblogs.com/nicoleljc/p/10023988.html