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)
類別圖
需求 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();
}
}
執行結果:
沒有留言:
張貼留言