core java 第四章筆記,corejava
import java.util.*;public class Employee { private static int nextid = 1; private String name; private double salary; private int id; public Employee(String n,double s) { name = n; salary = s; id = 0; } public String getname() { return name; } public double getsalary() { return salary; } public int getid() { return id; } public void setid() { id = nextid; nextid++; } public static int getnextid() { return nextid; } public static void mian(String[] args) { Employee e = new Employee("Harry",50000); System.out.println(e.getname()+" "+e.getsalary()); } public static void main(String[] args) { // TODO 自動產生的方法存根 Employee[] staff = new Employee[3]; staff[0]=new Employee("TOM",40000); staff[1]=new Employee("Dick",60000); staff[2]= new Employee("Harry",65000); for(Employee e : staff) { e.setid(); System.out.println("name="+e.getname()+"id="+e.getid()+"salary="+e.getsalary()); } int n = Employee.getnextid(); System.out.println("next available id = "+n); }}
1/類中的方法被標記為public。關鍵字public意味著任何類的任何方法都可以調用這些方法。
2/在類中使用
private int a;
意味著只有類本身的方法能夠訪問這些執行個體域,而其他類的方法不能夠讀寫這些域。
3/有時候,某個執行個體域本身就是對象,比如我們在類中定義一個private String name;name域是String類對象,類通常包括類型屬於某個類類型的執行個體域。
4/構造器與類重名,當我們在構造一個類的對象的時候,構造器就會運行,以便將執行個體域初始化為所希望的狀態。
5/構造器總是伴隨著new操作符的執行被調用,不能對一個已經存在的對象調用構造器來達到重新設定執行個體域的目的。
比如:
staff[0]=new Employee("diyige",75000,1987,12,25);
A、構造器與類同名。
B、每個類可以有一個以上的構造器。
C、構造器可以有0個,1個,或者多個參數。
D、構造器沒有傳回值。
E、構造器總是伴隨著new操作一起調用。
F、不要再構造器中構造與執行個體域重名的局部變數。
6/在每一個方法中關鍵字this表示隱式參數,比如;
public void raisesalary(double bypercent){ double raise = this.salary*bypercent/100; this.salary = this.salary + raise;}
在這個方法中,double bypercent被稱為顯示參數。
7/僅僅是查看並返回對象的狀態而不對執行個體域做出修改的方法稱為訪問器方法。
對執行個體域做出修改的方法稱為更改器方法。
8/可以將執行個體域定義為final,構建對象時必須初始化這樣的域。也就是說,必須確保被一個構造器執行之後,這個域的值被設定,並且在後面的操作中,不能夠對它進行修改。上面的程式中Employee類中的name就可以聲明為final,因為物件建構後,名字這個值就不會再被修改。
10/static關鍵字代表著執行個體域屬於類,不屬於任何的對象。
例如在Math類中定義一個靜態常量。
Public class Math(){ ······ public static final double PI = 3.1415926; ······}
在程式中就可以使用Math.PI的形式來獲得這個常量。
如果static被省略,PI就會變成Math的一個執行個體域,那麼就只有通過Math類的對象來訪問PI,而且每一個Math對象都有它自己一份對PI的拷貝。
11/靜態方法是一種不能向對象操作的方法,例如:Math類中的pow()方法就是一個靜態方法。
Math.pow(x,a);
在運算中不使用任何的Math對象。也就是說沒有隱式參數。所以也可以認為是一個沒有this參數的方法。在Employee類中,靜態方法不能訪問id執行個體域,因為它不能操作對象,但是靜態方法可以訪問自身的靜態域。
例如:
public static int getnextid(){ return nextId;}
可以通過類名調用這個方法:
int n = Employee.getnextid();
也是可以省略掉static的,但是如果省略掉就必須通過Employee類的對象來調用這個方法。
一般兩種情況使用靜態方法:
A:一個方法不需要訪問對象的狀態,其所需要的參數都是通過顯式參數提供。
B:一個方法只需要訪問類的靜態域。
我們最常見的main方法也是一個靜態方法,因為它不對任何的對象進行操作。當我們啟動eclipse的時候還沒有一個對象呢。
12/程式設計語言中將參數傳遞給方法有三種方式:
按值調用:表示方法接受的是調用者提供的值。
引用調用:表示方法接受的是調用者提供的變數地址。
名稱調用:這種傳遞方式已經成為曆史。
在Java的世界裡,總是採用按值調用。
方法參數的兩種類型:
A.基礎資料型別 (Elementary Data Type)
B.對象引用
當java進行基礎資料型別 (Elementary Data Type)行的引用的時候,不會改變其數值。進行對象引用的時候,則會改變。
13/在編寫構造器的時候可以在每一個參數的前面加上一個a,增強代碼的可讀性。
14/如果在構造器中的第一個語句形如this(···);這個構造器將調用同一類的 另一個構造器,這樣公用的構造器代碼只編寫一次就可以了。
15/Java允許使用包將類組織起來。使用包的主要原因是確保類名的唯一性。為了保證包名的絕對唯一性,sun公司建議將公司的網際網路網域名稱以逆序的形式作為包名。
一個類可以使用所屬包的所有類,以及其他包的公有類。我們可以採用兩種方式,第一種是在每個類名前添加完整的包名。例如:
java,util.Date today = new java.util.Date();
這種方式真的很殘廢。
另外一種是用
import java.util.*;
就可以匯入java.util包中的所有類。
Import java.util.Date;
可以匯入一個包中的特定類。