2019年1月18日 星期五

java - Array 陣列

Array 陣列  =>變數名稱
(一) 多個相同類型的變數 (或 物件 )  (同一機構公司,同組,同一張表單  ,可以宣告使用相同名稱,以整數索引碼去別

舉例: 第一個 陣列
class ex1
{
public static void main(String args[])
{
   //int f1,f2,f3; 
   int [] x = new  int[3];  //初始值 為O
   System.out.println(x[2]);
 
}
}
執行結果:





範例二 :  各項資料類型 初始值
class ex1
{
public static void main(String args[])
{

//int f1,f2,f3;
//各個值 都有不同的起始 數值
//int 初始值為 0
//double 初始值為 0.0
//boolean 初始值為 false
//String 初始值為 空值
int[] x=new int[6];//int
//double[] x=new double[3];  //double
//boolean[] x=new boolean[3]; //boolean
//String[] x=new String[6];   //String

System.out.println(x);
System.out.println(x[0]); 
}

}
執行結果:








I 為int       double  為D   各有不同


( 二 ) 語法: 
      類型 [ ] 陣列名稱 =  new  類型 [ n ] ;
n => 總數量

=> 個別名稱為  陣列名 [  o  ] ,  陣列名 [  i  ] ,  ..............................



( 三 ) Java 的陣列偷過  new 產生,所以也有L
1.stack
2.heap

Ex:


 ( 四 ) 陣列值取出的方式
1. for (       ;            ;                 )

2.for  each
=>for  (類型    變數 :  陣列名 )
{

}

※ 上面的分號 ": " 是 : 指定到此陣列的 ftack 位址  將heap 區變數值 copy 出來,copy前先判斷是否友值

範例:   將陣列打印出來
class ex1
{
public static void main(String args[])
{


int[] x=new int[6];

System.out.println(x);
System.out.println(x[0]);
x[0]=10;
for(int i=0;i<6;i++)   //可透過 if將陣列打印
{
System.out.println("x["+i+"]="+x[i]);
}

System.out.println("========================================");


for(int o:x)   //可以一直打印到 陣列結束  會全抓
{
System.out.println(o);
}


}



}
執行結果:
















範例: 使用 抓去 陣列內數量
class ex1
{
public static void main(String args[])
{
int[] x=new int[7];

    System.out.println(x.length); //會抓取陣列數
                                  //如上面是 7 就會抓取7
System.out.println(x[0]);
x[0]=10;  //第一個 位置的值 
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}

}
}
執行結果:
















( 五 ) 陣列數量 計算
=> 陣列 length

(六) 陣列 初始值建立方式
1) 透過 "new"   結合 初始值
=> 靜態 初始化
2) 透過 " {  } " 結合初始值    //只有給到位置   ,"new" 才會給予值 跟 位置
=> 動態初始值

範例:
class ex1
{
public static void main(String args[])
{
int[] x={10,20,30};    //將數值  放入

System.out.println(x);
System.out.println(x.length);
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}
System.out.println("========================================");
for(int o:x)
{
System.out.println(o);
}
}
}
執行結果:













( 七 ) java.util.Arrays
1) sort
2)birarySearch

( 八 ) 傳值 傳位址 => " = "
1.pass by value  => copy 值.
2.pass by address => 指向 同一位址
=> 回收記憶體 ,  消滅
ps => 回收消滅使用  null



舉例 : 陣列排序
import java.util.Arrays;   //載入
 class ex1
{
public static void main(String args[])
{
int[] x={52,65,74,66,20};  //放入一個隨機數的陣列

Arrays.sort(x);  //使用 Arrays.sort  排序

for(int o:x) //  會將抓去陣列內所有數字
{
System.out.println(o);
}



}
}
執行結果:













舉例:  檢查數列內的值
import java.util.Arrays;   //載入
 class ex1
{
public static void main(String args[])
{
int[] x={52,65,74,66,20};  //放入一個隨機數的陣列

Arrays.sort(x);  //使用 Arrays.sort  排序

for(int o:x) //  會將抓去陣列內所有數字
{
System.out.println(o);
}

System.out.println("========================================");

        // Arrays.binarySearch 可檢查陣列 內的數 如果沒有返回 負數

System.out.println(Arrays.binarySearch(x,65)); //檢查有沒有65 的數字 有就返回位置

System.out.println(Arrays.binarySearch(x,53));  //檢查有沒有53 的數字 沒有返回負數

}
}
執行結果:


