天天看點

java-修飾符

1.通路修飾符

限定詞 同一個類中 同一個包中 不同包中的子類 不同包中的非子類
private
無限定詞
protected
public

(1)private

隻能被所屬類通路,類、接口不能聲明為這種類型,外部隻能通過類中的公共方法通路。隐藏類的實作細節和保護資料。

package create;

public class PrivateTest {
	private String name;   //私有的成員變量

	//私有成員變量的get/set方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
	public static void main(String[] args){
		//建立類的對象
		PrivateTest p = new PrivateTest();
		//調用對象的set方法,為成員變量指派
		p.setName("private通路修飾符");
		//列印成員變量name的值
		System.out.println("name = " + p.getName());
	}	
}

           

(2)不使用任何關鍵字

他們可以被目前包裡其他類通路。

package create;

public class DefaultTest {
	String name;   //預設修飾符的成員變量	
	String getName() {  //預設修飾符成員變量的get方法
		return name;
	}
	void setName(String name) {  //預設修飾符成員變量的set方法
		this.name = name;
	}		
	public static void main(String[] args){
		DefaultTest d = new DefaultTest();
		d.setName("default test");
		System.out.println(d.getName());
	}
}
           

(3)protected

能被包内任何類通路,也可以被不同包中的子類通路。

package create;

public class Person {
	protected String name;
	protected void sing(){
		System.out.println("父類...");
	}
	
	public void test(){
		System.out.println("父類:public test");
	}
	
}
package child;

import create.Person;
public class Women extends Person{
	public static void main(String[] args){
		Women w = new Women();
		w.sing();
		w.name = "protected";
		System.out.println(w.name);
	}
}


           

(4)public

package create;

public class Person {
	protected String name;
	protected void sing(){
		System.out.println("父類...");
	}
	
	public void test(){
		System.out.println("父類:public test");
	}
	
}
package child;
import create.Person;
public class PublicTest {
	public static void main(String[] args) {
		Person p = new Person();
		p.test();
	}
}


           

2.非通路修飾符

(1)static修飾符

修飾成員變量和方法,直接通過類名通路。

格式:類名.靜态變量名

類名.靜态方法名

靜态方法不能使用類的非靜态變量,靜态方法必須被實作,隻能通路所屬類的靜态成員變量和靜态成員方法。

靜态代碼塊獨立于類成員,位置随便放,加載類是時會被執行,

package create;

public class StaticTest {
	public static final String BANANA = "香蕉";  //static final 修飾的常量
	public static float price = 5.2f;    //final定義的成員變量
	
	static{
		System.out.println("static 靜态塊");
	}
	
	public static void test(){
		System.out.println(StaticTest.BANANA + "的價格是:" + StaticTest.price);
	}
	
	public static void main(String[] args){
		StaticTest st = new StaticTest();
		st.test();
		System.out.println("main()中,"+st.BANANA+"的price = " + st.price);
	}
}

           

static 靜态塊

香蕉的價格是:5.2

main()中,香蕉的price = 5.2

(2)final修飾符

用final修飾的變量是常量,值一旦給定就無法改變。

如果一個類不允許其子類覆寫某個方法,則可以把這個方法聲明為final方法。

使用final方法的原因有兩個:一是把方法鎖定,防止任何繼承類修改它的意義和實作。二是高效。

final關鍵字聲明的類不能被繼承,即最終類。