1. 程式人生 > >Java關鍵字final和static的作用

Java關鍵字final和static的作用

++ 修改 AS apr super關鍵字 存在 回收 TP javap

一、關鍵字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的作用