範例:  null 與 傳值
class ex1
{
public static void main(String args[])
{
int[] x={10,20,30};
int[] y={40,50,60};

System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
System.out.println("========================");

//x=y;
x[0]=y[0];  //如果 傳值 就是 copy 值
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
System.out.println("========================");
y[0]=100;
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
x = null ;  //會將記憶整個拿掉


System.out.println(x);  //會輸出 null

//System.out.println(x[0]);
//上面編譯會過 但是輸出的值 為空值
System.out.println(x.length);
//編譯會過 但無法輸出 因為length 只要連接陣列 就可以
//輸出的值為  空值 null


/*
int x=10;
int y=20;

System.out.println("x="+x);
System.out.println("y="+y);

System.out.println("========================");
x=y;                      //如果傳位置  就只有改變位置
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("========================");
y=100;
System.out.println("x="+x);
System.out.println("y="+y);
*/

}



}
執行結果:














( 九 ) 多維陣列
1. 樹狀結構
    分組的編碼方式
2.多個階段分組方式
Ex. : 2維陣列  =>  2階段多組

語法:
類型 [ ] [  ]  陣名  = new 類型 [ n ]  [ m ]
=> 先分  n 組   ,每組  m 個


例圖:


=> int [ ] [ ]   = new  int  [ 2 ] [3 ]














例子:
class ex1
{
public static void main(String args[])
{
/*int[] a=new int[3];
int[] b=new int[3];*/

int[][] x=new int[2][3]; //先分2組 每組3個
}
}

範例:
class ex1
{
public static void main(String args[])
{
/*int[] a=new int[3];
int[] b=new int[3];*/

int[][] x=new int[2][3];

System.out.println(x);
System.out.println(x[0]);      //可以通過編譯 出來是地址
                               // 不管有幾層 最後面 [] 是值
System.out.println(x[0][0]);   //打印出來是值
System.out.println(x[1]);   
 
System.out.println(x.length);
System.out.println(x[0].length);
//System.out.println(x[0][0].length); //報錯因為已經沒辦法往下才

System.out.println("=================================");

for(int i=0;i<x.length;i++)   //可以將雙層內容打印出來
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}


}



}
執行結果:



範例:

class ex1
{
public static void main(String args[])
{
int[][] x=
{
{10,20,30},
{85,74,21},
};
for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}

}
執行結果:









3.不等長(非對稱) 多維陣列
a)














例子: 不對等
class ex1
{
public static void main(String args[])
{
int[][] x=
{
{10,20,30,85},  //不對等
{74,21},
};
for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}



}
執行結果:











範例: 另一種放入
class ex1
{
public static void main(String args[])
{
int[][] x=new int[2][];//x[0],x[1]
x[0]=new int[4];
x[1]=new int[2];


for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}
}

}
執行結果:








範例: 傳值方式
class ex1
{
public static void main(String args[])
{
int[][] x=new int[2][];//x[0],x[1]
//x[0]=new int[4];
//x[1]=new int[2];
int[] y1={10,52,63,74};
int[] y2={41,52};
x[0]=y1;   //如果使用上方直接打印 會報錯
           //可以使用 傳值的方式  將位置傳入
x[1]=y2;

for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}
}
執行結果:










b)

例子一  可以這樣創建
class ex1
{
public static void main(String args[])
{
int[][][] x=new int[2][][];
x[0]=new int[3][];
x[0][0]=new int[2];
x[0][1]=new int[3];
x[0][2]=new int[4];

x[1]=new int[2][3];


}
}
範例二 : 應運 加入數值
class ex1
{
public static void main(String args[])
{
int[][][] x=new int[2][][];
/*
x[0]=new int[3][];
x[0][0]=new int[2];
x[0][1]=new int[3];
x[0][2]=new int[4];

x[1]=new int[2][3];
*/

int[] y1={10,20};
int[] y2={65,85,74};
int[] y3={77,85,96,36};

int[][] y4=
{
{52,65,74},
{77,65,96},
};
x[0]=new int[3][];

x[0][0]=y1;
x[0][1]=y2;
x[0][2]=y3; //這邊看位置  不是數量 數量已經在上面附值了

x[1]=y4;


for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
for(int k=0;k<x[i][j].length;k++)
{

System.out.println("x["+i+"]["+j+"]["+k+"]="+x[i][j][k]);

}

System.out.println();

}


}


}
}
執行結果




















