2019年1月16日 星期三

java - 好用的 static

static  =>  類別類屬性
(一) 與Exul 絕對的位置意思一樣
(二)Java class 的 attribute 屬性 ( field , method ) ,應用面分為:
1) 物件類屬性
=>每一筆資料物件都須配置自己專屬內容的屬性,
EX: 姓名、地址........
=> 需要透過 物件 存取
=> 物件名,屬性( fild , method )

2) 類別類 => 在物件產生前,先定義完成
=> 所有的資料物件共通使用的屬性
Ex: 相同公司名 , 學校名稱.....
=> 存取呼叫方式
        一.物件名稱 .屬性
        二.類別名. 屬性
              ( class )
\

(三) 實際應用
1.fild
2.method
      a) 內容如有使用  fild 變數 ,限定 studic
      b) 不可搭配    this  使用 ,this 指物件
3. inner class 內部類別
                                                                算式: fv = pv*(1+r*n);


例子:
class FV { private static int pv; //可以看到加上 static 後變成 絕對位置 跟 EX的 加上$ 一樣 private double r; private int n ; private int fv; //加上 private 不能讓人隨意修改 FV(int pv, double r, int n ) { this.pv = pv ; this.r = r; this.n = n; fv=(int)(pv*(1+r*n)); } void setPv (int pv) { if(pv> 0 ) //大於 0 才進行修改 { this.pv = pv ; } } void setR (double r) { if(r> 0 ) //大於 0 才進行修改 { this.r = r ; } } void setN (int n) { if(n> 0 ) //大於 0 才進行修改 { this.n = n ; } } void show() { fv=(int)(pv*(1+r*n)); System.out.println( "本金" + pv + "\t年利率 :"+r+ "\t年:"+n+ "\t單利本利和:" +fv ); }



#class 會先創建 PV 如果 先引用 他就會被創建出來 例子如下 當FV.pv = 20000; 在使用NEW 創建就都匯存進 同一個格子
範例:
class FV { static int pv; //可以看到加上 static 後變成 絕對位置 跟 EX的 加上$ 一樣 private double r; private int n ; private int fv; //加上 private 不能讓人隨意修改 FV(int pv, double r, int n ) { this.pv = pv ; this.r = r; this.n = n; fv=(int)(pv*(1+r*n)); } void setPv (int pv) { if(pv> 0 ) //大於 0 才進行修改 { this.pv = pv ; } } void setR (double r) { if(r> 0 ) //大於 0 才進行修改 { this.r = r ; } } void setN (int n) { if(n> 0 ) //大於 0 才進行修改 { this.n = n ; } } void show() { fv=(int)(pv*(1+r*n)); System.out.println( "本金" + pv + "\t年利率 :"+r+ "\t年:"+n+ "\t單利本利和:" +fv ); } }

class addFV
{
public static void main (String args[])
{
   FV.pv = 20000;   //因為   加上 static
   FV f1 = new FV(10000 , 0.01, 6);   //每一次創建 都會被寫入FV
   FV f2 = new FV(20000 , 0.02, 6);   //每一次創建 都會被寫入FV
   FV f3 = new FV(30000 , 0.03, 6);   //每一次創建 都會被寫入FV
   FV f4 = new FV(40000 , 0.04, 6);   //每一次創建 都會被寫入FV 因最後是四萬 最後FV 為四萬


   f1.show();
   f2.show();
   f3.show();
   f4.show();
 
   System.out.println("==========================================");
 
   //f1.pv = - 20000;
 
   //f1.setPv(-20000); //寫入 負2萬本金  驗證 前方是否可輸入為 "負數"
   f1.setPv(40000); // 因前面加入了  static 變成絕對數  所以全部人都會變成 4萬
   f1.setR(0.014); //沒有加上 static 只有 f1 的利息  變成0.014
 
 
   f1.show();
   f2.show();
   f3.show();
   f4.show();
 
 




}
}
執行結果:










.修改名子
class FV { static int pv; double r; private int n; private int fv; FV(double r,int n) { this.r=r; this.n=n; fv=(int)(pv*(1+r*n)); } void setPv(int pv) { if(pv>0) { this.pv=pv; } } void setR(double r) { if(r>0) { this.r=r; } } void setN(int n) { if(n>0) { this.n=n; } } static void title() //static 所以創建Class 所以不用宣告 { System.out.println("本金\t年利率\t年\t單利本利和"); } void show() { fv=(int)(pv*(1+r*n)); System.out.println(pv+"\t"+r+"\t"+n+"\t"+fv); } }
class addFV { public static void main(String args[]) { FV.pv=100000; FV.title(); //新增引用 title FV f1=new FV(0.01,6); FV f2=new FV(0.011,5); FV f3=new FV(0.012,4); FV f4=new FV(0.013,3); f1.show(); f2.show(); f3.show(); f4.show(); System.out.println("==========================="); } }
執行結果:












.static 如果放在計算式 這樣他的變數 也要使用 static 不然會報錯誤

例子
class FV { static int pv; double r; private int n; private int fv; FV(double r,int n) { this.r=r; this.n=n; fv=(int)(pv*(1+r*n)); } void setPv(int pv) { if(pv>0) { this.pv=pv; } } void setR(double r) { if(r>0) { this.r=r; } } void setN(int n) { if(n>0) { this.n=n; } } static void title() { System.out.println("本金\t年利率\t年\t單利本利和"); } static void show() { fv=(int)(pv*(1+r*n)); System.out.println(pv+"\t"+r+"\t"+n+"\t"+fv); } }

class addFV
{
public static void main(String args[])
{
FV.pv=100000;
FV.title();  //新增字串
FV f1=new FV(0.01,6);
FV f2=new FV(0.011,5);
FV f3=new FV(0.012,4);
FV f4=new FV(0.013,3);

f1.show();
f2.show();
f3.show();
f4.show();
System.out.println("===========================");
}

}
執行結果:


.如果使用new 會佔據記憶體空間,如果要讓他打印結束就消失 可以使Static
舉例:
class addFV { public static void main(String args[]) { //CAL c1=new CAL(); //如果使用new 會佔據記憶體空間 //如果要讓他打印結束就消失 可以使Static System.out.println(CAL.RLength(2.3)); System.out.println(CAL.fv(10000,0.01,5)); } }


class CAL { static double RLength(double r) //使用static { return 2*3.14*r; } static int fv(int pv,double r,int n) { return (int)(pv*(1+r*n)); } }
執行結果:









沒有留言:

張貼留言