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