> 文档中心 > [java] final与static

[java] final与static


我宁愿写bug⚠️,也不愿什么都不做 ❗️

💚哈喽!大家好!💚

❤️我是 一看就会,一写就废浩浩🔍❤️

💙让我带你编程带你飞,带你飞进垃圾堆!💙

💜 如果对你有所帮助,请给我点个赞👍!💜

键盘敲烂💥,工资过万💰


📌

文章目录

 1. final 🙉

  1. final 修饰属性 🙈

  2. final 修饰方法 🙈

  3. final 修饰类 🙈

 2. static 🙉

  1. 静态成员变量 🙈

  2. 静态方法 🙈

  3. 静态代码块 🙈

  4. static import 机制 🙈

🍬附赠美图


1. final

  • 在 java 中 final 关键字有最终的,不可修改的含义
  • final 用于声明属性、方法和类
    • 属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能进行修改
    • 方法:定义必须有实现代码,并且子类里不可被覆盖
    • 类:不能被定义为抽象类或者是接口,不可被继承

1. final 修饰属性

  • 如果某个变量被final 修饰,那么该变量就成为常量,不能被修改,一般语法;
[访问权限修饰符] final 数据类型 常量名 =;
  • 常量在声明时必须初始化,声明之后不能对其二次赋值,其后任何试图对其常量进行赋值的语句都将报错。
  • 赋值的两种方式:构造方法赋值和声明时等号赋值
//final与static一起使用,声明方式有2种   1.在声明时同时赋值:private static final int age=20;2.在声明时不赋值,在静态代码块赋值    private static final int age;static{    age=21;}//final不与static一起使用,声明方式有2种:1.在声明时同时赋值:private final int age=20;2.在声明时不赋值,在初始化代码块或者构造方法赋值    private static final int age;{    age=21;}或者:public TestFinal() {    age=21;}
  • 总的原则:保证创建每一个对象的时候,final 属性的值都是确定的
  • 在方法参数前面加final关键字,为了防止数据在方法体中被修改。
public void  m1(final  int a){    a=3;}

2. final 修饰方法

  • 如果将某个成员方法修饰为 final 。则意味着该方法不能被子类覆盖,这就和抽象方法必须由子类实现的规则相互矛盾,因此,final 和 abstract 不能同时修饰一个方法
  • final 方法的一般声明格式:
[访问权限修饰符] final 返回值类型 方法名 (参数列表){    ...}

3. final 修饰类

  • 如果将某个类修饰为 final ,则说明该类无法被继承,一般语法:
[访问权限] final class 类名{    成员列表}

2. static

  • static 被称为静态,可以用来修饰类的属性或者方法
  • 如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用 static 修饰,被 static 修饰的属性被称为静态属性,被 static 修饰的方法被称为静态方法
  • static 属性可以使用对象调用,也可以直接用类名调用。
  • 静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。

1. 静态成员变量

  • 被 static 修饰的成员变量被称为静态成员变量或者静态属性
  • 静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个

2. 静态方法

  • 被static修饰的方法称为静态方法,不与某个特定的对象关联

  • 调用方式:

    1. 对象名.方法名(实参列表);

    2. 类名.方法名(实参列表);

1~2 总结

  • 本类的方法之间的调用
  • 静态方法可以被任何方法(静态方法和非静态方法)直接调用;
  • 非静态方法可以被非静态方法直接调用;
  • 非静态方法不能被静态方法直接调用,需要创建对象,用对象名调用。
  • 不用类方法之间的调用
  • 调用静态方法,使用类名直接调用 ;
  • 非静态方法不能直接调用,需要创建对象,用对象名调用。

3. 静态代码块

  • static 代码块
    • 随着类的加载而加载,只执行一次
    • 用于给类进行初始化
  • 实例化代码块
    • 实例化代码块给对象初始化,在构造方法之前执行
public class A {    static { System.out.println("static代码块");    }    {    System.out.println("实例化代码块");    }    public A() { System.out.println("构造方法");    }}public class TestCopyRecursive {    public static void main(String[] args) { A a = new A();    }}/*运行结果:static代码块实例化代码块构造方法*/

4. static import 机制

  • JDK1.5中引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员
  • 使用方法:
    1. 导入方法:import static 包名.类名.静态方法名
    2. 调用方法:方法名(实参列表)
import static java.lang.Math.abs;public class B {    public static void main(String[] args) { int abs = abs(-20); System.out.println("abs = " + abs);    }}


(这还不点个赞!评论支持一下

🍬最后附上美图一张