Static

Static详解

静态变量

package OOP02.Demon6;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.Scanner;

public class Student {
    private static  int age; //静态变量,他只有一个,故如果想要很多类去操纵他的时候,就会使用static,多线程会用到。
    private  double score;


    public static void main(String[] args) {
        System.out.println(Student.age);//通过类调用变量
        /*
        System.out.println(age);
        */
        
        //System.out.println(Student.score); 则会报错,无法使用
        
        double ss = new Student().score;//创建一个对象后
        System.out.println(ss);         //可调用
      //===================================================================  
        //在Student s1 = new Student();创建了一个对象后:
        System.out.println(s1.score);
        System.out.println(s1.age);
        //都可以正确实现功能
     //====================================================================
    }
}

总结:没有static,无法直接通过类来调用变量,需要创建一个对象才可以调用。有static则可以通过类直接调用。

静态方法

package OOP02.Demon6;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.Scanner;

public class Student {
  
    public void run()
    {go();}//非静态方法可以调用静态方法
                            //静态方法在这个类创建时就存在了,而非静态方法在这之后生成
    public static void go(){}//静态方法无法调用非静态方法,原因同上。


    public static void main(String[] args) {
        new Student().run();  //非静态,需要创建对象才能使用
        Student.go();         //静态
        go();                 //静态
       
    }
}

总结:与变量同理。静态方法在类创建时就存在了,而非静态方法在之后生成,故:静态方法不能够调用非静态方法,非静态方法可以调用静态方法。

静态代码块

package OOP02.Demon6;

public class Person {

    {
        System.out.println("匿名代码块");
    }//在构造器之前
    //用于赋初始值,因为类一创建,他就产生了
//==================================================================匿名代码块
    static {
        System.out.println("静态代码块");
    }//类一加载就执行,永久只执行一次
//==================================================================静态代码块
    public Person() {
        System.out.println("构造方法");
    }
//==================================================================构造器
    public static void main(String[] args) {
        new Person();   //创建对象
        System.out.println("=======");
        new Person();   //第二次创建对象
    }

    /*
    静态代码块
    匿名代码块
    构造方法
    =======
    匿名代码块
    构造方法

     */
}

总结:

加载顺序为静态代码块 > 匿名代码块 > 构造器。

静态代码块在类一加载就加载了,永久只执行一次,故第二次创建对象时,没有打印出"静态代码块"

匿名代码块在构造器之前,故可以用来赋初始值

final

当一个类被final定义,就无法被其他类继承,称为final阉割法

静态导入包

在导入包时加入static修饰符,可以在类生成时一并加载static,在下面的阴影就不需要 包名.方法 了,直接使用 方法 就行。

posted @ 2020-11-08 17:55  SshadowHeart  阅读(72)  评论(0)    收藏  举报