美文网首页后浪 · 正青春
Java中static关键字如何理解

Java中static关键字如何理解

作者: 乔一丁_2020强化班 | 来源:发表于2020-10-09 15:16 被阅读0次

    访问 static 修饰的字段[1]

    首先,了解过Java编程语言的同学应该都知道,类中的成员变量成员方法如果想要被调用,则必须先实例化这个类(也就是用new关键字创建出一个对象)。
    而如果使用 static 关键字对其进行修饰,就可以在任何时候访问而不需要创建对象,直接使用 类名.字段名 的形式访问(也就是说被 static 修饰的成员变量通过 类名.变量名 的形式访问,被 static 修饰的成员方法通过 类名.方法名 来调用)。

    public class Main {
      public static void main(String[] args){
        System.out.println(Inner.str);//输出:output
      }
    }
    class Inner{
      static String str = "output";
    }
    
    public class Main {
       public static void main(String[] args){
        Inner.print();//输出:output
      }
    }
    class Inner{
      public static void print(){
        System.out.println("output");
      }
    }
    

    注意
    使用 static 关键字同样需要注意其访问修饰符
    通过 对象.字段名 访问和通过 类名.字段名 访问效果相同。

    被 static 修饰的成员变量

    被 static 修饰的成员变量又叫做 静态变量 ,所有访问该变量得到的都是同一个引用[2],所以其实所有访问者得到的都是同一个对象/基本数据类型的数据。

    一般 final 会配合 static 关键字使用,来声明一个常量。

    被 static 修饰的成员方法

    被 static 修饰的成员方法可以在 不实例化对象 的情况下通过 类名.方法名 来调用,但同时要注意,在被 static 修饰的成员方法中是无法使用 this 关键字(如果没学 this 的话就先了解一下吧)来访问非静态变量的,只能访问带有 static 的成员变量(静态变量)。

    静态代码块

    在类中可以用static{}的形式来定义一个代码块[3]

    public class Main{
      static{
        //代码
      }
    }
    

    这个代码块会在类主方法(就是 public static void main(String[] args))之前运行,但只能访问静态成员变量和静态成员方法。
    准确的来说,静态代码块会在类被加载时运行,但这就涉及到 虚拟机 以及 类的加载 等知识,有兴趣可以在学完Java后自行查阅学习

    用途

    1.在需要给实例对象传递同一个对象作为参数时,可以节约构造方法的参数

    以下代码为实现了所有学生对象中都存在一个老师对象,可以省去向每个学生对象构造时传入老师对象

    public class Main{
      public static void main (String[] args){
        Student.teacher = new Teacher("王老师");
      }
    }
    class Teacher{
      String name;
      public Teacher(String name){
        this.name = name;
      }
    }
    class Student{
      static Teacher teacher;
    }
    

    2.共享数值

    public class Main{
      public static void main(String[] args){
        搬砖工人 g1 = new 搬砖工人();
        搬砖工人 g2 = new 搬砖工人();
        搬砖工人 g3 = new 搬砖工人();
        g1.搬砖();
        g2.搬砖();
        g3.搬砖();
        g1.搬砖();
        System.out.println(搬砖工人.搬砖次数);//输出4
      }
    }
    class 搬砖工人{
      static 搬砖次数 = 0;
      public 搬砖(){
      }
    }
    

    3.暂时知道这么多,欢迎评论区讨论其他用法😁



    1. 与对象或类关联的变量,可以简单的理解为类中定义的变量(或常量)、方法。

    2. 引用中储存的是其指向的 对象基本数据类型内存中的地址(不清楚可以了解一下计算机相关知识,推荐一本书:《穿越计算的迷雾》,稍后我会发到强化班1群里面,没发记得提醒我)。

    3. 它用大括号"{ }"将多行代码封装在一起,形成一个独立的代码区。代码块中写的是算法,算法就是进行运算的地方,而类中存放的是

    相关文章

      网友评论

        本文标题:Java中static关键字如何理解

        本文链接:https://www.haomeiwen.com/subject/squlpktx.html