三個修飾符:
一、static:
作用域:
1. 屬性
1.1 靜態屬性不必要創建新對象,可直接用類調用
1.2 其值發生改變,則類中的值也會隨之而變並延伸到其他對象中
例子:
class Animals {
// /1.static 修飾屬性
static String a = "靜態屬性值";
String b = "非靜態屬性值";
}
Animals ani=new Animals ();
ani.a="修改";
ani.b="修改非";
Animals ani1=new Animals ();
ani1.a;//"修改";
ani1.b;// "非靜態屬性值";
1.3 static 不能修飾局部變量屬性值
2. 方法
2.1 訪問是static修飾的方法不必要創建新對象訪問,可直接用類調用
2.2 在static修飾的方法中,只能訪問:
2.2.1 全局變量中定義的static屬性
2.2.2 static方法
2.2.3 其方法中定義的局部變量
2.3 不能使用this關鍵字
2.4 靜態方法的覆寫不能實現不了多態
3.修飾代碼塊
3.1 作用:
提高程序的性能
3.2 使用:
獨立於方法
3.2 特點:
只在類加載時執行一次
練習代碼君:
package com.jacob.javase;
/*
* 修飾符:
* static詳探
*/
class Animals {
// /1.static 修飾屬性
static String a = "靜態屬性值";
String b = "非靜態屬性值";
public Animals() {
// Illegal modifier for parameter a1; only final is permitted
// 1.1、static String a1="";原因static不能修飾局部變量
}
// 2.static 修飾方法
public static void eat() {
// Cannot use this in a static context
// 2.1、this.a;//靜態方法中不能使用this關鍵字
// int b=0;//方法中局部變量的值可訪問
// 2.2、靜態方法中只能調用靜態方法(具體可參考main方法)
System.out.println("Animals靜態方法");
// 2.3、靜態方法中只能訪問類全局中的靜態屬性
// System.out.println(b);
}
// 靜態代碼塊:1.在類加載時實現一次 2.使用起來是獨立於方法 3.提高程序的性能
static {
System.out.println("靜態代碼塊");
}
}
class Cat extends Animals {
// 2.4、 靜態方法不能實現多態
public static void eat() {
System.out.println("cat靜態方法");
}
}
public class ModifierStatic {
public static void main(String[] args) {
Animals ani = new Animals();
ani.a = "修改後的靜態屬性值";
ani.b = "修改後的非靜態屬性值";
Animals ani1 = new Animals();
// 1.2、說明對象對類靜態屬性(類變量)值的改變,其類中值會相應改變(因爲靜態存儲在靜態數據區,可直接調用)
System.out.println("ani1中的a:" + ani1.a + " || " + "ani1中的b:" + ani1.b);
// 1.3、靜態屬性值可不必創建對象,直接用類調用,原因同上
System.out.println("Animals中的a:" + Animals.a);
Animals a2 = new Cat();
a2.eat();// ——Animals靜態方法
Animals.eat();// —— Animals靜態方法(靜態方法同樣可以用類直接調用)
}
}