.結合物件導向  應用

1.先定義 陣列變數名稱
2.在個實例化 "new "  物件內容






























例子:
class student
{
private String name;
private int chi;
private int eng;
private int sum;

student(String name,int chi,int eng)
{

this.name=name;
this.chi=chi;
this.eng=eng;

sum=chi+eng;

}

String show()
{
return "名 :"+name+
"\t國文:"+chi+
"\t英文:"+eng+
"\t總分:"+sum;

}

}

class add
{
public static void main(String args[])
{
/*
student[] s=new student[3];//s[0],s[1],s[2]-->名字
s[0]=new student("a1",75,85);
s[1]=new student("a2",75,85);
s[2]=new student("a3",75,85);
*/

student[] s=
{
new student("a1",75,85),
new student("a2",75,85),
new student("a3",75,85),

};
System.out.println(s);
System.out.println(s[0]);
System.out.println(s[0].show());

System.out.println("====================");

for(int i=0;i<s.length;i++)
{
System.out.println("s="+s+"\ts["+i+"]="+s[i]+"\t"+s[i].show());
}

/*
student s1=new student("a1",75,85);
student s2=new student("a2",75,85);
student s3=new student("a3",75,85);

System.out.println(s1.show());
System.out.println(s2.show());
System.out.println(s3.show());
*/


}

}

執行結果:


不對稱
新增說明文字




















class add2
{
 public static void main(String args[])
 {
  /*
  student[][] s=new student[2][];
  s[0]=new student[2];
  s[1]=new student[3];
  
  
  s[0][0]=new student("a",74,85);
  s[0][1]=new student("a",74,85);
  
  s[1][0]=new student("a",74,85);
  s[1][1]=new student("a",74,85);
  s[1][2]=new student("a",74,85);
  
  */
  
  student[][] s=
  {
   {
    new student("a",74,85),
    new student("a",74,85)
    
    
   }
   ,
   
   {
    new student("b1",74,85),
    new student("b2",74,85),
    new student("b3",74,85),
    
   }
   
   
   
  };
  
  for(int i=0;i<s.length;i++)
  {
   for(int j=0;j<s[i].length;j++)
   {
    
    System.out.println("s["+i+"]["+j+"]="+s[i][j]+"\t"+s[i][j].show());
    
   }
   
   
  }
 
 
 }
}
執行結果:







2019年1月16日 星期三

java - API 文件

java API 文件

( 一 ) 內部函式庫
      => java.lang.*;
     => 最常被使用

( 二 ) 外部函式庫
1. 絕對路徑
2. 相對路徑
=>import

( 三 )wrapper 包覆識別
1.jdk5.0 以前
ex :
Integer x = 10 ; 無法識別
Integer x = new  Integer( 10 );



======================
jdk 5.0 以前                           |           Jdk6.0 以後
Boxing                                   |           Auto  Boxing
                                               |         
unBoxing                               |           Auto  unBoxing

2.為class
=> 主要提供 mothod 做轉型用
=> String =轉=> 整數.浮點數....


wrapper
基本類型
Byte
byte
short
short
Integer
int
Long
long
Float
floot
Double
double
Boolean
boolean


( 四 ) 常用API
1.java.lang.*
2.java.util.*
3.java.io.*
4.java.sgl.*


例子:

/*
import java.util.Scanner;
import java.util.Date;
*/
import java.util.*;  //可用星號囊擴  "*" 星號 可以 變成 DATA  或是 Scanner
class ex1
{
public static void main(String args[])
{
System.out.println(Math.abs(-15));
System.out.println(Math.pow(2,2));
System.out.println((int)(Math.random()*100));
 
//java.util.Scanner sc=new java.util.Scanner(System.in);
Scanner sc=new Scanner(System.in);

Date d1 = new Date();
System.out.println(d1);

}
}

例子:

import java.util.Scanner;
import java.util.Date;
import static java.lang.Math.*;
class ex1
{
public static void main(String args[])
{

/*System.out.println(Math.abs(-15));
System.out.println(Math.pow(2.3,3.1));
System.out.println((int)(Math.random()*100));
*/

//原本需要 加上MATH  但因為上方 static 的關係 所以不用再加入了

System.out.println(abs(-15));
System.out.println(pow(2.3,3.1));
System.out.println((int)(random()*100));
Scanner sc=new Scanner(System.in);


Date d1=new Date();

}

}

