java学习笔记12(final ,static修饰符)

时间:2021-09-08 11:47:47

final:

  意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义,

用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被限定为最终数据成员。最终数据成员可以在声明时进行初始化,也可以通过构造方法赋值,但不能在程序的其他部分赋值,他的值在整个执行过程中时不能改变的。

 

  用final修饰的类:final修饰的类,不能被其他类继承,但是可以继承其他类

  用final修饰的方法:不可以被子类重写;

  用final修饰成员变量时:1)final修饰的变量称为常量,只能被赋值一次,

 用final修饰符说明常量时,需要注意:1)需要说明常量的数据类型并指出敞亮的具体值。

                   2)若一个类有多个对象,而某个数据成员是常量,最好将此常量声明为static,即用static final两个修饰符来修饰他,这样做可以节省空间。

                一次赋值终身不变,

                如果用final修饰引用数据量类型时,那么保存变量的内存地址终身不变。

              2)成员变量可以直接赋值,也可以通过构造方法赋值,所以用final修饰的成员变量可以选择一种赋值,但是一定要保证只能赋值一次。

public class Person {
    //直接赋值(实际中建议这样方式):
    //final int age = 18;
    //构造方法赋值:
    final int age;
    public Person(int age){
        this.age = age;
    }
}

static:

  意思是静态的

  意义举例:

    一个学校里有一群学生对象,他们都有不同的姓名和年龄,但是他们的学校名都是相同的,

    创建学生对象的时候,成员变量中的学校名在每次新建对象的时候都会存入堆内存,但是每次存的数据都是相同的,造成了内存的浪费

    于是想到,能否将学校名提出来,放到某个地方,让多个对象共享,节省内存

    于是,出现了static关键字:

      静态多了一种调用方式

    被静态修饰的成员,可以被类的名字直接调用,例如:

public class Student {
    String name;
     static String school;
}
public class Test1 {
    public static void main(String[] args) {
        Student s=new Student();
        s.name="张三";//创建对象调用变量赋值
        Student.school="AAA";//通过类名直接赋值
    }
}

  静态的注意事项:1)静态不能调用非静态,原因:声明周期,静态先于非静态存在于内存中,无法调用不存在的;

          2)非静态可以调用静态;

          就好比现代人可以通过历史书了解古人,古人不能了解现代人一样,先后顺序不同,静态先于非静态存在

          3)静态修饰符应用场景:

              本身是一个成员修饰符,可以修饰成员变量,可以修饰成员方法

              多个事物之间是否存在共性数据?这里就可以将这个共性数据定义成静态

              只要方法没有调用过非静态成员,则将其定义为静态

在开发中,有时候需要定义静态常量,并且常量名要求全大写,空格用_代替

固定格式:public static final String THIS_NAME = "XXXX"