Java关键字final和static的作用

Posted xianya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java关键字final和static的作用相关的知识,希望对你有一定的参考价值。

一、关键字final

  •      final修饰类:这个类就不能被继承
  •      final修饰方法:不能被重写
  •      final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值。习惯上,常量用大写字符表示
  •      此常量在哪里赋值:①此常量不能使用默认初始化 ②可以显式的赋值、代码块、构造器

      注意:变量用static final修饰:全局常量

二、关键字static

static,静态的,可以用来属性、方法、*代码块(或初始化块)、*内部类

static修饰属性(类变量):

  • 由类创建的所有的对象,都共用这一个属性
  • 当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。vs 实例变量(非static修饰的属性,各个对象各自拥有一套副本)
  • 静态类变量随着类的加载而加载的,而且独一份
  • 静态的变量可以直接通过“类.类变量”的形式来调用
  • 静态类变量的加载是要早于对象。所以当有对象以后,可以“对象.类变量”使用。但是"类.实例变量"是不行的
  • 静态类变量存在于静态域中

static修饰方法(类方法):

  • 随着类的加载而加载,在内存中也是独一份
  • 可以直接通过“类.类方法”的方式调用
  • 内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法是可以调用静态的属性或静态的方法

      注意:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也要晚于非静态的结构

                 静态的方法内是不可以有this或super关键字的! 

static测试实例:

package com.yyx.pratice;

public class JavaPratice {
    public static void main(String[] args) {
        Account a1 = new Account("abc123", 1000);
        Account a2 = new Account("abc456", 2000);
        Account a3 = new Account("abc456", 2000);
        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
    }
}

class Account {
    private int id;// 账号
    private String password;// 密码
    private double balance;// 余额
    private static double rate = 0.05;// 利率
    private static double minBalance = 1;// 最小余额
    private static int init = 1000;

    public Account(String password, double balance) {
        this.id = init++;
        this.password = password;
        this.balance = balance;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public static double getRate() {
        return rate;
    }

    public static void setRate(double rate) {
        Account.rate = rate;
    }

    public static double getMinBalance() {
        return minBalance;
    }

    public static void setMinBalance(double minBalance) {
        Account.minBalance = minBalance;
    }

    @Override
    public String toString() {
        return "Account [id=" + id + ", password=" + password + ", balance=" + balance + "]";
    }

}

 

以上是关于Java关键字final和static的作用的主要内容,如果未能解决你的问题,请参考以下文章

java中 static,final,transient,volatile关键字的作用

描述static, final, synchronized, volatile的作用

Java基础_final和static区别

Java的static和final关键字的用法

Java的static和final关键字的用法

Java基础 -- 关键字Static和Final