美文网首页Java干货分享
不是我打击你,你可能真的不会用Java中的static

不是我打击你,你可能真的不会用Java中的static

作者: 淡定_蜗牛 | 来源:发表于2019-09-25 10:30 被阅读0次

    静态可以是:

    1. 静态变量
    2. 静态方法
    3. 静态代码块

    我们先来看一下静态变量和静态方法。

    什么是Java中的静态变量?

    Java中的静态变量是变量,属于类,并且在执行开始时仅初始化一次。

    • 它是属于类的变量而不是对象(实例)
    • 静态变量仅在执行开始时初始化一次。在初始化任何实例变量之前,将首先初始化这些变量
    • 要由类的所有实例共享的单个副本
    • 静态变量可以由类名直接访问,不需要任何对象

    句法:

    <class-name>.<variable-name>
    
    

    什么是Java中的静态方法?

    Java中的静态方法是属于类而不是对象的方法。静态方法只能访问静态数据。

    • 它是属于类的方法而不是对象(实例)
    • 静态方法只能访问静态数据。它无法访问非静态数据(实例变量)
    • 静态方法只能调用其他静态方法,不能从中调用非静态方法。
    • 静态方法可以通过类名直接访问,不需要任何对象
    • 无论如何,静态方法不能引用“this”或“super”关键字

    句法:

    <class-name>.<method-name>
    
    

    注意: main方法是静态的,因为在任何实例化发生之前,应用程序必须可以访问它。

    让我们通过做一些练习来了解静态关键词的细微差别!

    示例:如何调用静态变量和方法

    步骤1)

    将以下代码复制到编辑器中

    public class Demo {
        public static void main(String args[]) {
            Student s1 = new Student();
            s1.showData();
            Student s2 = new Student();
            s2.showData();
            //Student.b++;
            //s1.showData();
        }
    }
    
    class Student {
        int a; //initialized to zero
        static int b; //initialized to zero only when class is loaded not for each object created.
    
        Student() {
            //Constructor incrementing static variable b
            b++;
        }
    
        public void showData() {
            System.out.println("Value of a = " + a);
            System.out.println("Value of b = " + b);
        }
        //public static void increment(){
        //  a++;
        //}
    
    }
    
    

    步骤2)保存并编译代码。运行代码为java Demo

    步骤3)

    预期输出如下所示

    image

    下图显示了如何创建引用变量和对象,以及不同实例访问静态变量。

    image

    步骤4)可以使用语法ClassName.Variable_Name从类外部访问静态变量。取消注释第7和8行。保存,编译和运行。观察输出。

    Value of a = 0
    Value of b = 1
    Value of a = 0
    Value of b = 2
    Value of a = 0
    Value of b = 3
    
    

    步骤5)取消注释第25,26和27行。保存,编译和运行。

         error: non-static variable a cannot be referenced from a static context a++; 
    
    

    第6步)错误=?这是因为无法从java静态类方法“ increment ” 访问实例变量“ a ”。

    Java静态块

    静态块是Java类中的语句块,它将在类首次加载到JVM时执行

    class Test{
        static {
            //Code goes here
        }
    }
    
    
    

    一个静态块有助于初始化静态数据成员,就像构造有助于初始化实例成员

    以下程序是java静态块的示例。

    示例:如何访问静态块

    
    public class Demo {
        static int a;
        static int b;
        static {
            a = 10;
            b = 20;
        }
        public static void main(String args[]) {
    
            System.out.println("Value of a = " + a);
            System.out.println("Value of b = " + b);
    
        }
    }
    
    

    您将获得该程序的以下输出。

    Value of a = 10
    Value of b = 20
    
    

    相关文章

      网友评论

        本文标题:不是我打击你,你可能真的不会用Java中的static

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