final關鍵字,static關鍵字
Final
final的意思為最終,不可變。final是個修飾符,它可以用來修飾類,類的成員,以及局部變量。不能修飾構造方法。
註意:
被final修飾的類不能被繼承但可以繼承別的類
class Yy {} final class Fu extends Yy{} //可以繼承Yy類 class Zi extends Fu{} //不能繼承Fu類
final修飾成員方法:
1.該方法可以被子類繼承,但是不能被重寫
2.從父類那裏繼承來的方法重寫後可以加final關鍵字
class Fu { // final修飾的方法,不可以被覆蓋,但可以繼承使用 publicfinal void method1(){} public void method2(){} } class Zi extends Fu { //重寫method2方法 public final void method2(){} }
final修飾變量(基本類型還是引用數據類型)
一次賦值,終身不變
final int i = 20; i = 30; //賦值報錯,final修飾的變量只能賦值一次
final修飾成員變量,
1.成員變量的初始值不能為系統的默認值(需要手動賦初始值)
2.可以通過構造方法賦值
3.一次賦1值,終身不變
classDemo { //直接賦值 final int m = 100; //final修飾的成員變量,需要在創建對象前賦值,否則報錯。 final int n; public Demo(){ //可以在創建對象時所調用的構造方法中,為變量n賦值 n = 2016; } }
static關鍵字
static它是靜態修飾符,一般用來修飾類中的成員。
被static修飾的成員變量屬於類,不屬於這個類的某個對象。(也就是說,多個對象在訪問或修改static修飾的成員變量時,其中一個對象將static成員變量值進行了修改,其他對象中的static成員變量值跟著改變,即多個對象共享同一個static成員變量)
例子:
package com.oricle.School; public class Student { private String name; private int age; private static String school ="清華大學"; public Student(String name,int age){ this.age=age; this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } public String toString() { return "Student [name=" + name + ", age=" + age + ", school=" + school + "]"; } }
測試類:
package com.oricle.School; public class Test { public static void main(String[] args) { Student s1=new Student("熊大",15); Student s2=new Student("熊1",14); Student s3=new Student("熊2",13); Student s4=new Student("熊3",12); s1.setSchool("北京大學"); System.out.println(s1.toString()); System.out.println(s2.toString()); System.out.println(s3.toString()); System.out.println(s4.toString()); } }
結果演示:
註意:
靜態成員只能訪問靜態成員
class Demo { //成員變量 public int num = 100; //靜態成員變量 public static int count = 200; //靜態方法 public static void method(){ //System.out.println(num); 靜態方法中,只能訪問靜態成員變量或靜態成員方法 System.out.println(count); } }
靜態內容存於靜態區,優先被掃描,優先於對象存在,不能使用this/super,掃描完靜態區,隨後再main方法進棧,其中 main方法為靜態方法僅僅為程序執行入口,它不屬於任何一個對象,可以定義在任意類中。
class Demo { //成員變量 public int num = 100; //靜態方法 public static void method(){ //this.num; 不能使用this/super。 System.out.println(this.num); } }
定義靜態常量
開發中,我們想在類中定義一個靜態常量,通常使用public static final修飾的變量來完成定義。此時變量名用全部大寫,多個單詞使用下劃線連接。
定義格式:
public static final 數據類型 變量名 = 值;
例如:
class School { public static final String SCHOOL_NAME = "北京大學"; public static void method(){ System.out.println("一個靜態方法"); } }
當我們想使用類的靜態成員時,不需要創建對象,直接使用類名來訪問即可。
System.out.println(Company.SCHOOL_NAME); Company.method(); // 調用一個靜態方法
註意:
接口中的每個成員變量都默認使用public static final修飾。
所有接口中的成員變量已是靜態常量,由於接口沒有構造方法,所以必須顯示賦值。可以直接用接口名訪問。
interface Inter { public static final int COUNT = 100; }
訪問接口中的靜態變量
Inter.COUNT//類名.靜態變量
final關鍵字,static關鍵字