乐趣区

关于static:一分钟学会Java中的finalstatic关键词

final 关键词

概念:final 的意思为最终,不可变。final 是个修饰符,它能够用来润饰类,类的成员,以及局部变量。不能润饰构造方法。

特点:

1.final 润饰的类不能够被继承,但能够继承别的类。

class Yy {}
final class Fu extends Yy{} // 能够继承 Yy 类
class Zi extends Fu{} // 不能继承 Fu 类 

2.final 润饰的办法不能够被子类重写, 但父类中没有被 final 润饰办法,子类重写后能够加 final。

class Fu {    
    // final 润饰的办法,不能够被笼罩,但能够继承应用
    public final void method1(){}
    public void method2(){}
}
class Zi extends Fu {
    // 重写 method2 办法
    public final void method2(){}
}// 退出 Java 开发交换君样:756584822 一起吹水聊天 

3 final 润饰的变量称为常量,这些变量只能赋值一次。而且一生不变。

final int i = 20;
i = 30; // 赋值报错,final 润饰的变量只能赋值一次 

4. 援用类型的变量值为对象地址值,地址值不能更改,然而地址内的对象属性值能够批改。

final Person p = new Person();
Person p2 = new Person();
p = p2; //final 润饰的变量 p,所记录的地址值不能扭转
p.name = "小明";// 能够更改 p 对象中 name 属性值 

5. 润饰成员变量,须要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均须要 ` 为其赋值。)

class Demo {
    // 间接赋值
    final int m = 100;
    
    //final 润饰的成员变量,须要在创建对象前赋值,否则报错。final int n; 
    public Demo(){
        // 能够在创建对象时所调用的构造方法中,为变量 n 赋值
        n = 2016;
    }
}

static 关键词

概念:static 是动态修饰符,个别用来润饰类中的成员。不创建对象,就能够调用办法。

特点:

1. 被 static 润饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在拜访或批改 static 润饰的成员变量时,其中一个对象将 static 成员变量值进行了批改,其余对象中的 static 成员变量值跟着扭转,即多个对象共享同一个 static 成员变量)

class Demo {public static int num = 100;}

class Test {public static void main(String[] args) {Demo d1 = new Demo();
       Demo d2 = new Demo();
       d1.num = 200;
       System.out.println(d1.num); // 后果为 200
       System.out.println(d2.num); // 后果为 200
   }
}

2. 被 static 润饰的成员能够并且倡议通过类名间接拜访。

 拜访动态成员的格局:
 类名. 动态成员变量名
类名. 动态成员办法名 (参数)
对象名. 动态成员变量名         ------ 不倡议应用该形式,会呈现正告
对象名. 动态成员办法名 (参数)     ------ 不倡议应用该形式,会呈现正告 
class Demo {
    // 动态成员变量
    public static int num = 100;
    // 静态方法
    public static void method(){System.out.println("静态方法");
    }
}
class Test {public static void main(String[] args) {System.out.println(Demo.num);
        Demo.method();}
}

注意事项

  1. 动态内容是优先于对象存在,只能拜访动态,不能应用 this/super。动态润饰的内容存于动态区。
class Demo {
    // 成员变量
    public int num = 100;
    // 静态方法
    public static void method(){
        //this.num; 不能应用 this/super。System.out.println(this.num);
    }// 退出 Java 开发交换君样:756584822 一起吹水聊天
}
  1. 同一个类中,动态成员只能拜访动态成员
class Demo {
    // 成员变量
    public int num = 100;
    // 动态成员变量
    public static int count = 200;
    // 静态方法
    public static void method(){//System.out.println(num); 静态方法中,只能拜访动态成员变量或动态成员办法
        System.out.println(count);
    }
}

3.main 办法为静态方法仅仅为程序执行入口,它不属于任何一个对象,能够定义在任意类中。

4. 多态调用办法中,编译看 = 右边,父类有,编译胜利,父类没有,编译失败

  • 运行,静态方法,运行父类中的静态方法,
  • 运行,非静态方法,运行子类的重写办法
  • 成员变量,编译运行全是父类

定义动态常量

概念 :开发中,咱们想在类中定义一个动态常量,通常应用 public static final 润饰的变量来实现定义。此时变量名全副大写,多个单词应用下划线连贯。

定义格局:public static final 数据类型 变量名 = 值;

public class School {
    public static final String SCHOOL_NAME = "北京大学";
    public static void method(){System.out.println("一个静态方法");
    }// 退出 Java 开发交换君样:756584822 一起吹水聊天
}

当咱们想应用类的动态成员时,不须要创建对象,间接应用类名来拜访即可。

System.out.println(Company.SCHOOL_NAME); 
Company.method(); // 调用一个静态方法 

留神:

接口中的每个成员变量都默认应用 public static final 润饰。

所有接口中的成员变量已是动态常量,因为接口没有构造方法,所以必须显示赋值。能够间接用接口名拜访。

interface Inter {public static final int COUNT = 100;}

拜访接口的成员变量:

Inter.COUNT

退出移动版