0
点赞
收藏
分享

微信扫一扫

[java] final与static

幸甚至哉歌以咏志 2022-04-03 阅读 96
java


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);
    }
}


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

🍬最后附上美图一张

举报

相关推荐

0 条评论