舉例:
class ex2
{
public static void main(String args[])
{
byte x=10;
Byte x2=new Byte("10");  //包覆類別
Byte x3=10;
System.out.println(x);
System.out.println(x3.toString()+2);


}


}

舉例:

class ex2
{
 public static void main(String args[])
 {
  byte x=10;
  Byte x2=new Byte("10");
  Byte x3=10;
  System.out.println(x);
  System.out.println(x3.toString()+2);
  
  byte y=x3.byteValue();
  
  System.out.println(y);
  
  
  String name="abc";
  String name2=new String("abc"); //也可這樣打印
  
  System.out.println(name);
  System.out.println(name2);
 
 }


}









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)); } }
執行結果:









java - MVC,JFrame Form

MVC 
1.M (model ) => class + Data Base
2 V (view ) =>  UI
 3C(coutrals ) => 操作
Integer , parse Int


JFrame Form(main) / Jpane  Form
1) containers 容器 (規劃 版面用) => panel (面板)
2.) controls (控制項元件)
      a. Label = > 標籤
      b. Textfield = >  文字欄位
      c.Button => 按鈕
      d.Text Area => 文字區
 
3.) preference ,  屬性
1. preference => 外觀
2.birding
3.events = > 事件 = > 操作方式
4.code => 撰寫 程式碼 soura 要的設定

2019年1月15日 星期二

java - 說說JAVA "New" 建構式 回傳值、封裝

(一) 如何執行(run)Java 程式
1.跨平台 => 使用jre 進行不同系統溝通


2.無法執行(run)  class 檔  已經有安裝JRE  且有產生出Class 檔案 卻無法執行 原因.
=> *.class =>  編譯完成
       a) 動態.class 檔案 =>  可以run  => main
       b) 靜態.class 檔案=>  不能run

class ex1     
{
 public static void main(String args[])
 {
 
 
 }


}
=======>> 可以被執行

class ex2
{



}
==========>> 不能被執行 沒有main 方法

(二)物件導向(objed)=> 很多物件導向 程式語言 都可以開發 Data Base
1.objet  (物件導向  多為服務 Data Base)
2.資料庫 => 資料表(Table) => 表格(所有資料物件)
a)每一筆資料物件的屬性,舉例: 可分為標題 欄名稱 、列名稱,  他們需要有相同的屬性 或類型 相同 但是內容可以不同  像是  姓名的欄位  都要填入個人名稱 不能填入  身高體中 等其他不同資料,填入的個人姓名可以不同。


(三) 新增物件的方法
語法:

類別  物件名 = new  類別[(引數)];

※類別  物件名 => 宣告物件名 => 確定物件的referemce = > 使用的 class

※new  類別[(引數)]; =>物件的實例化

※ 類別 跟 類別[(引數)]    要一樣或者有關係

(四).new  => 實例化 步驟
1.stack => 記憶體的堆疊區
2.hoap,初始值 => 存放值的位置
3.執行Constructors 建構式的內容

(五) Coustrudors 建構式
1."new"新增物件最後執行的步驟.
2.語法: 
建構式名([引數])
{
執行的步驟.....
}

建構式名與 class 名稱一樣,新增"NEW" 新增的時候就會啟動建構式


3.變數的生命週期
a) Local 區域
b)alobal 全區
c) 物件類的變數  => this.  變數(field)

4.Overloading
=>參載化多種狀況
a) 名稱一樣
b)引數不一樣

建構式 (英語: Constructor;別稱:構造方法建構函式、建構子)

1.主要用處是:初始化你的成員屬性(變量)
2.構造方法名和類名相同
3.構造方法沒有返回值
4.在創建新對象時,系統自動調用該類的構造方法
5.一個類可以有多個構造方法
6.每個類都有一個默認的構造方法



範例:
class add
{
public static void main(String args[])
{


member m1=new member();
member m2=new member();


System.out.println(m1);
System.out.println(m1.name);
System.out.println(m1.address);
System.out.println(m1.phone);
System.out.println(m1.x);
System.out.println(m1.x2);
System.out.println(m2);



}


}


class member
{
String name;
String address;
int phone;
double x;
boolean x2;

member()
{
System.out.println("新增一位會員"); //與class  同名時 自動啟用建構式

}


}
執行結果:












