Java基础知识(一)
一、接口
類描述了一個實體,包括實體的狀態,也包括實體可能發出的動作。
接口定義了一個實體可能發出的動作。但是只是定義了這些動作的原型,沒有實現,也沒有任何狀態信息。
所以接口有點象一個規范、一個協議,是一個抽象的概念;而類則是實現了這個協議,滿足了這個規范的具體實體,是一個具體的概念。
從程序角度,簡單理解,接口就是函數聲明,類就是函數實現。需要注意的是同一個聲明可能有很多種實現。
接口的作用:
? ? ? 1)通過接口可以實現不相關類的相同行為,而不需要了解對象所對應的類。
? ? ? 2)通過接口可以指明多個類需要實現的方法。
? ? ? 3)通過接口可以了解對象的交互界面,而不需了解對象所對應的類。
總的來講,接口的意義是:規范、擴展和回調。二、抽象類
? ? ? ? 在了解抽象類之前,先來了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為:
abstract void fun();? ? ? ? 抽象方法必須用abstract關鍵字進行修飾。如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。因為抽象類中含有無具體實現的方法,所以不能用抽象類創建對象。
abstract class ClassName {abstract void fun(); }
? ? ? ? 從這里可以看出,抽象類就是為了繼承而存在的,如果你定義了一個抽象類,卻不去繼承它,那么等于白白創建了這個抽象類,因為你不能用它來做任何事情。對于一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那么就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。
包含抽象方法的類稱為抽象類,但并不意味著抽象類中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變量和普通的成員方法。注意,抽象類和普通類的主要有三點區別:
? ? ? 1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認為public。
? ? ? 2)抽象類不能用來創建對象;
? ? ? 3)如果一個類繼承于一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。
在其他方面,抽象類和普通的類并沒有區別。
三、內部類
? ? ? ? 為什么要使用內部類?在《Think in java》中有這樣一句話:使用內部類最吸引人的原因是:每個內部類都能獨立地繼承一個(接口的)實現,所以無論外圍類是否已經繼承了某個(接口的)實現,對于內部類都沒有影響。
? ? ? ? 在我們程序設計中有時候會存在一些使用接口很難解決的問題,這個時候我們可以利用內部類提供的、可以繼承多個具體的或者抽象的類的能力來解決這些程序設計問題。可以這樣說,接口只是解決了部分問題,而內部類使得多重繼承的解決方案變得更加完整。
public interface Father {}public interface Mother {}public class Son implements Father, Mother {}public class Daughter implements Father{class Mother_ implements Mother{} }
? ? ? ? 其實對于這個實例我們確實是看不出來使用內部類存在何種優點,但是如果Father、Mother不是接口,而是抽象類或者具體類呢?這個時候我們就只能使用內部類才能實現多重繼承了。
? ? ? ? 其實使用內部類最大的優點就在于它能夠非常好的解決多重繼承的問題,但是如果我們不需要解決多重繼承問題,那么我們自然可以使用其他的編碼方式,但是使用內部類還能夠為我們帶來如下特性(摘自《Think in java》):
? ? ? 1、內部類可以用多個實例,每個實例都有自己的狀態信息,并且與其他外圍對象的信息相互獨立。
??????2、在單個外圍類中,可以讓多個內部類以不同的方式實現同一個接口,或者繼承同一個類。
??????3、創建內部類對象的時刻并不依賴于外圍類對象的創建。
??????4、內部類并沒有令人迷惑的“is-a”關系,他就是一個獨立的實體。
??????5、內部類提供了更好的封裝,除了該外圍類,其他類都不能訪問。
想了解更多信息,請看 java提高篇(八)----詳解內部類。
四、父類的靜態方法能否被子類重寫?
不能
? ? ? ? 子類繼承父類后,用相同的靜態方法和非靜態方法,這時非靜態方法覆蓋父類中的方法(即方法重寫),父類的該靜態方法被隱藏(如果對象是父類則調用該隱藏方法),另外子類可以繼承父類的靜態與非靜態方法。
五、Java數據類型
? ? ? ? 變量就是申請內存來存儲值,也就是說,當創建變量的時候,需要在內存中申請空間,內存管理系統根據變量的類型為變量分配存儲空間,分配的空間只能用來存儲該類型數據,因此通過定義不同類型的變量,可以在內存中存儲整數、小數或者字符,Java 的兩大數據類型:基本數據類型和引用數據類型。
基本數據類型:
Java 語言提供了八種基本類型,六種數字類型(4 個整數型,2 個浮點型),一種字符類型,還有一種布爾型。
byte:
byte 數據類型是 8 位、有符號的,以二進制補碼表示的整數;
最小值是?-128(-2^7);
最大值是?127(2^7-1);
默認值是?0;
byte 類型用在大型數組中節約空間,主要代替整數,因為 byte 變量占用的空間只有 int 類型的四分之一;
例子:byte a = 100,byte b = -50。
short:
short 數據類型是 16 位、有符號的以二進制補碼表示的整數
最小值是?-32768(-2^15);
最大值是?32767(2^15 - 1);
Short 數據類型也可以像 byte 那樣節省空間。一個 short 變量是 int 型變量所占空間的二分之一;
默認值是?0;
例子:short s = 1000,short r = -20000。
int:
int 數據類型是 32 位、有符號的以二進制補碼表示的整數;
最小值是?-2,147,483,648(-2^31);
最大值是?2,147,483,647(2^31 - 1);
一般地整型變量默認為 int 類型;
默認值是?0?;
例子:int a = 100000, int b = -200000。
long:
long 數據類型是 64 位、有符號的以二進制補碼表示的整數;
最小值是?-9,223,372,036,854,775,808(-2^63);
最大值是?9,223,372,036,854,775,807(2^63 -1);
這種類型主要使用在需要比較大整數的系統上;
默認值是?0L;
例子: long a = 100000L,Long b = -200000L。
"L" 理論上不分大小寫,但是若寫成 "l" 容易與數字 "1" 混淆,不容易分辯。所以最好大寫。
float:
float 數據類型是單精度、32 位、符合 IEEE 754 標準的浮點數;
float 在儲存大型浮點數組的時候可節省內存空間;
默認值是?0.0f;
浮點數不能用來表示精確的值,如貨幣;
例子:float f1 = 234.5f。
double:
double 數據類型是雙精度、64 位、符合 IEEE 754 標準的浮點數;
浮點數的默認類型為 double 類型;
double 類型同樣不能表示精確的值,如貨幣;
默認值是?0.0d;
例子:double d1 = 123.4。
boolean:
boolean 數據類型表示一位的信息;
只有兩個取值:true 和 false;
這種類型只作為一種標志來記錄 true/false 情況;
默認值是?false;
例子:boolean one = true。
char:
char 類型是一個單一的 16 位 Unicode 字符;
最小值是?\u0000(即為 0);
最大值是?\uffff(即為 65,535);
char 數據類型可以儲存任何字符;
例子:char letter = 'A';。
引用類型:
在 Java 中,引用類型的變量非常類似于 C/C++ 的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定為一個特定的類型,比如 Employee、Puppy 等。變量一旦聲明后,類型就不能被改變了。
對象、數組都是引用數據類型。
所有引用類型的默認值都是 null。
一個引用變量可以用來引用與任何與之兼容的類型。
例子:Site site = new Site("Runoob")。
六、Java虛擬機的特性
? ? ? ? Java 語言的的一個非常重要的特點就是與平臺的無關性,而使用 Java 虛擬機是實現這一特點的關鍵,一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼,而引入 Java 語言虛擬機后,Java 語言在不同平臺上運行時不需要重新編譯,Java 語言使用模式 Java 虛擬機屏蔽了與具體平臺相關的信息,使得 Java 語言編譯程序只需要生成在 Java 虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行,Java 虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。
總結
以上是生活随笔為你收集整理的Java基础知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome浏览器必装插件!尤其程序猿!
- 下一篇: Java基础——Java IO详解