●package套件(資料夾)
public =>可開放權限到不同套件(資料夾)
protected =>可開放權限到不同套件
deafult=>可開放權限到同一個套件
private =>可開放權限到同一個class
import(只要不是放在java.lang全部都要import)=>但import進來不一定要用來做繼承
 
*實作案例
UML:(#:protected)
1.先建立資料夾
=>專案下很多個資料夾,用dos去編譯會習慣停在專案的最上層位置,然後編譯時指定路徑
 
**做interface student2的說明
a.指定路徑要在最前面加上package,這樣java才找的到路徑,從專案最上面開始寫 ,如:package school.stu;
b.這就是一個school專案,找的方式是school中的stu中的student2.class
c.以後做資料夾要習慣在最前面指定路徑
2.開始寫 A.class
狀況一:
A.java
package school.sa;
class A extends student {
     private int chi;
}
**說明
1.如果如上作法,會發現錯誤訊息,代表找不到student class,因為java會先去school.sa找這個class,找不到就會去java.lang找,但還是找不到就出現上述訊息
2.所以要指定路徑,使用import,寫在package和class中間
3.寫import要寫到class name為止
 
正確寫法:
A.java
package school.sa;
import school.stu.student;
class A extends student {
     private int chi;
}
 
狀況二
A.java
package school.sa;
import school.stu.student;
class A extends student {
     private int chi;
}
**說明
1.import後還是出現錯誤訊息,因為要對方授權了才能使用student class(因為在不同資料夾)
2.所以在student class前加上public=>public class student{...}
 
狀況三
**說明
1.開放了student class的權限以後,還是有錯誤訊息,因為student的建構式不是public,super不能存取不同套件的建構式()
2. 查完class就會去查建構式所以要一起改不然無法繼承,所以改成public student(String name){ this.name=name; }
 
implements student2的做法比照上述辦理
student2.java
package school.stu;
public interface student2{  }
 
A.java
package school.sa;
import school.stu.student;
import school.stu.student2;
class A extends student implements student2{....}
 
**說明
A.class要implements interface student2也是如上做法,先import並開放權限
 
2.寫B.class,做法與A.class同,留意資料夾位置即可
B.java
package school.sb;
import school.stu.student;
import school.stu.student2;
 
class B extends student implements student2{
private int eng;
B (String name,int eng){
super(name);
this.eng=eng;
}
}
 
3.先測試一下上述內容,編寫main程式
狀況一
add.java
package school.main;
class add{
public static void main(String args[]){
     student s=new student("kent");
}
}
**說明
1.出現錯誤訊息,找不到student class
2.所以要加入import school.stu.student;
 
狀況二
//要測試show()功能
add.java
package school.main;
import school.stu.student;
class add{
public static void main(String args[]){
student s=new student("kent");
System.out.println(s.show());
}
}
**說明
1.加了以後還是有錯誤訊息,因為show()的權限還沒開放
2.即使在class前面加了public也不代表裡面的內容都一起開放權限了,要改成如下:
public String show(){ return "名:"+name; }
3.在dos執行時,寫路徑的方式要調整,因為要送到java虛擬主機,所以要寫成java  school.main.add
 
class A比照 class student辦理
A.java
package school.sa;
import school.stu.student;
import school.stu.student2;
public class A extends student implements student2{
private int chi;
public A(String name,int chi){
super(name);
this.chi=chi;
}
}
 
add.java
package school.main;
import school.stu.student;
import school.sa.A;
class add{
    public static void main(String args[]){
student s=new student("kent");
System.out.println(s.show());
A a=new A("MAGGIE",80);
System.out.println(a.show());
}
}
**說明
1.要先import A的路徑
2.在A class和A的建構式前面加上public
 
4.把A.class對父類別做override
A.java
package school.sa;
import school.stu.student;
import school.stu.student2;
 
public class A extends student implements student2{
private int chi;
public A(String name,int chi){
super(name);
this.chi=chi;
} public String show(){
     return super.show()+"\t國文:"+chi;
}
}
**說明:
add.java不用改,就可輸出=>名:MAGGIE   國文:80
 
5. 把B.class對父類別做override
B.java
package school.sb;
import school.stu.student;
import school.stu.student2;
 
public class B extends student implements student2{
private int eng;
public B (String name,int eng){
super(name);
this.eng=eng;
}
public String show(){
     return super.show()+"\t英文:"+eng;
}
}
 
**說明:
1.add.java加入下述內容
B b=new B("may",87);
System.out.println(b.show());
2輸出=>名:may   英文:87
 
6.完成A_1.class,並在add測試
A_1.java
package school.sa;
import school.stu.student2;
 
public class A_1 extends A implements student2{
private int math;
public A_1(String name,int chi,int math){
super(name,chi);   
this.math=math;
}
public String show(){
     return super.show()+"\t數學:"+math;
}
}
 
add.java
package school.main;
import school.stu.student;
import school.sa.A;
import school.sb.B;
import school.sa.A_1;
class add{
public static void main(String args[]){
student s=new student("kent");
System.out.println(s.show());
 
A a=new A("MAGGIE",80);
System.out.println(a.show());
 
B b=new B("may",87);
System.out.println(b.show());
 
A_1 a1=new A_1("ANDY",65,91);
System.out.println(a1.show());
       }
}
 
**說明:
1.因為A_1和A放在同一個資料夾,所以不需要import A
2.add也要記得import A_1
3. A_1的建構是繼承A,要記得super()中是兩個引數
 
**注意:
假設把A_1 class放到A.java下會出現下列訊息
因為當有package時,多個class要寫在同一個檔,只能有一個public,如果要寫另外public一個要重新宣告一個檔
 
protected的說明,在studetn class加上一個protected的show2()
student.java 加上
protected String show2(){
return "name:"+name;
}
 
A.java 改成
public String show(){
return show2()+"\t國文:"+chi;
}
 
add.java 加上
student s=new student("kent");
System.out.println(s.show2());
執行時=> 出現錯誤訊息
 
正確做法 
add.java
A a=new A("MAGGIE",80);
System.out.println(a.show());
 
**說明:
1.protected和public都可以透過import來給不同資料夾的class使用
2.兩者的差別在於使用時,protected限定給子類別繼承用,沒有開放透過new物件的方式來存取,所以要使用就要寫一個子類別去繼承他來用
3.所以用a.show()就不會有問題,因為在A class已經繼承show2()來用
 
● 用netbeans做上述例子
1.建立school_2專案,這邊的是專案名稱,而非上述的package最上層名稱
2.在src下=>new=>java package,把資料夾建立好
3.在資料夾下新增class:
interface:new=>java interface
一般class:new=>java class
4.輸入程式碼
**找錯誤可以直接看紅色燈泡,或是點可以在主控台看詳細的錯誤訊息
**view=>show line-numbers勾選才會出現行數編號
**view=>show non-printable characters如果勾選會如下圖,出現段落標記符號
*@override,代表下方的method有作override,可加可不加
● 製作
1.做JAR檔
2.寫說明文件,註解寫法/**..../,因為要給人家用的是建構式和method(field鎖死了),所以寫在建構式前面
/**
*@參數(ex:author/version/para)
*/
3.練習
package school.sa;
import school.stu.student;
import school.stu.student2;
/**
 *
 * @author:maggie
 * @version:1.0
 * @學員管理系統<br>測試一下換行
 *
 */
public class student {
  private String name;
  public student(String name){
  this.name=name;
  }
/**
 *
 * @return:return the name user input
 */
  public String show(){
  return "名:"+name;
  }
 
說明:
1.之後轉黨會自動轉成html格式,所以可套用html語法ex:斷行要用<br>不是直接按enter,但不可套css
2.package和import不需要說明,所以說明要寫在package和class中間
3.說明要放在要解說的建構式或method前,只要打/**+enter就會自動跳出註解
 
4.轉檔:project名稱上按右鍵=>generate javadoc
=>預設會用ie打開這個轉好的檔案,如果沒有打開,可以到專案資料夾(school2)下的dist/javadoc找index.htm
=>return的說明出現了,但是@author和@version的說明沒出現
 
5.因為預設@author和@version是關閉的,所以要在專案上按右鍵=>properties=>Documenting=>勾選這兩個選項後才會出現
=>也可在這邊設定private是否要顯示,和設定瀏覽器上的網頁名稱
=>設定好關閉ie,重新做generate javadoc
 
**API=>Application Interface/應用程式介面(ex:Netbeans,eclipse)
實際上我們在用的應該是API的函式庫,就是放在jdk/lib下的內容
我們寫出來的class最後也會轉成jar檔(一個封裝壓縮檔,裡面放很多class)
 
7.轉為jar檔,先全部重新編譯一次,按上方的掃把工具,或是在project上面按右鍵選clean and build,下方出現此訊息代表轉檔完成
8.轉檔完後會把dist下的javadoc刪除,所以轉檔完後要再generate javadoc一次,要用的時候就把*.jar和javadoc一起copy出來用
 
9.要拿來使用,先開一個全新的project test,然後新增一個main.java
=>假設我們想要用student的show()功能,直接import school.stu.student;會出現找不到(因為是去java.lang找)
=>要在專案右鍵選properties=>Libraries=>Add JAR/Folder 指定jar檔的路徑
以後自己寫好的jar都可以這麼做
=>如果要用A就要import A, 要用B就要import B
 

  ● wrapper類別(包覆類別)
針對基本類別設計一個class出來,可以定義普通變數,也可以提供method(因為本身是class),有些甚至有建構式
=>這些method主要拿來轉型(casting)用(ex:字串轉整數)
=>在java.lang可查
ex:
Byte x=10; 和 byte x=10; 兩個一樣都只是用來定義普通變數
parseByte(String s)=>把String 轉成 byte等級的類型
=>通常是拿來把字串轉其他類別,因為鍵盤輸入的都是字串
 
ex:以昨天的netbeans練習為例 
  String Name=name.getText();
  //Interger class下的parseInt()method
  int Chi=Integer.parseInt(chi.getText());
  int Eng=Integer.parseInt(eng.getText());
  System.out.println("姓名:"+Name+
  "\n國文:"+Chi+
  "\n英文:"+Eng+
  "\n總分:"+(Chi+Eng));
  
● jar檔
靜態=>將class功能import來用
動態=>有main程式,可以直接操作
 
● 昨天範例要顯示加總內容,使用setText():void,內容限定字串(輸出輸入都要是字串,只有中間計算才轉換類型)
1.先把panel和textarea使用者畫面設計好,variable name設定為show
2.把原本的System.out.println改為show.setText();
  String Name=name.getText();
  int Chi=Integer.parseInt(chi.getText());
  int Eng=Integer.parseInt(eng.getText());
  show.setText("姓名:"+Name+
  "\n國文:"+Chi+
  "\n英文:"+Eng+
  "\n總分:"+(Chi+Eng));
 
 
arrow
arrow
    創作者介紹
    創作者 muchone 的頭像
    muchone

    簡單。生活。享受

    muchone 發表在 痞客邦 留言(0) 人氣()