範例:
class Order
{
String name;
int lcd = 60;
int ram;
int mouse;
int sum;
//int lcd;  已有變數 無法編譯
Order()
{
int lcd; //不同作用域 可以編譯
System.out.println("新增訂單");
}


void show()
{
System.out.println("名:"+name+
"\tlcd:"+lcd+
"\tram:"+ram+
"\tmouse:"+mouse+
"\tsum:"+sum);

}


}
執行結果:






作用域:

class aa :
{

}






範例:
class Order
{
 String name;
 int lcd;
 int ram;
 int mouse;
 int sum;
 
 Order(int lcd)
 {
  this.lcd=lcd; //加上this後 lcd 會變成全局變數
  
  //int lcd=80;
  //System.out.println("新增訂單");
 }
 
 
 void show()
 {
  System.out.println("名:"+name+
  "\tlcd:"+lcd+
  "\tram:"+ram+
  "\tmouse:"+mouse+
  "\tsum:"+sum);
 
 }


}



class add2
{
 public static void main(String args[])
 {
  Order o1=new Order(60);
  
  
  o1.show();
 
 }



}
執行結果:





範例:
class Order
{
String name;
int lcd;
int ram;
int mouse;
int sum;

Order(String name,int lcd,int ram,int mouse)
//要傳入多少變數  就需要放多少值進去
{
this.name=name;
this.lcd=lcd;
this.ram=ram;
this.mouse=mouse;

sum=lcd*4999+ram*1280+mouse*650;
//sum 沒有轉成全局變數 所以可傳值回去
//this.sum=this.lcd*4999+this.ram*1280+this.mouse*650;

//int lcd=80;
//System.out.println("新增訂單");
}


void show()
{
System.out.println("名:"+name+
"\tlcd:"+lcd+
"\tram:"+ram+
"\tmouse:"+mouse+
"\tsum:"+sum);

}


}


class add2
{
public static void main(String args[])
{
Order o1=new Order("abc",1,1,1);//要傳入多少變數  就需要放多少值進去


o1.show();

}



}
執行結果:




範例:
class Order
{
String name;
int lcd;
int ram;
int mouse;
int sum;

Order(String name,int lcd,int ram,int mouse)//上面有加上名子所以 如果回傳參數有此值 會自動引用此方法
{
this.name=name;
this.lcd=lcd;
this.ram=ram;
this.mouse=mouse;

sum=lcd*4999+ram*1280+mouse*650;
//this.sum=this.lcd*4999+this.ram*1280+this.mouse*650;

//int lcd=80;
//System.out.println("新增訂單");
}

Order(int lcd,int ram,int mouse)//下方無名子所以  會自動引用此方法
{
this.lcd=lcd;
this.ram=ram;
this.mouse=mouse;

sum=lcd*4999+ram*1280+mouse*650;
}


void show()
{
System.out.println("名:"+name+
"\tlcd:"+lcd+
"\tram:"+ram+
"\tmouse:"+mouse+
"\tsum:"+sum);

}


}
class add2
{
public static void main(String args[])
{
Order o1=new Order(1,1,1); //根據的不同會傳的參數也會不相同


o1.show();

}



}
執行結果:




範例:
class Order
{
String name;
int lcd;
int ram;
int mouse;
int sum;

Order(String name,int lcd,int ram,int mouse)
{
this.name=name;
this.lcd=lcd;
this.ram=ram;
this.mouse=mouse;

sum=lcd*4999+ram*1280+mouse*650;
//this.sum=this.lcd*4999+this.ram*1280+this.mouse*650;

//int lcd=80;
//System.out.println("新增訂單");
}

Order(int lcd,int ram,int mouse)
{
this.lcd=lcd;
this.ram=ram;
this.mouse=mouse;

sum=lcd*4999+ram*1280+mouse*650;
}

Order(String name,int lcd)
{
}
Order(int lcd,int ram)
{
}
Order(int lcd,String name) //跟上方位置不同所可執行
{
}

/*Order(int x,int y) //執行會報錯 應為上限 以已經有相同 int + int 的類型
{
}*/
void show()
{
System.out.println("名:"+name+
"\tlcd:"+lcd+
"\tram:"+ram+
"\tmouse:"+mouse+
"\tsum:"+sum);

}


}


class add2
{
public static void main(String args[])
{
Order o1=new Order(1,1,1);


o1.show();

}



}



(六) UML (unified Modeling Language)
類別圖
Ex: 設計學員成就管理系統
需求 1
每一筆 學生成績紀錄多個引用
=> 名子 國 英文 數學  總分 平均
=> 資料庫要保密
需求2
新增方式
a) 列入 名稱 國 英文 數學
b) 計算 總分平均
c)分數需 0~ 100

