[java] final与static
我宁愿写bug⚠️,也不愿什么都不做 ❗️
💚哈喽!大家好!💚
❤️我是 一看就会,一写就废 的 浩浩🔍❤️
💙让我带你编程带你飞,带你飞进垃圾堆!💙
💜 如果对你有所帮助,请给我点个赞👍!💜
键盘敲烂💥,工资过万💰
![]()
📌
文章目录
1. final 🙉
final 修饰属性 🙈
final 修饰方法 🙈
final 修饰类 🙈
2. static 🙉
静态成员变量 🙈
静态方法 🙈
静态代码块 🙈
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 总结
- 本类的方法之间的调用
- 静态方法可以被任何方法(静态方法和非静态方法)直接调用;
- 非静态方法可以被非静态方法直接调用;
- 非静态方法不能被静态方法直接调用,需要创建对象,用对象名调用。
- 不用类方法之间的调用
- 调用静态方法,使用类名直接调用 ;
- 非静态方法不能直接调用,需要创建对象,用对象名调用。
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”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员
- 使用方法:
- 导入方法:import static 包名.类名.静态方法名
- 调用方法:方法名(实参列表)
import static java.lang.Math.abs;public class B { public static void main(String[] args) { int abs = abs(-20); System.out.println("abs = " + abs); }}
(这还不点个赞!评论支持一下!)
🍬最后附上美图一张