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.基本數據類型
B.對象引用
當java進行基本數據類型行的引用的時候,不會改變其數值。進行對象引用的時候,則會改變。
13/在編寫構造器的時候可以在每一個參數的前面加上一個a,增強代碼的可讀性。
14/如果在構造器中的第一個語句形如this(···);這個構造器將調用同一類的 另一個構造器,這樣公共的構造器代碼只編寫一次就可以了。
15/Java允許使用包將類組織起來。使用包的主要原因是確保類名的唯一性。為了保證包名的絕對唯一性,sun公司建議將公司的因特網域名以逆序的形式作為包名。
一個類可以使用所屬包的所有類,以及其他包的公有類。我們可以采用兩種方式,第一種是在每個類名前添加完整的包名。例如:
java,util.Date today = new java.util.Date();
這種方式真的很殘廢。
另外一種是用
import java.util.*;
就可以導入java.util包中的所有類。
Import java.util.Date;
可以導入一個包中的特定類。