(七) Methods 方法
1. 需先搭配封裝 原則
2. 主要目的應用 =>讀取與修改fild 內容

3.語法:
類型   方法名(引數)
{
步驟.........
}

4.類型分為
a. 不傳值類 => void
b) 傳值類  => return

代碼: 

class student
{
private String name;
     private int chi;
     private int eng ;
     private int math;
private int sum;
     private double ave ;

student(String name,int chi,int eng,int math)
{
if (chi >= 0 && chi <=100 && eng>=0 && eng<=100 && math>=0 && math<=100)
{this. name =  name;
         this. chi = chi;
         this. eng = eng ;
         this. math = math;

sum =  chi + eng + math;

ave =   sum/ 3;
     

}

}

void show()
{
System.out.println("姓名:"+name+
"\t國語:"+chi+
"\t英文:"+eng+
"\t數學:"+math+
"\t總分:"+math+
"\t平均:"+ave);

}

}
class add3
{
public static void main(String args[])
{
student o3=new student("王大名",21,11,21);


o3.show();
//s.eng =  85

o3.show();

}



}

#Methods(方法)
1.封裝原則 =>field
2.主要應用目的 =>設計程式開發完成後,所需的修改與讀取或其他功能
=> read ; write 

3.語法:

類型  方法名[ 引數 ]    => 宣告
{
步驟........ ) 方法內容 (body)
}

4.類型
a) 不傳值 =>void  
b) 傳值     =>return      與 "= " 等號( assign ) 的意思一樣
return 只能傳一個數值回來(傳回方法名)

5.overloading
a) 名稱一樣
b) 引數不一樣


6. 常使用命名習慣 getter / setter 
read => 讀取類型  = >  get 方法名( )  (傳值類)
write=> 修改類型 = >  set   方法名()  ; void 
class student
{
private String name;
     private int chi;
     private int eng ;
     private int math;
private int sum;
     private double ave ;
 
student(String name,int chi,int eng,int math)
{
if (chi >= 0 && chi <=100 && eng>=0 && eng<=100 && math>=0 && math<=100)
{this. name =  name;
         this. chi = chi;
         this. eng = eng ;
         this. math = math;
 
sum =  chi + eng + math;
 
ave =   sum/ 3;
         
 
}
 
 
 
}
 
void changeChi(int chi)  //執行完成後 消失
{
this.chi = chi;
sum =  chi + eng + math;
ave =   sum/ 3;
}
 
 
int changeChi2(int chi)   //前面如果為void  不會有回傳值
                          // 如果加上  int 代表有回傳值   需要跟reture  的類型相同
{
this.chi = chi;
sum =  chi + eng + math;
ave =   sum/ 3;
return  chi   ;   //需跟上面  同一個類型 都為 int
}
 
void setName(String name)  //set 命名可以被修改類
{
this.name=name;
}
String getName()            //get 命名可以被  讀取類
{
return name;
}
void setChi(int chi)        //set 命名可以被修改類  
{
this.chi=chi;

}

void setEng(int eng)        //set 命名可以被修改類
{
this.eng=eng;

}


void abc(int x)
{
}

void abc(int x,int y)
{

}

/*void abc(int a,int b)//會報錯 上面已有相同類性
{
}*/

int abc(double z,int a)
{
return 0;
}

int abc(double z,int a,int u)
{
return 0;
}

void show()
{   

    sum=chi+eng+math;
        ave=sum/3.;         //把最後結果寫在 輸出的地方  可以減少錯誤或忘記





System.out.println("姓名:"+name+
"\t國語:"+chi+
"\t英文:"+eng+
"\t數學:"+math+
"\t總分:"+math+
"\t平均:"+ave);

}
 

}


class add3
{
public static void main(String args[])
{
student o3=new student("王大名",21,11,21);
student o6=new student("陳牙牙",89,81,34);

System.out.println("=========================");
//s1.changeChi(80);
//s2.changeChi(77);
o3.changeChi2(80);
o6.changeChi2(77);
System.out.println("=========================");



o3.show();
//s.eng =  85
o3.changeChi(100);
o3.show();

System.out.println("加總="+(o3.changeChi2(1)+o6.changeChi2(2)));
o3.show();
o6.show();
}



}
執行結果: