import static java.lang.Math.random;
// import java.lang.Math;
class StaticModifier {
/*
類中的靜態(tài)變量和靜態(tài)方法能夠與“類名”一起使用,不需要創(chuàng)建一個類的對象來訪問該類的靜態(tài)成員.
*/
static int i= 10;
int j;
StaticModifier() {
j = 20;
}
}
public class TestStatic {
// 多個實例中的靜態(tài)變量 um 是共享同一內(nèi)存空間,t1.um 和 t2.um 其實指向的都是同一個內(nèi)存空間
static UserModel um = new UserModel();
//1.static 修飾符
public static void main(String args[]) {
// 類.static 變量
StaticModifier.i = 20;
System.out.println("類變量i=" + StaticModifier.i);
// 對象.實體變量
StaticModifier s = new StaticModifier();
System.out.println("實例變量j=" + s.j);
/*2.編譯器只為整個類創(chuàng)建了一個靜態(tài)變量的副本,因此它能夠用類名進行訪問鳞仙。
也就是說:一個類中,一個 static 變量只會有一個內(nèi)存空間,雖然有多個類實例,
但這些類實例中的這個 static 變量會共享同一個內(nèi)存空間*/
TestStatic t1 = new TestStatic();
t1.um.userName = "張三";
TestStatic t2 = new TestStatic();
t2.um.userName = "李四";
System.out.println("t1.um.userName=="+t1.um.userName);
System.out.println("t2.um.userName=="+t2.um.userName);
//3. static 方法可以用類名而不是引用來訪問
System.out.println(GeneralFunction.addUp(1,2));
// // 如訪問控制權(quán)限允許,static 屬性和方法可以使用對象名加‘.’方式調(diào)用;當然也
// GeneralFunction a = new GeneralFunction();
// a.addUp(3,4);
// 4.靜態(tài)import
System.out.printf("\n隨機數(shù)是:%f",random());
/*5.靜態(tài)初始器(Static Initializer)是一個存在與類中方法外面的靜態(tài)塊返敬。靜態(tài)初始器僅僅
在類裝載的時候(第一次使用類的時候)執(zhí)行一次橄杨。
靜態(tài)初始器的功能是:往往用來初始化靜態(tài)的類屬性查坪。
*/
System.out.println("counter=" + Count.counter);
new Count().test();
}
}
class UserModel{
public String userName="";
}
class GeneralFunction {
int temp;
// static 的基本規(guī)則:有關(guān)靜態(tài)變量或方法的一些要點如下:
public int getTemp(){
return temp >0?temp:0;
}
// 構(gòu)造方法不允許聲明為 static 的
public GeneralFunction(){
}
// static 方法可以用類名而不是引用來訪問
public static int addUp(int x, int y) {
/* 一個類的靜態(tài)方法只能訪問靜態(tài)屬性,否則出錯,
并且靜態(tài)方法中不存在當前對象,因而不能使用“this”,當然也不能使用”super”;*/
//temp = 10;
// 一個類的靜態(tài)方法不能夠直接調(diào)用非靜態(tài)方法,否則出錯
// x = getTemp();
return x + y;
}
}
class GeneralFunctionSon extends GeneralFunction{
// 靜態(tài)方法不能被非靜態(tài)方法覆蓋;
public static int addUp(int x, int y) {
return x+y;
}
}
class Count {
public static int counter;
static {//只運行一次
counter = 123;
System.out.println("Now in static block.");
}
public void test(){
System.out.println("test method=="+counter);
}
}
public class People{
Dog d ;
public static void main(String[] args) {
People zhangSan = new People();
zhangSan.d = new Dog();
zhangSan.d.nikName = "gouDan";
System.out.print(zhangSan.d.nikName);
}
}
class Dog{
int legs;
String nikName;
}