在java開發中,常常要建立帶不同修辭關鍵字[public]\[private] static的成員變數或方法。
提出問題:這些關鍵字各起什麼作用呢?
解決問題:現結合例項對static 小結一下。
工具/原料
1、開發工具:Intellij IDEA 14以上
2、在此進行java開發練習
方法/步驟
首先,認識由這幾個關鍵修辭的成員變數和成員方法,形成的4類成員變數和4類成員方法。
4類成員變數:
public static 資料型別 成員變數名;-------公共的、靜態的成員變數。
public 資料型別 成員變數名;------公共的、非靜態的成員變數。
private static 資料型別 成員變數名;------私有的、靜態的成員變數。
private 資料型別 成員變數名;--------私有的非靜態的成員變數。
4類成員方法:
public static 資料型別 成員方法名(){ }-------公共的、靜態的成員方法。
public 資料型別 成員方法名(){ }-----公共的、非靜態的成員方法。
private static 資料型別 成員方法名(){ }-----私有的、靜態的成員方法。
private 資料型別 成員方法名(){ }------私有的非靜態的成員方法。
其次,要知道,建立好的成員變更,只有當它們在方法裡面被訪問時,才能起作用。另外,原則上一個方法是可以呼叫另一個方法的。但是有了這些關鍵字修辭的成員變數和成員方法,它們能否在另一方法中被訪問到,被呼叫到呢?
以下是例項
step1:新建一個類(本例類名:MethodVisitMethod)。類中建立4個成員變數,4個成員方法,1個主方法main() 它是用來測試驗證。
step2:程式碼如下
/** * Created by Administrator on 2016/7/24. * 本類專門研究方法與方法之間的呼叫問題 */public class MethodVisitMethod { //這是一個共公的,靜態的黑蘋果
public static String backApple="黑蘋果";
//這是一個私有的,靜態的藍蘋果
private static String blueApple="藍蘋果";
//這是一個共公的,非靜態的綠蘋果
public String greenApple="綠蘋果";
//這是一個私有的,非靜態的紅蘋果。
private String redApple="紅蘋果";
//建立一個main()方法,用來測試驗證各個方法的程式碼.強調:main方法本身是靜態方法
public static void main(String[] args){
MethodVisitMethod.method_one();
//MethodVisitMethod.method_two();//無法從靜態上下文中引用非靜態 方法 method_two()
MethodVisitMethod.method_three();
//MethodVisitMethod.method_four();//無法從靜態上下文中引用非靜態 方法 method_four()
}
//建立一個公共的,靜態的方法method_ont()
public static void method_one() {
System.out.println("這是一個公共的靜態的方法method__one()");
MethodVisitMethod.method_three();//說明靜態方法可以呼叫另一個靜態方法。
//MethodVisitMethod.method_two();//無法從靜態上下文中引用非靜態 方法 method_two()
//MethodVisitMethod.method_four();//無法從靜態上下文中引用非靜態 方法 method_four()
} //建立一個私有的,靜態的方法method_three()
private static void method_three() {
System.out.println("這是一個私有的,靜態的方法method_three()");
MethodVisitMethod.method_one();//說明靜態方法可以呼叫另一個靜態方法。
//MethodVisitMethod.method_two();//說明靜態方法不能呼叫公共的、非靜態的方法
// MethodVisitMethod.method_four();//說明靜態方法不能呼叫私有的,非靜態的方法
} //建立一個公共的,非靜態的方法method_two()
public void method_two() {
System.out.println("這是一個公共的非靜態的方法method_two()");
MethodVisitMethod.method_one();//說明非靜態方法可以呼叫另一個靜態方法。
MethodVisitMethod.method_three();//說明非靜態方法能呼叫私有的、靜態的方法
//MethodVisitMethod.method_four();//說明非靜態方法不能呼叫私有的,非靜態的方法
} //建立一個私有的,非靜態的方法method_four()
private void method_four() {
System.out.println("這是一個私有的,非靜態的方法method_four()");
MethodVisitMethod.method_one();//說明非靜態方法可以呼叫另一個靜態方法。
MethodVisitMethod.method_three();//說明非靜態方法能呼叫私有的、靜態的方法
//MethodVisitMethod.method_two();//說明非靜態方法不能呼叫公共的,非靜態的方法
}
}
//測試方法:逐個方法進行測試,取消前各個被呼叫的方法前面的註釋符//,執行main方法。從測試驗證結果,歸納如下規律:(如圖所示)
同一個類內,一個成員方法要去呼叫其它個成員方法時,許可權如下
1.靜態成員方法只能呼叫靜態的成員方法。
2.非靜態成員方法也只能呼叫靜態的成員方法
換句話說:非靜態的方法都不能被呼叫,而所的靜態成員方法在任意方法中都可以呼叫。
3.成員方法呼叫另一成員方法取決於兩者的static,與它們的public\private無關。
step3:新建一個類(本例類名:MethodVisitVariable)
本類由4個成員變數,4個成員方法,1個主方法main()組成
程式碼如下
/** * Created by Administrator on 2016/7/24. * 探究:成員方法訪問成員變數的許可權 */
public class MethodVisitVariable {
//這是一個共公的,靜態的黑蘋果
public static String backApple;
//這是一個私有的,靜態的藍蘋果
private static String blueApple;
//這是一個共公的,非靜態的綠蘋果
public String greenApple;
//這是一個私有的,非靜態的紅蘋果。
private String redApple;
//建立一個main方法,來測試
public static void main(String[] args) {
//String red=redApple;//無法從靜態上下文中引用非靜態 變數 redApple
//String green=greenApple;//無法從靜態上下文中引用非靜態 變數 redApple
String blue=blueApple;
String back=backApple;
MethodVisitVariable.getStaticMethod();
System.out.println("---------------------------");
//MethodVisitVariable.show();//無法從靜態上下文中引用非靜態 方法 show()
System.out.println("---------------------------");
MethodVisitVariable.method_pr_st();
System.out.println("---------------------------");
MethodVisitVariable.show2();
} //這是一個公有的靜態的方法
public static void getStaticMethod() {
//訪問成員變數
//System.out.println("this is a private string redApple"+redApple);//無法從靜態上下文中引用非靜態 變數 redApple
System.out.println("this is a private static blueApple" + blueApple);
// System.out.println("this is a public greenApple"+greenApple);//無法從靜態上下文中引用非靜態 變數 greenApple
//String ap=greenApple;//無法從靜態上下文中引用非靜態 變數 greenApple
System.out.println("this is a public static backApple" + backApple); /*
綜合: 1.帶有static關鍵字的方法叫做靜態方法。
2.當把註釋符//取消時,馬上出問題。說明靜態方法不能訪問非靜態的成員變數。
*/
} //這是一個私有的,靜態的方法
private static void method_pr_st() {
System.out.println("method_pr_st是一個私有的、靜態的方法");
staticMethod green = new staticMethod();
String gr = green.greenApple;
//呼叫成員變數
// System.out.println("這是一個私有的、非靜態的成員變數紅蘋果" + redApple);// 無法從靜態上下文中引用非靜態 變數 redApple
System.out.println("這是一個私有的、靜態的成員變數藍蘋果" + blueApple);
// System.out.println("這是一個共有的、非靜態的成員變數綠蘋果" + greenApple);//無法從靜態上下文中引用非靜態 變數 greenApple
System.out.println("這是一個共有的、靜態的成員變數黑蘋果" + backApple);
/*
1、取消redApple和greenApple成員變數的註釋符//,馬上出問題
2、說明私有的,靜態的成員方法是不可以訪問非靜態成員變數的。
* */ }
//這是一個公共的、非靜態的成員方法
public void show() {
System.out.println("show()是一個公有的,非靜態的成員方法");
//調用成員變數
System.out.println("這是一個私有的、非靜態的成員變數紅蘋果" + redApple);
System.out.println("這是一個私有的、靜態的成員變數藍蘋果" + blueApple);
System.out.println("這是一個共有的、非靜態的成員變數綠蘋果" + greenApple);
System.out.println("這是一個共有的、靜態的成員變數黑蘋果" + backApple);
//以上訪問都不出問題,說明公共的、非靜態的方法可以靜態和非靜態的成員變數。
} //這是一個私有的、非靜態方法
private void getNoNtaticMethod() {
//呼叫成員變數
System.out.println("這是一個私有的、非靜態的成員變數紅蘋果" + redApple);
System.out.println("這是一個私有的、靜態的成員變數藍蘋果" + blueApple);
System.out.println("這是一個共有的、非靜態的成員變數綠蘋果" + greenApple);
System.out.println("這是一個共有的、靜態的成員變數黑蘋果" + backApple);
/* 綜合:1.沒有關鍵字static 的方法叫做非靜態方法。 2.非靜態方法可以呼叫靜態的成員變數和靜態的成員方法。 */ } //這是一個公共的,靜態的成員方法
public static void show2() {
System.out.println("show2()是公有的、靜態的成員方法");
//呼叫成員變數
//System.out.println("這是一個私有的、非靜態的成員變數紅蘋果" + redApple);//無法從靜態上下文中引用非靜態 變數 redApple
System.out.println("這是一個私有的、靜態的成員變數藍蘋果" + blueApple);
//System.out.println("這是一個共有的、非靜態的成員變數綠蘋果" + greenApple);//無法從靜態上下文中引用非靜態 變數 greenApple
System.out.println("這是一個共有的、靜態的成員變數黑蘋果" + backApple);
/* 綜合:1.帶有關鍵字static 的方法叫做靜態方法。
2.靜態方法只能訪問靜態的成員變數,而不能訪問非靜態的成員變數。 */
}
}
/*測試方法是逐個方法進行測試,取消前各個被呼叫的方法前面的註釋符//,執行main方法。對多次行動的結果進行歸納總結:得出如下規律:(如圖所示)
在同一類中,成員方法想去呼叫其它的成員變數,許可權是:
1.靜態成員方法只能訪問靜態的成員變數。
2.非靜態成員方法可以訪問所有的成員變數
3.成員方法訪問成員變數取決於兩者的static,與它們的public\private無關。
*/