JDK Java Develop Kit 即Java開(kāi)發(fā)工具包
J2SDK Java2 Software Develop Kit Java軟件開(kāi)發(fā)包
JRE Java Runtime Environment 即Java運行環(huán)境,通常已包含在J2SDK中了.如果我們僅僅是為了運行Java程序,而不是從事Java開(kāi)發(fā),我們可以直接下載JRE,在我們的程序上安裝
Java開(kāi)發(fā)工具包(JDK)分為三個(gè)版本:J2SE J2EE J2ME
Java代碼是解釋執行的,我們使用Java編譯器將Java代碼編譯成字節碼,這是一種中間代碼,然后由Java解釋其解釋執行。而C++程序是編譯執行的,C++程序代碼被編譯為本地機器指令,然后執行
Java語(yǔ)言的一個(gè)重要特性就是在語(yǔ)言級支持多線(xiàn)程的程序設計。
Java是動(dòng)態(tài)的,其動(dòng)態(tài)特性是其面向對象設計方法的擴展。它允許程序動(dòng)態(tài)地裝入運行過(guò)程中所需要的類(lèi),這是我們采用C++語(yǔ)言進(jìn)行面向對象程序設計所無(wú)法實(shí)現的。
Java跨平臺的原理:通過(guò)Java虛擬機(JVM)來(lái)實(shí)現的。
Java應用程序的開(kāi)發(fā)周期包括編譯、下載、解釋和執行幾個(gè)部分。
Java編譯程序(javac.exe)將Java源程序翻譯為JVM可執行代碼——字節碼,Java編譯器不將對變量和方法的引用編譯為數值引用,而是將這些符號引用信息保留在字節碼中,由解釋器在運行過(guò)程中創(chuàng )建內存布局,然后再通過(guò)查表來(lái)確定一個(gè)方法所在的地址。
運行JVM字節碼的工作是由解釋器(java.exe)來(lái)完成的。解釋執行過(guò)程分三步進(jìn)行:代碼的裝入(由類(lèi)裝載器完成)、代碼的效驗和代碼的執行
Java的平臺獨立性是以JVM為基礎的,但JVM不是跨平臺的
j2sdk文件夾下
bin(binary二進(jìn)制):放的是java的可執行程序
demo:sun公司提供的一些例子程序
lib:類(lèi)庫和一些jre,java運行時(shí)的環(huán)境
比如一個(gè)編譯單元中有個(gè)public類(lèi)welcome,編譯(javac,編譯的是原文件)完成后生成了welcome.class文件,當用解釋器命令Java welcome時(shí),不是加載welcome.class這個(gè)文件,而是加載welcome這個(gè)類(lèi)
/* */注釋程序段 //單行注釋 /** */生成注釋文件
UltraEdit下的java文件,變紅色的是個(gè)類(lèi),比如:System就是個(gè)類(lèi),out是個(gè)對象,println是個(gè)方法,打印完后面的字符串后換行,print方法不換行,java中\n也表示換行
一維數組:在C中,可以這樣定義數組:int num[3],但在java中,數組在定義的時(shí)候是不能夠分配空間的,所以在[]里面不能寫(xiě)空間大小??梢匀缦露x:
int[] num; num=new int[3] 或 int[] num=new int[3]以給數組分配大小。
可以定義同時(shí)初始化:int[] num={1,2,3}
但int[] num;num={1,2,3}//error
也可以int[] num=new int[]{1,2,3}
int[] num=new int[3]{1,2,3}//error
二維數組:int [][] num;num=new int[3][4]
還可以這樣(每行分配不同長(cháng)度):int [][] num;
num=new int[3][];
num[0]=new int[5];
num[1]=new int[3];
num[2]=new int[2];
可以這樣int [][] num={{1,2,3},{4,5},{6}}
java中移位運算符:<<左移 >>帶符號右移 >>>無(wú)符號右移 x<<2左移兩位 左移一位乘以2,右移一位除以2
要查一個(gè)方法的時(shí)候首先要知道方法所在的包名,比如java.lang,包下面是類(lèi)庫中的類(lèi),java中所有基本數據類(lèi)型都有相對應的類(lèi),比如Integer、double、float、Character
類(lèi)是創(chuàng )建對象的模板,對象是類(lèi)的實(shí)例。類(lèi)實(shí)質(zhì)上定義的是一種數據類(lèi)型,這種數據類(lèi)型就是對象類(lèi)型。所以我們可以使用類(lèi)名稱(chēng)來(lái)聲明對象變量。聲明對象變量后,還不能使用對象。必須用運算符new創(chuàng )建對象實(shí)體之后,才能使用對象。
例如:有一個(gè)類(lèi)Point
Point pt; //聲明對象
pt=new Point();//常見(jiàn)對象實(shí)體
pt.x……
類(lèi)的構造方法:
構造方法的名字和類(lèi)名相同,并且沒(méi)有返回值
構造方法主要用于為類(lèi)的對象定義初始化狀態(tài)
我們不能直接調用構造方法,必須通過(guò)new關(guān)鍵字來(lái)自動(dòng)調用,從而創(chuàng )加類(lèi)的實(shí)例
java的類(lèi)都要求有構造方法,如果沒(méi)有定義構造方法,java編譯器會(huì )為我們提供一個(gè)缺省的構造方法,也就是不帶參數的構造方法。當我們用缺省的構造方法初始化對象時(shí),系統用默認值初始化對象的成員變量。但只要類(lèi)中自己提供了構造函數,那么java就不會(huì )提供缺省的構造方法。
各種數據類(lèi)型的默認值為:數值型 0;boolean false; char ‘\0‘; 對象 null;
new關(guān)鍵字的作用:
為對象分配內存空間
引起對象構造方法的調用
為對象返回一個(gè)引用
反編譯工具javap.exe會(huì )將成員變量和成員方法的信息打印出來(lái),它加載的是類(lèi)
方法的重載的構成條件:方法名相同,但參數類(lèi)型或參數個(gè)數不同
特殊變量this
this變量代表對象本身
當類(lèi)中有兩個(gè)同名變量,一個(gè)屬于類(lèi)(類(lèi)的成員變量),而另一個(gè)屬于某個(gè)特定的方法(方法中的局部變量),使用this區分成員變量和局部變量
使用this簡(jiǎn)化構造函數的調用。例如:
class Point
{
int x,y;
Point(a,b)
{
x=a;
y=b;
}
Point()
{
this(1,1) //會(huì )調用帶參數的構造函數
}
void output()
{
System.out.println(x);
System.out.println(x);
}
public static void main(String[] args)
{
Point pt;
pt=new Point();
pt.output();
}
}
一個(gè)類(lèi)所有的實(shí)例(對象)調用的成員方法在內存中只有一份拷貝,盡管在內存中可能有多個(gè)對象。而數據成員在類(lèi)的每個(gè)對象所在內存中都存在著(zhù)一份拷貝。this變量允許相同的實(shí)例方法為不同的對象工作。每當調用一個(gè)實(shí)例方法時(shí),this變量將被設置成引用該實(shí)例方法的特定的類(lèi)對象。方法的代碼接著(zhù)會(huì )與this所代表的對象的特定數據建立關(guān)聯(lián)
關(guān)鍵字static
靜態(tài)方法和靜態(tài)變量是屬于某一個(gè)類(lèi),而不屬于類(lèi)的對象
靜態(tài)方法和靜態(tài)變量的引用直接通過(guò)類(lèi)名引用
在靜態(tài)方法中不能調用非靜態(tài)的方法和引用非靜態(tài)的成員變量。但反之,可以
可以用類(lèi)的對象obj去調用靜態(tài)的方法method(),如obj.method()
類(lèi)變量和類(lèi)方法在類(lèi)加載的時(shí)候也被加載并分配了內存空間
常量的定義
使用關(guān)鍵字final定義常量(其值在運行時(shí)不能改變):final double PI=3.1415926
作為一種約定,在定義常量時(shí),通常采用大寫(xiě)形式
final常量可以在聲明的同時(shí)賦初值,也可以在構造函數中賦初值(若為static常量則不可)
為了節省內存,我們通常將常量聲明為靜態(tài)的(static):static final double PI=3.1415926
在Java中,通過(guò)關(guān)鍵字extends繼承一個(gè)已有的類(lèi),被繼承的類(lèi)稱(chēng)為父類(lèi)(超類(lèi),基類(lèi)),新的類(lèi)稱(chēng)為子類(lèi)(派生類(lèi)):class Fish extends Animal
在Java中,不允許多繼承。構造方法是不能被繼承的
在子類(lèi)中定義一個(gè)與父類(lèi)同名、返回類(lèi)型、參數類(lèi)型均相同的一個(gè)方法,稱(chēng)為方法的覆蓋。覆蓋發(fā)生在子類(lèi)與父類(lèi)之間
特殊變量super:
特殊變量super,提供了對父類(lèi)的訪(fǎng)問(wèn)
可以使用super訪(fǎng)問(wèn)父類(lèi)被子類(lèi)隱藏的變量或覆蓋的方法
每個(gè)子類(lèi)構造方法的第一條語(yǔ)句,都是隱含地調用super(),如果父類(lèi)沒(méi)有這種形式的構造函數,那么在編譯的時(shí)候就會(huì )報錯
多態(tài)性
通過(guò)覆蓋父類(lèi)的方法來(lái)實(shí)現,在運行時(shí)根據傳遞的對象引用,來(lái)調用相應的方法。若將子類(lèi)對象的引用傳遞給聲明為父類(lèi)的參數,若子類(lèi)有這個(gè)方法,就調用子類(lèi)的方法,若子類(lèi)沒(méi)有這個(gè)方法,就調用父類(lèi)的方法
instanceof:判斷一個(gè)對象是否是一個(gè)類(lèi)的實(shí)例:if(an instanceof Animal)……