• 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{
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    static关键字不可修饰外部类

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

    image-20220815103158365

    静态内部类规则:

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

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

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

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

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

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

    测试代码如下所示:

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    image-20220815103651600

    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 修饰的任何形式的变量,一旦获得了初始值,就不可以被修改!

  • 相关阅读:
    【GAN】数据增强基础知识
    【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)
    鸢尾花分类模型demo-恢复、部署、保存
    【MySQL】事务四大特性ACID、并发事务问题、事务隔离级别
    mysql redis的区别
    Python跳盆算法,来自物质结构的优化算法
    Python:魔术方法(__getitem__、__len__等包含双下划线构成的方法)的简介、使用案例之详细攻略
    flink实战--大状态任务调优指南
    蓝牙核心规范(V5.4)12.4-深入详解之广播编码选择
    [Flask]Pycharm+Flask零基础项目搭建入门
  • 原文地址:https://blog.csdn.net/weixin_45525272/article/details/126342547