通過第一章掌握了面向對象的理論后,我們知道每個對象必定屬于一個類型,那么Java如何創(chuàng)建新的數(shù)據(jù)類型?如下程序所示:
class Circle { // 屬性 // 方法}如上所示,使用關鍵字class定義了類Circle,用花括號{ }將整個類包括起來。當然,這個類還不能做任何事,它還需要定義一些屬性和方法。
2.2屬性和方法面向對象的一個特性就是將數(shù)據(jù)和方法結合起來。比如對一個圓抽象,可見圓有它的屬性半徑,它還有方法,如告訴我們它的周長和面積。不光是圓,其他任何對象都有它的屬性和方法,針對這樣的特點,面向對象就把屬性和方法結合起來。如下程序所示:
class Circle { double radius;// 半徑 Circle() {}// 構造器 double getArea() { return 3.14 * radius * radius; }// 獲取面積 double getPerimeter() { 2 * 3.14 * radius; }// 獲取周長}其中 Circle() {}是類Circle的構造器,它雖未做任何事,但它是用來在創(chuàng)建對象時初始化對象的,構造器的名字必須和類名相同。
值得一提的,類的屬性都有默認值,這里的radius的默認值是 0.0。此外,屬性以及方法的參數(shù)和返回值不僅可以是基本數(shù)據(jù)類型,還可以是引用數(shù)據(jù)類型,也就是對象和數(shù)組,如下所示
class MyClass { boolean bo; char c; byte b; short s; int i; long lo; float f; double d; String str; void getDefaultFieldValue() { PRint(bo);// false print(c);// '/0' print(b);// 0 print(s);// 0 print(i);// 0 print(lo);// 0 print(f);// 0.0 print(d);// 0.0 print(str);// null } String fun(String[] s) {// 返回值和參數(shù)可以是引用數(shù)據(jù)類型 return s[1]; }}2.3創(chuàng)建對象有了類以后,就要創(chuàng)建對象了。創(chuàng)建對象很簡單,直接使用new創(chuàng)建即可,比如我們要創(chuàng)建一個Circle對象
new Circle();
這里使用了括號,很容易使我們想到方法,因此創(chuàng)建對象的同時必定調用了一個方法,即構造器。我們也可以向構造器傳入?yún)?shù),但前提是類必須要定義帶有參數(shù)的構造器。
2.4用引用操縱對象創(chuàng)建對象后就該拿來使用,那如何操縱對象呢?用引用操縱對象,打個比方,我們創(chuàng)建了電視機這樣的對象,它是放在堆里的,但平時我們總是使用遙控器控制它,遙控器就相當于引用變量,它是放在堆棧里的,這個引用變量不光可以控制一個電視機,當我們再創(chuàng)建一個相同的電視機時,這個引用變量也可以控制它。如下圖解

上圖說明了遙控器A(電視機的引用變量)能控制電視機 A(一個電視機對象)。遙控器A還可以改變它所控制的對象,轉而控制電視機 B 或 C,如下所示

如上所示,遙控器 A既可以控制電視機 A,也可以改變控制方向,控制電視機 B。用Java程序來說明,如下
Television tv = new Television();// 電視機Atv.on();// 打開電視機Atv.off();// 關閉tv = new Television();// 引用變量tv轉而控制電視機Btv.on();tv.off();
可見,一個電視機引用變量就可以控制電視機 A 或 B。
除了用遙控器間接操縱對象,也可以直接按電視機的按鈕,那就是直接操縱匿名對象,如下所示
new Television().on();// 打開電視機Anew Television().on();// 打開電視機B
然而,因為對象是匿名的,所以用過一次后就找不到它了,因此上述程序的兩臺電視機再也無法關閉了。
2.5永遠不需要銷毀對象使用完對象后,就得把對象銷毀掉,在Java中都是通過垃圾回收器自動銷毀對象的。那么當對象超出其作用域時會不會馬上被銷毀呢?不會,即使整個程序退出了,對象還不會馬上被銷毀,垃圾回收器總會在適當?shù)臅r間銷毀對象。
關于對象的創(chuàng)建和銷毀涉及了JVM的內存分配和回收的機制,若要詳細闡述,定會超出本文篇幅,且不再本文討論范圍,故此一筆略過。
2.6第一個Java程序終于可以編寫第一個Java程序了,這里就展示經(jīng)典的 Hello, world 程序
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world"); }}逐行解釋一下,public指的是訪問控制符,這里的意思是HelloWorld是公共類,它可以在包外被訪問,此外一個Java文件只能有一個public類,可以包含任意多個非public類,文件名必須和public類的名字相同。第二行指的是main方法,它必須要用public和static修飾,如果把public改為其它修飾符,或者去掉static,結果是雖然通過了編譯,但是運行時報錯。String[] args是main方法的參數(shù),指的是接收String數(shù)組,比如我輸入命令"java HelloWorld hello world"讓程序運行,那么String數(shù)組的第一個元素是hello,第二個元素是world。第三行打印結果,System是一個Java類庫定義好的類,out是它的一個屬性,或者說成員,是引用數(shù)據(jù)類型的。第三行所做的事是,類System的成員調用println方法打印了"Hello, world"。
新聞熱點
疑難解答