標籤:成員變數 tostring 精度 mat 過渡 tput 狀態 表格 byte
1.語句與語句塊
語句:java以;為分隔字元,每個帶有分隔字元的句子為一個語句。
語句塊:為{}裡面的語句的集合。
2.注釋
a. //單行注釋
b ./*多行注釋 */
c./**文檔注釋 */
表示在/**和*/之間的文本,將自動包含在用javadoc命令產生的HTML格式的文檔中。
javadoc是JDK中API文檔產生器。該工具解析一組Java源檔案中的聲明與文檔注釋,產生一組
HTML頁面描述這些來源程式中定義的類,內部類,介面,構造方法,方法與屬性。JDK的API文檔
就是用javadoc工具產生的。
3.標識符及字元集
a.Java標識符總結:
1).由字母、數字、_或$組成,不能以數字開頭;
2).嚴格區分大小寫;
3).長度不限
4).關鍵字(即我們在jc中打字會出現藍色的那些詞)不能作為標識符。
b.為增強程式可讀性,Java作如下的約定:
1).類、介面:通常使用名詞,且每個單詞的首字母要大寫
2).方法:通常使用動詞,首字母小寫,其後用大寫字母分隔每個單詞
3).常量:全部大寫,單詞之間用底線分隔
4).變數:通常使用名詞,首字母小寫,其後大寫字母分隔每個單詞,避免使用$符號。
c.字元集
1)Java語言使用國際字元集(Unicode)
2)Unicode特點:
①Unicode字元集中的每個字元佔16位(通常的ASCII碼是8位的),即2個位元組,整個字元集共包括65336個字元。
②其相容ASCII,且排在Unicode字元集最前面的256個字元就是ASCII碼。
③Unicode除了可以表示256個ASCII碼外,還可以表示漢字、拉丁語、希臘字母、朝鮮語等。
5.基礎資料型別 (Elementary Data Type)
①java定義了四類共8種基本類型:
邏輯性:boolean
文本型:char
整型:byte,short,int,long
浮點型:double和float
②對基礎資料型別 (Elementary Data Type)的深入理解:
1).char是文字型的基礎資料型別 (Elementary Data Type)(‘‘),而String是類不是基本類型。
2).字串在java中是對象,在java中有兩個類可以表示字串:String和StringBuffer。
String對象表示的字串是不能修改的。如果需要對字串修改應該使用StringBuffer.
3).整數型別之所以分為四種,是因為其代表的整數範圍不同,最左邊的範圍最小,最右邊的範圍最大。
如果一個數超過了電腦的表達範圍,稱為溢出;如果超出最大值,稱為上溢;如果超過最小值,稱為
下溢。將一個整數型別數的最大值加一,產生上溢其會變成同類型的最小值,最小值減1,溢出其會變成
同類型的最大值。
4).“整型常量”可以有三種形式,十進位,八進位和十六進位。一般先寫十進位再進而轉換。其實八進位整數以0為前置,
十六進位整數以0X或ox為前置。整型常量的預設狀態是int,對於long型常量,則要在數值後加L或l,因為小寫l看起來像1,
為了避免誤會,一般採用大寫。
5).雙精確度類型double比單精確度類型float具有更高的精度和更大的表示範圍,但float類型具有速度快,佔用記憶體小的優點。
浮點型變數的預設初值是0.0(預設double類型).當出現下溢,則返回0.0。出現上溢,,則結果為正或負無窮大。
6)char和String都表示常量。
③各種表格總集
④簡單類型對應的封裝器類
注意:Java基本類型儲存在棧中,因此他們的儲存速度要快於儲存在堆中的對應封裝類的執行個體對象。JVM可以完成基本類型和它們對應封裝類之間
的自動轉換。因此我們在賦值,參數傳遞以及數學運算的時候像使用基本類型一樣使用它們的封裝類,但基本類型不可調用他們的封裝類才 具有的方法。另外,所有基本類型(包括void)的封裝類都是用了final修飾,因此我們無法繼承它們擴充新的類,也無法重寫他們的任何方 法。
⑤單一資料型別之間的轉換
a.方式有自動轉換和強制轉換
(說明:小?大 byte,short,char,int,long,float,double)
b.自動轉換
(1)類型(四種類型):
i.當一個較“小”資料與一個較“大”的資料一起運算時,系統將自動將“小”資料轉換成“大”資料,再進行運算。
(注意:int到float,long到float,long到double是不會自動轉換的,不然將會丟失精度)
ii.在方法調用時,實際參數較“小”,而被調用的方法的形式參數資料又較“大”時(若有匹配的,當然會直接調用匹配的方法),系統也將
自動將“小”資料轉換成“大”資料,再進行方法的調用。
iii.對於多個同名的重載方法,會轉換成最“接近”的“大”資料並進行調用。
iiii.參考型別能夠自動轉換為父類的。
注意:這邊的大小為值的範圍大小。
(對上述的總結進行特別說明:
1)下面的語句可以在Java中直接通過:
byte b;int i=b; long l=b; float f=b; double d=b;
2)如果低級類型為char型,向進階類型(整型)轉換時,會轉換為對應ASCII碼值,例如
char c=‘c‘; int i=c;
System.out.println("output:"+i);輸出:output:99;
3)對於byte,short,char三種類型而言,他們是平級的,因此不能相互自動轉換,可以使用下述的強制類型轉換。
short i=99 ; char c=(char)i; System.out.println("output:"+c);輸出:output:c;
)
c.強制轉換(用圓括弧括起來目標類型,置於變數前)
將"大"資料轉換為"小"資料時,你可以使用強制類型轉換。即你必須採用下面這種語句格式: int n=(int)3.14159/2;可以想象,這種轉換肯定可能會導致溢出或精度的下降。
補充(可進行簡單瞭解)
1)封裝類過渡類型轉換
一般情況下,我們首先聲明一個變數,然後產生一個對應的封裝類,就可以利用封裝類的各種方法進行類型轉換了。例如:
①當希望把float型轉換為double型時:
float f1=100.00f;
Float F1=new Float(f1);
double d1=F1.doubleValue();//F1.doubleValue()為Float類的返回double值型的方法
②當希望把double型轉換為int型時:
double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();
方法的說明:
(1. 在進行簡單類型的變數轉換為相應的封裝類,利用了封裝類的建構函式(不單單只可以這一種,還有其他,不過這邊不說)
即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)
2.各個封裝類中,總有形為××Value()的方法,來得到其對應的簡單類型資料。
利用這種方法,也可以實現不同數值型變數間的轉換,例如,對於一個雙精確度實型類,intValue()可以得到其對應的整型變數,而doubleValue()可以得到其對應的雙精確度實型變數。
)
2)字串與其它類型間的轉換
其它類型向字串的轉換
①調用類的串轉換方法:X.toString();
②自動轉換:X+"";
③使用String的方法:String.volueOf(X);
字串作為值,向其它類型的轉換
①先轉換成相應的封裝器執行個體,再調用對應的方法轉換成其它類型
例如,字元中"32.1"轉換double型的值的格式為:new Float("32.1").doubleValue()。也可以用:Double.valueOf("32.1").doubleValue()
②靜態parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法
3)Date類與其它資料類型的相互轉換
整型和Date類之間並不存在直接的對應關係,只是你可以使用int型為分別表示年、月、日、時、分、秒,這樣就在兩者之間建立了一個對應關係,在作這種轉換時,你可以使用Date類建構函式的三種形式:
①Date(int year, int month, int date):以int型表示年、月、日
②Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、時、分
③Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、時、分、秒
在長整型和Date類之間有一個很有趣的對應關係,就是將一個時間表示為距離格林尼治標準時間1970年1月1日0時0分0秒的毫秒數。對於這種對應關係,Date類也有其相應的建構函式:Date(long date)。
擷取Date類中的年、月、日、時、分、秒以及星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉換成int。
而Date類的getTime()方法可以得到我們前面所說的一個時間對應的長整型數,與封裝類一樣,Date類也有一個toString()方法可以將其轉換為String類。
有時我們希望得到Date的特定格式,例如20020324,我們可以使用以下方法,首先在檔案開始引入,
import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到YYYYMMDD的格式
SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMDD");
String dateFormat=sy1.format(date);
//如果希望分開得到年,月,日
SimpleDateFormat sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);
總結:只有boolean不參與資料類型的轉換
6.符合資料類型—類和介面
概念:可以通過一個載體去引用和設定數值的這個載體為符合資料類型。
7.基本類型變數與參考型別變數。
a.引言:基礎資料型別 (Elementary Data Type)分為兩大類:基本資料類與複合資料型別。而變數也有兩種類型:基本類型與參考型別。
b.概念:
1)基本類型:使用了基本資料類定義的變數為基本類型。
2)參考型別:使用了複合資料型別定義的變數為參考型別。該變數為指向記憶體空間的引用地址(其他語言中說指標或記憶體位址),所指向
的記憶體中儲存者變數所表示的一個值或一組值。
c.兩種類型變數的處理方式
基本類型變數:系統直接給該變數分配空間,因此程式中可以直接操作。
(eg:int a;//分配了空間
a=3; //直接操作
)
參考型別變數:只是給該變數分配了引用空間,資料空間未分配,不能直接操作。
(eg:Mydata a;
a.day=14; //錯誤,因為其只是分配了引用空間,資料空間未分配
)
d.引用型變數的賦值
Mydata a,b; //定義了兩個引用空間
a=new Mydata();
b=a; //使用了同個資料空間。
8.成員變數和局部變數
1).概念:
成員變數:作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。
局部變數:作為方法或語句塊的成員而存在,存在於方法的參數列表和方法定義中。
2).區別:
a..成員變數可以被 public,protect,private,static等修飾符修飾,而局部變數不能被控制修飾符及 static修飾;兩者都可以定義成final型。
注意:局部變數,方法中定義,在方法中都可以使用,for迴圈中的局部變數,只能在for迴圈中利用。
b.成員變數儲存在堆,局部變數儲存在棧。局部變數的範圍僅限於定義它的方法,在該方法的外部無法訪問它。成員變數的範圍在整個類內部都是可見的,所有成員方法都可以使用它。如果存取權限允許, 還可以在類的外部使用成員變數。
c.局部變數的生存周期與方法的執行期相同。 當方法執行到定義局部變數的語句時,局部變數被建立;執行到它所在的範圍的最後一條語句時,局部變數被銷毀。類的成員變數,如果是執行個體成員變數,它和對 象的生存期相同。而靜態成員變數的生存期是整個程式運行期。
d.成員變數有預設值,基本類型的預設值為 0,複合類型的預設值為null。(被final修飾且沒有static的必須顯式賦值),局部變數不會自動賦值,所以局 部變數在定義後先要賦初值,然後才能使用。
e.局部變數可以和成員變數 同名,且在使用時,局部變數具有更高的優先順序。
注意:成員變數和成員靜態變數的區別
創造多個相同的對象,有多個成員變數,但是只有一個成員靜態變數,這個成員靜態變數被多個對象應用。
9.運算子
10.流程式控制制語句
1).迴圈語句
a.
while(條件判斷語句){}
只有false時,其才會跳出迴圈。
b.
do{
}while(條件判斷語句);
至少執行一次代碼塊,只有false時,其才會跳出迴圈。
c.for語句
for(初始語句;邏輯語句;迭代語句){
語句或語句塊
}
2.分支語句
a.
if(){}
else{}
b.
if(){}
else if(){}
...
else{}
c.swich語句
swich(ch){
case c1:
語句塊1;
break;
case c2;
語句塊2;
break;
...
default:語句塊
}
/*說明:
1.swich中的數一定要和case之後的值相匹配
2.swich語句中各case分支即可以是單條語句,也可以多條語句。
3.當多個case表現同個語句塊時,模式如下:
case c1:
case c2: 語句塊
break;
4.當前面都沒有執行到時,才會執行default或者之前沒有使用break語句跳出語句。
5.無論執行哪一個分支,程式流都會順序執行下來,直至遇到break語句為止。
3.迴圈跳躍陳述式
(1)break語句
作用:
a.停止swich程式流
b.跳出迴圈
(2)continue語句
作用:跳過continue之後的語句塊,執行下一次迴圈。
11.數組
引言:1.數組中的元素都是同一種類型。
2.數組的長度在建立時確定,且不可以更改。
(如果想要動態變化,可以使用java.util包中的各種集合)
1.數組的聲明方式
(1)int s[]
(2)Int[] s
(3)Int[] s,m,n //聲明多個變數
注意:聲明方式只是給陣列變數分配了一個可以引用該數組的引用空間。資料空間由後面的決定。
2.數組的建立與初始化
(1).用new建立數組
初始化方式:直接一個一個初始化
(2)直接初始化建立數組:
Int[] a={1,2,3,...,n};
3.數組的長度
數組名.length
4.對象數組(數組不單單可以基本類型數組,還可以是對象數組)
Eg:
Point[] p=new Point[2];
Int i=0;
While(i<2){
P[i]=new Point(i,i+1);
i++;
}
5.多維陣列
a.多維陣列的聲明:
(1) int a[][]
(2) int[][] a
b.多維陣列執行個體化(注意:在為每一個位置的數分配數時,把握住括弧順序一點一點畫出來賦值就好,不要亂)
(1)直接為每一維分配記憶體,建立規則數組。Eg:int a[][]=new int[4][4];
(2)從最高維起,分別為每一維分配空間,這種方式可以構造不規則數組。
Eg: int[][] a=new int[2][];
a[0]=new int[2] ; a[1]=new int[3];a[2]=new int[4];
例子:利用二維int型數組表達一個矩陣,建立該數組並將其元素列印輸出。
6.增強for迴圈
a.進階for迴圈格式:for(類型名 變數名 : 被遍曆的集合(Collection)或數組)
eg:
int[] arr = {1,2,3,4};
for(int i :arr)
{
System.out.out(i);
}
B.傳統for迴圈和進階for迴圈的區別 :
進階for迴圈有一個局限性,必須有一個被遍曆的目標
(注意:建議在遍曆數組的時候,還是希望用傳統for,因為傳統for有角標,可以有其他動作,但進階沒有)
7.數組的複製
使用java語言在java.lang.System類中提供的數組複製方法。
該方法為:
public static void arraycopy(Object source,int srcIndex,Object dest, int destIndex,int length)
source:源數組
srcIndex:源數組開始複製的位置
dest:目的數組
destIndex:目的數組開始存放複製數組的位置
length:複製元素的個數
Java語言基礎