一 基本知識(shí)1 數(shù)據(jù)類(lèi)型類(lèi)似于c/c++ 
對(duì)于long類(lèi)型常量書(shū)寫(xiě)時(shí),要在數(shù)字后面加上L或者l。0L 對(duì)于float類(lèi)型常量書(shū)寫(xiě)時(shí),要在小數(shù)點(diǎn)后面加上F或者f。0.0F 對(duì)于double類(lèi)型常量書(shū)寫(xiě)時(shí),要在小數(shù)點(diǎn)后面加上D或者d。 0.0D
數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換 Java中也有隱式轉(zhuǎn)換(Java則叫做自動(dòng)轉(zhuǎn)換)和顯式轉(zhuǎn)換(Java則叫做強(qiáng)制轉(zhuǎn)換)。自動(dòng)轉(zhuǎn)換由編譯器實(shí)現(xiàn),強(qiáng)制轉(zhuǎn)換則由用戶編程實(shí)現(xiàn),再由編譯器執(zhí)行。
自動(dòng)轉(zhuǎn)換的規(guī)則:低級(jí)數(shù)據(jù)類(lèi)型 ==》 高級(jí)數(shù)據(jù)類(lèi)型;所占字節(jié)數(shù)低的數(shù)據(jù)類(lèi)型 ==》 所占字節(jié)數(shù)高的數(shù)據(jù)類(lèi)型 例如:byte short int long(整數(shù)類(lèi)型) ==》 float double(浮點(diǎn)數(shù)類(lèi)型) byte short(8字節(jié)和16字節(jié)) ==》int(32字節(jié)) byte short int(8字節(jié),16字節(jié)和32字節(jié)) ==》 long(64字節(jié)) float(32字節(jié)) ==》 double(64字節(jié)) char(16字節(jié)) ==》 int(32字節(jié)) 注:整數(shù)類(lèi)型中的long,雖然占64個(gè)字節(jié),但是卻能自動(dòng)轉(zhuǎn)換成float類(lèi)型(32字節(jié))。因此,我認(rèn)為,在自動(dòng)轉(zhuǎn)換的過(guò)程中,先考慮數(shù)據(jù)類(lèi)型的等級(jí)高低,再考慮數(shù)據(jù)類(lèi)型的所占字節(jié)數(shù)。
再注:從簡(jiǎn)單數(shù)據(jù)類(lèi)型圖中不難看出,各數(shù)據(jù)類(lèi)型的長(zhǎng)度均為固定值,這使得Java能夠在不同的平臺(tái)上運(yùn)行相同的Java程序時(shí)不用修改代碼,提高了程序的可移植特性。
2 頭文件(1)類(lèi)似于c++的命名空間或者是頭文件 在JAVA中叫做包(package)。Java的核心包中,我們常用的有這樣5種: (1)java.lang , 封裝了所有編寫(xiě)java程序所需要的基本類(lèi),包括Object、Class、System等。其中,Object類(lèi)是所有類(lèi)的根類(lèi),任何類(lèi)都是繼承該類(lèi)而建立的;Class類(lèi)是由編譯器動(dòng)態(tài)生成對(duì)象的一個(gè)伴隨每一個(gè)類(lèi)的特殊類(lèi);System類(lèi)是一個(gè)final類(lèi),主要提供標(biāo)準(zhǔn)I/O和對(duì)系統(tǒng)環(huán)境信息的訪問(wèn)等,這個(gè)類(lèi)不能被實(shí)例化。 (2)java.awt , 窗口工具包,提供操作圖形用戶界面的基本功能。 (3)java.applet , 封裝Applet類(lèi)的包,提供Applet執(zhí)行時(shí)需要的類(lèi)。 (4)java.io , 封裝I/O操作的包。 (5)java.util , 提供使用程序類(lèi)以及集合類(lèi)等常用的工具類(lèi)。
3 程序結(jié)構(gòu) 首先,是package語(yǔ)句,用來(lái)指定源文件所在的包。 然后,是public classDefinitiom,也就是公共類(lèi),用來(lái)指定源文件的類(lèi)名,這個(gè)類(lèi)名要與源文件名相同,可有0個(gè)或1個(gè)。 再然后,是classDefinition,也就是一般類(lèi),可以有若干個(gè),也可以沒(méi)有。 注:一個(gè)java源文件中,最多只能有一個(gè)public類(lèi),且必須與文件名相同。
我們的第一個(gè)程序:
import java.lang.*; import java.io.*;
class matrix //一般類(lèi) { void luoyang1() { } }
public class Matrixkey //public類(lèi),類(lèi)名要與文件名相同 { public static void main(String args[]) { System.out.println("很高興認(rèn)識(shí)你,我是Matrixkey"); } }
4 Java的解釋執(zhí)行在系統(tǒng)運(yùn)行Java程序時(shí),Java編譯器將Java程序(*.java文件)轉(zhuǎn)化為字節(jié)碼(*.class文件),在運(yùn)行時(shí),解釋器將編譯得到的字節(jié)碼進(jìn)行解釋執(zhí)行。 Java語(yǔ)言一個(gè)源程序可以含有多個(gè)類(lèi)(public類(lèi)最多一個(gè)),每個(gè)類(lèi)編譯都生成一個(gè)字節(jié)碼文件。也就是說(shuō),有幾個(gè)類(lèi),就有幾個(gè)字節(jié)碼文件。 這就是,我們?cè)趫?zhí)行一個(gè)Java程序時(shí)要先用javac *.java將Java程序轉(zhuǎn)化為字節(jié)碼的原因。 注:Java區(qū)分大小寫(xiě),因此上面的程序中,public類(lèi)的類(lèi)名:Matrixke,那么這個(gè)java程序的文件名必須為:Matrixkey.java
5 輸入輸出 輸出使用println方法。println方法的使用方法如下: System是java.lang.*包中的類(lèi),out是System類(lèi)的一靜態(tài)屬性,而println()是out屬性的一個(gè)靜態(tài)方法。該方法用于打印后再換行,可以打印基本類(lèi)型的數(shù)據(jù)以及字符串等,'+' 在字符串中代表將字符串相互連接。
int x = 4772; /* 輸出一個(gè)字符m */ System.out.println(m); * 輸出一個(gè)數(shù)字4772 */ System.out.println("變量x等于"+x); //或者直接System.out.println(x); /* 輸出一個(gè)字符串matrixkey */ System.out.println("matrixkey");
/* 輸出漢字落陽(yáng)*/ System.out.println("落陽(yáng)"); |
println方法打印后自動(dòng)換行,因此,下面2條代碼輸出結(jié)果是一致的 int x = 100; System.out.println(x); System.out.print(x + "\n"); |
注意:"+"號(hào)用來(lái)連接字符串是有點(diǎn)麻煩的! 例如: System.out.println(1+2+"3"); Sysrem.out.println("1"+2+3); '+'號(hào)優(yōu)先級(jí)別,從左到右 所以打印結(jié)果是這樣的: 33(先做1+2 變成字符串"3" 連接后面的"3",所以打印33) 123(先把"1"和2連接成為"12",在連接3就變成"123")
6 運(yùn)算符和流程控制C/C++類(lèi)似,注意switch不能做實(shí)數(shù)的判斷
二 類(lèi) 1 概念類(lèi)作為JAVA程序的基本要素,由成員變量(即屬性)和成員方法組成,必須先定義在使用。 類(lèi)聲明格式:[修飾符] class 類(lèi)名 [extends 父類(lèi)名] [implements 類(lèi)實(shí)現(xiàn)的接口列表] (1)修飾符用于確定類(lèi)的訪問(wèn)控制權(quán)限(public和friendly)以及類(lèi)型(abstract和final) (2)類(lèi)名是合法的標(biāo)識(shí)符,并且首字母大寫(xiě) (3)保留字extends指明聲明的類(lèi)所繼承的父類(lèi) (4)[ ]里的內(nèi)容可選 /* JAVA中類(lèi)的聲明和繼承*/ public class Matrixkey {成員變量 成員方法} class Matrix extends Matrixkey /* C#中類(lèi)的聲明和繼承*/ public class Matrixkey {成員變量 成員方法} class Matrixk : Matrixkey |
類(lèi)體格式:class 類(lèi)名 {成員變量 成員方法} 其中成員變量定義的格式為:<修飾符> <類(lèi)型> <變量名稱(chēng)> 成員方法定義的格式為:<修飾符> <返回值類(lèi)型> <方法名稱(chēng)> ( [ <參數(shù)表> ] ) (1)成員變量和成員方法可以通過(guò)public private protected等修飾符控制訪問(wèn)權(quán)限 (2)java中,方式是通過(guò)值傳遞參數(shù),而不是通過(guò)地址,因此方法不可以改變參數(shù)的值 例: public class Matrixkey //類(lèi)聲明 { public int a; public double b; //成員變量的聲明 static void Min(double c) //成員方法的聲明 } |
類(lèi)成員的修飾符有兩種 訪問(wèn)限定符:public 可以被外部類(lèi)訪問(wèn) protected 可以被同一個(gè)包中的類(lèi)以及該類(lèi)的子類(lèi)訪問(wèn) private 只能在該類(lèi)內(nèi)部被訪問(wèn) default 可以被同一個(gè)包中的類(lèi)訪問(wèn) 非訪問(wèn)限定符:靜態(tài)修飾符 static 最終修飾符 final 抽象修飾符 abstract syncronized
2 類(lèi)的繼承在java語(yǔ)言中,類(lèi)繼承是通過(guò)extends保留字實(shí)現(xiàn)的,格式為:| class Subclass extends Superclass {...} |
(1) 用extends指明新定義的子類(lèi)(Subclass)的父類(lèi)(Superclass),就在兩個(gè)類(lèi)之間建立了繼承的關(guān)系 (2)子類(lèi)可以從父類(lèi)繼承所有非private的屬性和方法作為自己的成員 (3)若子類(lèi)成員變量的名字 和 父類(lèi)成員變量的名字 相同,則子類(lèi)成員隱藏父類(lèi)成員 (4)若子類(lèi)成員方法 與 父類(lèi)成員方法的名字,返回值類(lèi)型,參數(shù)表都相同,則子類(lèi)方式是父類(lèi)方法的重寫(xiě) (5)方法重寫(xiě)時(shí)注意:子類(lèi)方法的訪問(wèn)權(quán)限要高于父類(lèi) 子類(lèi)方法的訪問(wèn)權(quán)限比父類(lèi)方法的訪問(wèn)權(quán)限要高,一般用Super關(guān)鍵字來(lái)訪問(wèn)父類(lèi)的方法和變量,但是父類(lèi)的對(duì)象不能直接訪問(wèn)子類(lèi)的方法和變量
3 數(shù)組定義一維數(shù)組的格式:<類(lèi)型> <數(shù)組名> [ ]; 或者 <類(lèi)型> [ ] <數(shù)組名>; 因此,int A [ ]; int [ ] A ; 兩者是相同的 (1)<類(lèi)型>可以是簡(jiǎn)單或者復(fù)雜數(shù)據(jù)類(lèi)型 (2)進(jìn)行數(shù)組定義時(shí),不分配內(nèi)存,因此不要求給出其元素的個(gè)數(shù) (3)數(shù)組分配內(nèi)存通過(guò)new操作符或靜態(tài)初始化實(shí)現(xiàn) 創(chuàng)建一維數(shù)組的格式:<數(shù)組名> = new <類(lèi)型> [ <數(shù)組大小> ]; A = new int [3]; 定義的同時(shí)創(chuàng)建:<類(lèi)型> [ ] 數(shù)組名 = new <類(lèi)型> [ <數(shù)組大小> ]; int [ ] A = new int [3]; 初始化數(shù)組:對(duì)已定義的數(shù)組元素賦值,有動(dòng)態(tài)和靜態(tài)兩種方式 (1)當(dāng)初始化元素?cái)?shù)目較少,采用靜態(tài)初始化 int A[ ]; A[0] = 1; A[1] = 2;A[2] = 3; (2)對(duì)簡(jiǎn)單類(lèi)型,定義數(shù)組的同時(shí),用new操作符進(jìn)行初始化 int [ ] A = new int [3]{1,2,3}; (3)當(dāng)初始化元素?cái)?shù)目較多,可以利用循環(huán)語(yǔ)句對(duì)數(shù)組元素動(dòng)態(tài)初始化多維數(shù)組 定義的格式:<類(lèi)型> <數(shù)組名> [ ] [ ]; 或者 <類(lèi)型> [ ] [ ] <數(shù)組名>; 初始化:在定義的同時(shí)對(duì)數(shù)組元素進(jìn)行賦值(靜態(tài)) 可以按順序直接對(duì)每一維分配內(nèi)存或從最高維開(kāi)始對(duì)每一維分配內(nèi)存(動(dòng)態(tài))
數(shù)組操作 (1)方法arraycopy()用來(lái)進(jìn)行數(shù)組的拷貝 (2)ArrayList類(lèi)用來(lái)動(dòng)態(tài)調(diào)整數(shù)組的大小
4 字符串的表示(1)用String類(lèi)表示字符串,String類(lèi)的對(duì)象表示的是固定長(zhǎng)度的字符串 (2)用StringBuffer類(lèi)表示字符串,StringBuffer類(lèi)的每個(gè)對(duì)象都是長(zhǎng)度可變的字符串 字符串的操作 (1)對(duì)String的修改 String類(lèi)提供了concat() replace() substring()方法分別實(shí)現(xiàn)字符串的連接,替換,取子串的操作;“+”運(yùn)算符也可以用來(lái)連接字符串。 (2)對(duì)StringBuffer的修改 StringBuffer類(lèi)表示的是可變長(zhǎng)度的字符串,使用它,就可以方便地在字符串中插入或在字符串尾追加字符。相應(yīng)的方法是:insert(),setCharAt(),append()。 (3)判斷兩個(gè)字符串是否相等,使用equals()方法三 異常處理 參考類(lèi)似c/c++。 對(duì)于try和catch子句的排列方式,下列哪個(gè)是正確的? A。 子類(lèi)異常在前,父類(lèi)異常在后 B。 父類(lèi)異常在前,子類(lèi)異常在后 C。 只能有子類(lèi)異常 D。 父類(lèi)異常和子類(lèi)異常不能同時(shí)出現(xiàn)在同一個(gè)try程序段內(nèi) 解析:在java語(yǔ)言中,在捕獲父類(lèi)異常時(shí)對(duì)其子類(lèi)異常也捕獲了,根據(jù)try與catch的匹配原則,盡量使用一個(gè)父類(lèi)去捕獲其所有子類(lèi)的異常,而父類(lèi)和子類(lèi)異常是可以同時(shí)出現(xiàn)的。 答案:A
|