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);
}
}
(这还不点个赞!评论支持一下!)
🍬最后附上美图一张
