Java關鍵字final和static的作用
阿新 • • 發佈:2018-06-02
++ 修改 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的作用