1 static

1.1 概念

Java中用于润饰常量,变量,办法的关键字,称为动态常量,动态变量,静态方法,它们都存在与办法区。

1.2 特点

① 这些变量和办法都有独立的生命周期,只须要加载一次,
② 内存中的动态变量能够被其余类类共享,其余类调用时无需实例化。
③ 动态只能调用动态,非动态能够随便调用。
④ static不能和this和super共用,因为有static的时候还没有对象。

1.3 分类

1.3.1 动态常量

在Java语言中应用final static润饰的成员变量就是一个动态常量,动态常量也就是通常意义下的共享常量,一旦赋值实现就不能够进行更改了。

1.3.2 动态变量

在Java语言中应用static润饰的成员变量就是动态变量,能够被不同的类操作,属于类且存储与办法区中,只有一份通过类名进行拜访。

1.3.3 静态方法

想要应用类中成员办法,须要先将这个类进行实例化,然而有些时候无奈或者不想创立类的对象时,咱们还要调 用类中的办法供咱们实现业务逻辑代码,此时咱们就能够通过静态方法--->调用静态方法,无需创立类的对象

1.3.4 动态代码块

在类中成员办法之外,应用static润饰的代码区域能够称之为动态代码块,定义了一个动态代码块,能够实现类的初始化操作 属于类的,在类被加载期间主动执行。

1.4 案例

package com.mtingcat.javabasis.object.sc;import java.util.Date;/** * 这个类用来测试动态成员 * @author MTing * */public class student {    final static int A = 123; //动态常量    static String Hello = "Hello";  //动态变量    static {        //动态代码块        @SuppressWarnings("unused")        String Today = "Today";        System.out.println(new Date());    }    public static void main(String[] args) {        @SuppressWarnings("unused")        String sex = Person.sex1;  //动态变量能够不同创立实例对象就能够调用        Hello = "Hello===";        //动态变量的值能够更改        System.out.println(A+","+Hello);        Person p = new Person("Cat", 22);            }}class Person{    String name;    int age;    static String sex1 = "男";    static String sex2 = "女";    public Person(String name,int age){        this.name = name;        this.age = age;    }    public void study(){        System.out.println("not static");    }    public static void sleep(){        System.out.println("staic sleep()=====");    }}

1.5 静态方法内存图

1.6 拓展

1.6.1 动态代码块,结构代码块,部分代码块概念

① 动态代码块:在类加载的时候就被加载,只能被加载一次,个别用于我的项目的初始化。
② 结构代码块:在调用构造方法前会主动调用,每次创建对象的时候会被调用。
③ 部分代码块:办法里的代码块,办法被调用的时候才会被执行。

1.6.1.2 案例

package com.mtingcat.javabasis.object.sc;public class Test {    public static void main(String[] args) {        Bird bird = new Bird();        bird.eat();    }}class Bird{    int id;    String name;     //动态代码块    //1,在类第一次加载时就加载到内存中并始终驻存,    //并全局共享,直到类隐没动态资源才隐没    //2,并且动态资源只被加载一次    static{        System.out.println("动态代码块");    }        //结构代码块    public Bird(){        System.out.println("无参结构");    }    public Bird(int id){        this.id = id;        System.out.println("这是有参构造方法");    }    public Bird(int id,String name){        this.id = id;        this.name = name;        System.out.println("这是全参构造方法");    }    //部分代码块    public void eat(){        System.out.println("这是部分代码块");    }}

1.6.2 final

final即最终的,能够润饰类,办法和变量,java呈现了继承后,子类能够更改父类的性能,当父类性能不许子类扭转时能够利用final关键字润饰父类。

1.6.2.1 特点

① 被final润饰的类,不能被继承
② 被final润饰的办法,不能被重写
③ 被final润饰的变量是个常量,值不能被更改
④ 常量的定义模式:final 数据类型 常量名 = 值

1.6.2.2 案例

package com.mtingcat.javabasis.object.sc;public class test02 {    public static void main(String[] args) {        Chevrolet c = new Chevrolet();        c.go();        System.out.println(c.name);        c.go00();    }    }class Car{    //final class A{}//被final润饰的类不能被继承    final String name = "大黄蜂";    public final void go(){        System.out.println("gogogo");    }}class Chevrolet extends Car{    //被final润饰的办法不能被重写    /*public void go(){            }*/    public void go00(){    /*    super.name="擎天柱";*///被final的变量,不能从新被赋值        System.out.println(super.name);    }}