java中的static关键字几个注意点

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的static关键字几个注意点相关的知识,希望对你有一定的参考价值。

文章目录

java中的static关键字

首先,static是java的关键字之一。在Java类里只能包含成员变量、方法、构造器、初始化块、内部类(包括接口、枚举)5种成员,而static可以修饰成员变量、方法、初始化块、内部类(包括接口、枚举),也就是除了构造器都可以修饰。

注意:以static修饰的成员就是类成员。类成员属于整个类,而不属于单个对象。这句话涵盖了static的整个核心思想!

对static关键字而言,有一条非常重要的规则:

static修饰的类成员(包括成员变量、方法、初始化块、内部类和内部枚举)不能访问实例成员(包括成员变量、方法、初始化块、内部类和内部枚举)。因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例成员将会引起大量错误。

static修饰的类可以被继承

如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,有的地方也称为静态内部类

package com.yyl.statictest;

public class StaticTest 
    static class StaticInnerClass
        
    


class OuterClass extends StaticTest.StaticInnerClass
    

static关键字不可修饰外部类

static关键字的作用是把类的成员变成类相关,而不是实例相关,即static修饰的成员属于整个类,而不属于单个对象。外部类的上一级程序单元是包,所以不可使用static修饰;而内部类的上一级程序单元是外部类,使用static修饰可以将内部类变成外部类相关,而不是外部类实例相关。因此static关键字不可修饰外部类,但可修饰内部类。

静态内部类规则:

静态内部类需满足如下规则:

  1. 静态内部类可以包含静态成员,也可以包含非静态成员;

  2. 静态内部类不能访问外部类的实例成员,只能访问它的静态成员;

  3. 外部类的所有方法、初始化块都能访问其内部定义的静态内部类;

  4. 在外部类的外部,也可以实例化静态内部类,语法如下:

    外部类.内部类 变量名 = new 外部类.内部类构造方法();
    

测试代码如下所示:

package com.yyl.statictest;

public class StaticTest 
    private String outer;
    private static String visit="visit";

    static class StaticInnerClass
        private String name;
        private int age;

        public StaticInnerClass(String name, int age) 
            this.name = name;
            this.age = age;
        

        public void visitOuter()
            System.out.println(StaticTest.visit);
        

    



class OuterClass extends StaticTest.StaticInnerClass

    public OuterClass(String name, int age) 
        super(name, age);
    


class MainTest 
    public static void main(String[] args) 
        StaticTest.StaticInnerClass staticInnerClass = new StaticTest.StaticInnerClass("yyl",12);
        staticInnerClass.visitOuter();
    

static和final有什么区别?

static和final区别

static关键字可以修饰成员变量、成员方法、初始化块、内部类,被static修饰的成员是类的成员,它属于类、不属于单个对象。以下是static修饰这4种成员时表现出的特征:

  • 类变量:被static修饰的成员变量叫类变量(静态变量)。类变量属于类,它随类的信息存储在方法区,并不随对象存储在堆中,类变量可以通过类名来访问,也可以通过对象名来访问,但建议通过类名访问它。

  • 类方法:被static修饰的成员方法叫类方法(静态方法)。类方法属于类,可以通过类名访问,也可以通过对象名访问,建议通过类名访问它。

  • 静态块:被static修饰的初始化块叫静态初始化块。静态块属于类,它在类加载的时候被隐式调用一次,之后便不会被调用了。

  • 静态内部类:被static修饰的内部类叫静态内部类。静态内部类可以包含静态成员,也可以包含非静态成员。静态内部类不能访问外部类的实例成员,只能访问外部类的静态成员。外部类的所有方法、初始化块都能访问其内部定义的静态内部类。

final关键字可以修饰类、方法、变量,以下是final修饰这3种目标时表现出的特征:

  • final类:final关键字修饰的类不可以被继承。

  • final方法:final关键字修饰的方法不可以被重写。

  • final变量:final关键字修饰的变量,一旦获得了初始值,就不可以被修改。

final修饰的变量初始化

变量分为成员变量、局部变量。

final修饰成员变量:

  • 类变量:可以在声明变量时指定初始值,也可以在静态初始化块中指定初始值;

  • 实例变量:可以在声明变量时指定初始值,也可以在初始化块或构造方法中指定初始值;

final修饰局部变量:

  • 可以在声明变量时指定初始值,也可以在后面的代码中指定初始值。

注意:被 final 修饰的任何形式的变量,一旦获得了初始值,就不可以被修改!

以上是关于java中的static关键字几个注意点的主要内容,如果未能解决你的问题,请参考以下文章

static 和 final 关键字 对实例变量赋初始值的影响

Java static 关键字

java中构造方法和this,static关键字

干货——详解Java中的关键字

Java中的final关键字

java中的成员变量和局部变量的区别