JavaAPI:Application Programming Interface
Java 版本: javaSE
javaEE:企業網站開發,核心:EJB
javaME:嵌入式系統開發
應用領域:桌面應用程序開發
嵌入式系統開發
電子商務應用
企業級應用系統開發
交互式系統開發
多媒體系統開發
分佈式系統開發
Web應用系統開發
語言的特性:簡單
面向對象
分佈性:包括操作分佈和數據分佈。操作分佈:在多個不同的主機上佈置相關操作。數據分佈:將數據分別存放在多個不同的主機上,這些主機是網絡中的不同成員。Java可以憑藉URL(統一資源定位符)對象訪問網絡對象,訪問方式與訪問本地系統相同。
可移植性:
解釋型:需要解釋器,慢
安全性:刪除了指針和內存釋放等語法,有效的避免了非法操作內存
健壯性
多線程:多核處理器,同一時間並行執行許多任務
高性能
動態
JDK:java開發環境
JRE:java運行環境
Windows系統的JDK環境
設定JAVA_HOME,CLASSPATH和path
環境變量配置:不區分大小寫
右擊這臺電腦->單機屬性->高級系統設置->選擇環境變量
在用戶變量新建:變量名:java_home 變量值:路徑
在系統變量新建:變量名:classpath 變量值:路徑(相對路徑(%java_home%\....)&絕對路徑)
驗證JDK是否安裝成功
通過“開始”菜單下的cmd命令(或win+R,輸入cmd,回車)
在命令提示符後輸入命令java –version(注:java後有一個空格)
如果顯示JDK的版本信息,則安裝成功。
第一個java程序
public class Test{
public static voidmain(String []args){
System.out.println("HelloJava");
}
}
保存到C盤:Test.java
Win+R->cmd進入控制檯->將控制檯路徑設爲C盤:cd c:\->輸入javacTest.java->控制檯會輸出Hello java
什麼是java語言
1995年由sun公司推出的,java之父詹姆斯 戈士林博士設計,完成了java金屬的原始編譯和虛擬機,最初名字是OAK
通過解釋方式運行的語言:跨平臺
Java語言程序代碼的編譯的運行過程:
程序源代碼->編譯器->字節碼->JVM(java虛擬機)->機器碼->在機器上運行
Java的主類結構:
1包聲明:關鍵字:package(域名倒寫)
2聲明成員變量和局部變量:成員變量:類之中,針對類的生命週期
局部變量:方法裏面有效
3主方法:publicstatic void main(String[]args){}java程序的入口
4導入API類庫:通過import關鍵字導入相關的類,
比較運算符:屬於二元運算符,用於程序中的變量和變量,變量和常量之間以及其他類型的信息之間的比較。運算結果是boolean型,通常用在條件語句中來作爲判斷的依據
包括(>,<,==,>=,<=,!=)
編碼規範:
每條語句要單獨佔一行
每條命令都要以分號結束
聲明變量時要分行聲明
Java語句中多個空格看成一個
不使用技術性很高,難懂,易混淆判斷的語句
對於關鍵的方法要多加註釋
變量的有效範圍:
局部變量和成員變量名相同發,局部變量會屏蔽成員變量
標識符和關鍵字:
1標識符:反映出變量的用途,便於維護
由字母,數字,下劃線和美元符號,第一個字符不能爲數字
Java語言使用Unicode標準字符集,最多可以識別65535個字符,因此,java語言中字母可以是Unicode字符集中的任何字符,包括拉丁字母,漢字,日文等許多語言中的字符
不能是java的關鍵字和保留字
在java語言中標識符是區分大小寫的
2關鍵字:
intpublic this finally Boolean abstrsct long short throw return break for staticnew interface if double………
布爾類型:
Boolean:true&false(沒有規定佔多少空間),不能通過1&0來代替
代碼註釋:
//單行註釋
/*多行註釋*/
/**文檔註釋*/ 生成到開發文檔中
浮點類型:
float(單精度浮點類型):賦值時需在結尾加“F”或“f‘,範圍在1.4E-45和3.4028235E-38之間
Boolean(雙精度浮點類型):默認都是double類型,範圍在4.9E-324和1.7976931348623127E-308.
Java裏面的浮點數不適合做高精度運算,不能用於金融,國防等
賦值運算符:
’=‘爲二元運算符
變量類型 變量名=所賦的值
邏輯運算符:
&&:邏輯與 同時爲真才返回true
||:邏輯或 有一個爲真就返回true
!:邏輯非
返回值爲布爾類型的表達式,操作元也必須是boolean型數據
三元運算符:
表達式?true :false,可以使用if else代替
聲明變量:
聲明變量時可以補賦值,也可以直接賦值
聲明常量:
一直不會改變的量(constant)關鍵字:final(賦值後不能被修改,只能被賦值一次)
算術運算符:
+,-,*,/,%
位運算符:
用於處理整數和字符型的操作數,對其內存進行操作,數據在內存中以二進制的形式表示,例如int型變量7的二進制表示是00000000 00000000 00000000 00000111,-8的二進制表示是1111111111111111 11111111 11111000,最高位是符號位,0表示正數,1表示負數
00
11
按位與:00
按位或:11
取反:11 00
異或:11
移位運算符:>>(向右移位),<<(向左移位),>>>(無符號的向右移位)
顯示類型轉換:
把高精度的變量的值賦值給低精度的變量時,必須使用顯示類型轉換
(類型名)要轉換的值 (byte)205;越界=-51
隱式類型轉換:
佔用空間小的級別低,佔用空間大的級別高,從低級到高級轉換的規則
運算符優先級:
從上到下是由高到低:
var++和var--(後置操作符)
+,-(一元加號和一元減號),++var和--var(前置操作符)
(type)(類型轉換)
!(非)
*,/,%(乘法,除法和求餘運算)
+,-(二元加法和減法)
<,<=,>,>=(比較運算符)
==,!=(相等操作符)
^(異或)
&&(條件與)
||(條件或)
=,+=,-=,*=,/=,%=(賦值操作符)
整數類型:
byte:範圍-128~127,佔用內存小,一般用於IO部分
short:短整型,兩個字節,範圍:-32768~32767
int:範圍-2147483648~2147483647
long:長整型,在對long型變量賦值時結尾必須加上“L“或”l“,否則將不認爲是long型,擁有8個字節,範圍9223372036854775808~9223372036854775807
自增和自減運算符:
單目運算符 ++ --
A=++I,先將i的值加1,再賦值給A
A=i++,先將i的值賦值給A,再將i加1
字符類型:
char兩個字節的存儲空間,定義時,用單引號括起來
do……while循環語句
先執行一遍循環體,再判斷條件
do{
執行語句
}while(條件表達式);
for循環語句:
java5新增了foreach
for(初始值 ;判斷語句 ;改變步長){
執行循環體
}
foreach(intx:arr) //遍歷數組{
}
if條件語句:
if(){}
if(){}else{}
if(){}elseif(){}else{}
switch多分支語句:
語句中表達式的值必須是整型或字符型,常量值1~n必須也是整型或字符型
switch(整型/枚舉/字符串/包裝類){
case1:
case2:
default:
}
while循環語句:
條件判斷語句
while(條件表達式){
執行語句
}
複合語句:
以一組{ }開始和結尾
按字典順序比較兩個字符串:
compareTo()方法
如果按字典順序比String對象位於參數字符串之前,則比較結果爲一個負整數,如果按字典順序此String對象位於參數字符串之後,則結果爲一個正整數,如果相等,則結果爲零
str.compareTo(Stringotherstr)
其中,str,otherstr是參加比較的兩個字符串對象
常規類型格式化:
經常對常規類型的數據進行格式化,例如格式化爲整數,科學技術表示等
format()
創建字符串:
Stringdata[]={‘a’,’b’,’c’};
=chardata[]={‘a’,’b’,’c’};
String str=new String(data);
獲取指定索引位置的字符串:
使用charAt()方法可將指定索引處的字符返回
str.charAt(intindex)
str:任意字符串
index:整型值,用於指定要返回字符的下標
獲取子字符串:
substring(intbeginIndex,int endIndex) 從beginIndex開始,到endIndex-1
substring(intbeginIndex) 從beginIndex開始到結束
獲取字符串長度:
length()
鏈接多個字符串:
使用’+‘運算符可完成對多個字符串連接的功能。’+‘運算符可以鏈接多個運算符併產生一個String對象
鏈接其他數據類型:
如果將字符串同這些數據類型進行連接,會將這些數據直接轉換成字符串
判斷字符串的開始和結尾:
stsrtsWith()與endsWith()方法分別用於判斷字符串是否以指定的內容開始或結束,這兩個方法的返回值都爲boolean類型
str.startsWith(Stringprefix)
str.endsWith(Stringsuffix)
判斷字符串是否相等:
判斷字符串是否相等有equals(),equalsgnoreCase()(忽略大小寫)兩種方法
重寫equals()使其成爲自己想要的,例如比較兩個對象的ID是否相同,如相同,爲同一個人
==只適用於基本數據類型,使用只是判斷引用類型是否指向同一個對象
去除空格:
trim()方法返回字符串的副本,忽略前導空格和尾部空格
str.trim()
日期和時間字符串格式化:
format()
聲明字符串:
字符串必須包含在一對” ”(雙引號)之內,
String s=null; //此時的字符串不能使用,必須指向一個對象之後才能使用
使用正則表達式:
Patternp =Pattern.compile(“a*b”);
Matcherm=p.matcher(“aaaaab”);
Booleanb=m.matches();
=Boolean b=Pattern.matches(“a*b”,”aaaaab”);
正則表達式的限定符:?0次或1次;* 0次或多次;+ 一次或多次;{n} 正好出現n次;{n,}至少出項n次;{n,m}出現n次至m次
字符串查找:
indexOf(Stringa):返回搜索的字符或字符串首次出現的位置
lastIndexOf(Stringstr):返回最後一次出現的位置
字符串分割:
split(String sign)方法:根據指定的分割符對字符串進行完全分割
split(String sign,int limit):根據給定的分割符對字符串進行拆分,並限定拆分的份數
字符串生成器:
String是用final修飾的,不可更改,當需要大量的字符串時,定義起來比較麻煩
Java提供了StringBuilder類
StringBuffer類,與StringBuilder類似,多了一個線程安全的問題,
字符串替換:
replace(charoldChar,char newChar):實現將指定的字符或字符串替換成新的字符或字符串
字母大小寫轉換:
toLowerCase()方法可將字符串中的所有字符從大寫字母改爲小寫字母
toUpperCase()方法將字符串中的小寫字母改爲大寫字母
遍歷數組:
for循環
for(intx[]:arr2){
for(int e:x){
if(e==x.length){
System.out.print(e);
}else
System.out.print(e+”,”);
}
}
初始化一維數組:
Intarr[]=new int[]{1,2,3,5,25};//第一種方式
intarr2[]={34,23,12,6} //第二種
創建一維數組:
數組作爲對象允許使用new關鍵字進行內存分配,在使用數組之前,必須首先定義數組變量所屬的類型,即聲明數組
數組元素類型 數組名字[];
數組元素類型 [] 數組名字;
對數組進行排序:
Array.sort(object)
object:指進行排序的數組名稱
返回值:排序後的數組
二維數組的初始化:
typearrayname[][]={value1,value2,……..valuen};
二維數組的創建:
數組元素類型 數組名字[][];
數組元素類型 [][] 數組名字;
反轉排序:
for(inti=0;i<array.length/2;i++){
temp=array[i];
array[i]=array[array.lenght-1-i];
array[array.length-1-i]=temp;
}
複製數組:
copyOf()複製數組至指定長度
copyOfRange()將指定數組的指定長度複製到一個新的數組中
冒泡排序:
for(inti=1;i<array.length;i++){
for(int j=0;j<array.length-I;j++){
if(array[j]>array[j+1]){
int temp array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
使用二維數組:
使用一維數組:
數組查詢:
二分查找法:首先將數組進行排序
binarySearch(Object[].Objectkey)
binarySearch(Object[].,intfromIndex,int toIndex,Object key)
數組概述:
數組是具有相同數據類型的一組數據的集合,在java中同樣將數組看作一個對象,雖然基本數據類型不是對象,但是由基本數據類型組成的數組則是對象
填充替換數組元素:
Arrays類的靜態方法fill()對數組的元素進行替換
直接選擇排序:
速度要比 冒泡排序快一些
Intindex;
For(inti=1;i<array.length;i++){
Index=0;
For(int j=1;j<=array.length-I;j++){
If(array[j]>array[index]){
Index=j;
}
}
Int temp=array[array.length-i];
array[array.length-i]=array[index];
array[index]=temp;
}
This關鍵字:
this可以調用成員變量和成員方法,但通常使用對象.成員變量或對象.成員方法進行調用,事實上this引用就是對一個對象的引用,this指代類的一個對象
成員變量
對象的屬性成爲成員變量,成員變量對應於類對象的屬性
成員方法:
使用成員方法對應於類對象的行爲
權限修飾符 返回值類型 方法名(參數類型 參數名){
…….//方法體
return 返回值
}
對象:
類就是封裝對象的屬性和行爲的載體,而對象就是類的抽象出來的實例
對象的比較:
==:比較對象內存空間的位置
equals():對象的內容
對象的創建:
通過new操作符來創建對象,每實例化一個對象就會自動調用一次構造方法,實質上這個過程就是創建對象的過程,也就是使用new操作符調用構造方法創建對象
對象的銷燬:
每個對象都有生命週期,當對象的生命週期結束時,分配給該對象的內存地址將被回收,在其他語言中需要手動回收廢棄的對象,java擁有一套完整的垃圾回收機制:回收堆裏面的已經沒有引用的對象,去掉引用,直接將對象賦值爲null
對象的引用:
Java中真正操作標識符實質上是一個引用
類名 對象引用名稱
引用存在棧裏,對象存在堆裏
多態:
多態的實現不依賴具體類,而是依賴於抽象類和接口
訪問對象的屬性和行爲:
使用”對象。類成員”來獲取對象的屬性和行爲,對象的屬性和行爲在類中是通過類成員變量和成員方法的形式來表示的,所以當對象獲取類成員,也就相應的獲取了對象的屬性和行爲
封裝:
是面向對象的核心思想,將對象的屬性和行爲封裝起來,而將對象的屬性和行爲封裝起來的載體就是類,類通常對客戶隱藏其實現細節
繼承:
通過繼承實現子類具有父類全部屬性和行爲的一種功能,java只支持單繼承,即只能繼承一個類,不能同時繼承兩個類
靜態變量,常量和方法:
關鍵字:static,用其修飾的變量,常量等屬於類
在處理問題時會需要兩個類在同一個內存區域共享一個數據
不需要創建實例,直接使用類名就能調用其方法
局部變量:
局部變量在方法執行時創建,在方法結束時被銷燬,局部變量在使用時必須進行賦值操作或被初始化,否則會出現編譯錯誤
而成員變量起初就會被賦予一個初始值
局部變量的有效範圍:
又可稱爲變量的作用域,局部變量的有效範圍從該變量的聲明開始到該變量的結束爲止
類:
對象的模板,類是封裝對象的屬性和行爲的載體,比較抽象的概念
對象的行爲是以方法的形式定義的,屬性是以成員變量的形式定義的
類的構造方法:
構造方法是一個與類同名的方法且沒有返回值,對象的創建就是通過構造方法完成的,每當類實例化一個對象時,類就會自動調用構造方法
類的主方法:
如要直接在主方法中調用其它方法,則該方法也是靜態的
權限修飾符:
public:
private:只能在本類中使用
protectd:同一個包內的類可以訪問,子類可以訪問
沒有修飾符:只有在同一個包內,其他類可以訪問
Boolean:
Boolean類將基本類型爲boolean的值包裝在一個對象中,一個Boolean類型的對象只包含一個類型爲boolean的字段
valueOf(Booleanb)
valueOf(Strings)
Byte:
Character:
Double:
Integer:
包裝類:包裝基本類型,爲了基本類型和引用類型的過度,提供包裝類(8種)
Number:
抽象類Number是BigDecimal,BigInteger,Byte,Double。Float,Integer,Long和Short類的父類,Number的子類必須提供提示將表示的數值轉換爲byte,double,float,int,long,short的方法
BigDecimal:
BigDecimal和BigInteger都能實現大數據的運算,不同的是BigDecimal加入了小數的概念。一般的float型和double型數據只可以用來做科學計算或工程計算,商業計算中要求數字精度比較高,所以要用到java.math. BigDecimal類,BigDecimal類支持任何精度的定點數,可以用來精確計算貨幣值
BigInteger:
高精度的整數計算
Math.random()方法:
產生隨機數,默認生成大於等於0小於1.0的double型隨機數
m+(int)(Math.Random()*n)
Math類:
提供衆多數學函數方法,主要包括三角函數,指數函數。取整函數,取最大值,最小值以及平均值函數方法,都被定義爲static形式。還有一些常用數學常量,如圓周率,E等
Math.數學方法
Random類:
Randomr=new Randow();
可以通過實例化一個Random對象創建一個隨機數生成器
常用數學運算方法:
數字格式化:
Java主要對浮點型數據進行格式化操作
使用java.text.DecimalFormat格式化數字
Instanceof判斷對象類型:
當在程序執行向下轉型操作時,如果父類對象不是子類對象的實例,就會發生ClassCastException異常,所以在執行向下轉型之前需要養成一個良好的習慣,就是判斷父類對象是否爲子類對象的實例
Object類:
是所有類的父類,是java類層中的最高層類,當創建一個類時,總是在繼承,除非某個類已經指定要從其他類繼承,否則就是從java.lang.Object類繼承而來的,所有的類都是Object子類,所以在定義時,省略了extendsObject關鍵字
抽象類:
在解決實際問題時,一般將父類定義爲抽象類,需要使用這個父類進行繼承與多態處理。
關鍵字:abstract,不能被實例化
多態:
通常使用方法的重載(Overloading)和重寫(Overriding)實現類的多態性
方法的重載:
在同一個類中允許同時存在一個以上的同名方法,只要這些方法的參數個數或類型不同即可(類型出現的次序不同也可以)
publicstatic int add(int… a){ //定義不定長參數方法}
接口:
接口是抽象類的延伸,可以將它看做是純粹的抽象類,接口中所有的方法都沒有方法體
關鍵字:interface,implements
接口可以實現多繼承
類的繼承:
關鍵字:extends
向上轉型:
兩個類之間存在繼承的關係,由特殊類型到普通類型,會丟失一些信息
向下轉型“
由普通類型到特殊類型,將較抽象類轉換爲較具體的類,通常會出現問題,可以說子類對象總是父類的一個實例,但父類對象不一定是子類的實例。
類名衝突:
同名類放在不同的包中
完整的類路徑:
一個完整的類名需要包名與類名的組合,任何一個類都隸屬於一個類包
創建類包:
包名一般都是小寫
導入類包:
import關鍵字導入類包
final變量:
可用於聲明變量,一旦變量被設定,就不可以再改變該變量的值,通常,由final定義的變量爲常量
finaldouble PI=3.14;
final方法:
定義爲final的方法不能被重寫,將方法定義爲final類型可以防止任何子類修改該類的定義與實現方式,同時定義爲final的方法執行效率要高於final方法,一個定義爲private的方法隱式被指定爲final類型,這樣無需將一個定義爲private的方法再定義爲final類型
final類:
定義爲final的類不能被繼承,如果將某個類設置爲final形式,則類中的所有方法都被隱式設置爲final形式,但是final類中的成員變量可以被定義爲final或非final形式
成員內部類:
可以在內部類中直接存取其所在類的私有成員變量
publicclass OuterClass{
//外部類
private class InnerClass{
// 內部類
}
}
內部類的對象實例化操作必須在外部類或外部類的非靜態方法中實現
局部內部類:
是在類的方法中定義的內部類,它的作用範圍也是在這個方法體內
匿名內部類:
不一定要給內部類取一個名字,可以直接以對象名來代替。匿名內部類的所有實現代碼都需要在大括號之間進行編寫
returnnew A(){
…….//內部類體
};
處理swing事件,事件監聽器使用比較多一點
靜態內部類:
在非靜態內部類中不可以聲明靜態成員,靜態內部類最大的特點:不可以使用外部類的非靜態成員。普通的內部類對象隱式的在外部保留了一個引用,指向創建它的外部類對象,但如果內部類被定義爲static時,他應該具有更多的限制
創建靜態內部類的對象,不需要其外部類的對象
不能從靜態內部類的對象中訪問非靜態外部類的對象。
內部類的繼承:
publicclass Out extends A.B{
//繼承A類的內部類B類
}
異常概述:
在程序運行時可能出現的一些錯誤稱爲異常,異常是一個在程序執行期間發生的事件,它中斷了正在執行的程序的正常指令流
錯誤:
異常產生後,如果不做任何處理,程序就會終止,拋出異常,程序將停留在出現異常的位置,不再執行下面的語句
捕捉異常:
捕獲結構:trycatch finally
try:存放可能發生異常的java語句
catch程序塊在try語句塊之後,用來激發被捕獲的異常;
finally:語句塊是異常處理結構的最後執行部分,無論try塊中的代碼如何退出,都將執行finally塊,是可選的
Java常見異常:
自定義異常:
繼承Exception異常類
創建自定義異常類
在方法中通過throw關鍵字拋出異常對象
如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲並處理,否則在方法的聲明處通過throws關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作
在出現異常方法的調用者中捕獲並處理異常
使用throws關鍵字拋出異常:
方法的聲明中
使用throw關鍵字拋出異常:
用於方法體中,拋出一個異常對象,程序在執行到throw語句時立即終止,它後面的語句都不執行,通過throw拋出異常後,如果想在上一級代碼中來捕獲並處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指明要拋出的異常,如果要捕捉throw拋出的異常,則必須使用try-catch語句
運行時異常:
RuntimeException異常是程序運行過程中產生的異常。Java類庫中的每個包中都定義了異常類,所有這些類都是Throwabble類的子類,Throwable類派生了兩個子類,分別是Exception和Error類,Error類及其子類用來描述java運行系統中的內部錯誤以及資源耗盡的錯誤,這類錯誤比較嚴重,Exception類稱爲非致命類性類,可以通過捕獲處理使程序繼續執行,Exception類又根據錯誤發生的原因分爲RuntimeException異常和非RuntimeException之外的異常
異常的使用原則:
不要使用過多的異常
使用try-catch捕獲異常時,要對異常作出處理
Try-catch語句塊的範圍不要太大,不利於異常的分析
一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異常或子異常
集合類概述:
又被稱爲容器。與數組的區別是,數組的長度是固定的,集合的長度是可變的,數組用來存放基本數據類型,集合用來存放對象的引用
Collection接口:
該接口通常不能直接使用,該接口提供了添加元素,刪除元素,管理數據地方法。List接口和Set接口都繼承了Collection接口
List接口:
除包含Collection接口中的方法外,還定義了:
get(intIndex):獲得指定索引位置的元素
set(intindex,Object obj):將集合中指定索引位置的對象修改爲指定的對象
List接口的實現類:
常用:
ArrayList:實現了可變的數組,允許所有元素,包括null,並可以根據索引位置對集合進行快速的隨機訪問,缺點是向指定的索引位置插入對象或刪除對象的速度比較慢
LinkedList;採用鏈表結構保存對象,這種結構的優點是便於向集合中插入和刪除對象,但對於隨機訪問集合中的對象,使用LinkedList類實現List集合的效率較慢
使用List集合時通常聲明爲List類型,可通過不同的實現來實例化集合
Set集合:
其中的對象不按特定的方式排序,只是簡單的把對象加入集合中,但Set集合中不能包含重複對象,繼承Collection接口
Map接口:
提供了將key映射到值得對象,一個映射不能包含重複的key,每個key最多隻能映射到一個值
Map接口的實現類:
Map接口常用的實現類有HashMap和TreeMap。建議使用HashMap類實現Map集合,因爲由HashMap類實現的Map集合對於添加和刪除映射關係效率更高
HashMap是基於哈希表的Map接口的實現,HashMap通過哈希碼對其內部的映射關係進行快速查找,而TreeMap中的映射關係存在一定的順序,如果希望Map集合中的對象也存在一定的順序,應該使用TreeMap類實現Map集合
流概述:
是一組有序的數據序列,分爲輸入流和輸出流,I/O流提供了一條通道程序,可以使用這條通道把源中的字節序列送到目的地,雖然I/O流經常與磁盤文件存取有關,但是程序的源和目的地也可以是鍵盤,鼠標,內存或顯示器窗口等
輸入流:
InputStream類是字節輸入流的抽象類,是所有字節輸入流的父類
Reader類是字符輸入流的抽象類,所有字符輸入流的實現都是它的子類
輸出流:
OutputStream類是字節輸出流的抽象類,是所有字節輸出流的超類
類中所有的方法均返回void
Writer類是字符輸出流的抽象類,所有字符輸出類的實現都是其他類的子類
文件的創建與刪除:
可以使用File類創建一個文件對象,通常使用以下3種構造方法來創建文件
File(Stringpathname)
File(Stringparent,String child)
File(Filef,String child)
createNewFile()創建文件
delete()刪除文件
獲取文件信息:
FileInputStream與FileOutputStream類:
都是用來操作磁盤文件,如果用戶的讀取需求比較簡單,則可以使用FileInputStream類
只提供了對字節或字節數組的讀取方式
FileReader類和FileWriter類:
由於漢字在文件中佔用兩個字節如果使用字節流,讀取不好可能會出現亂碼現象,此時採用FileReader類和FileWriter類可避免這種現象
BufferedInputStream類與BufferedOutputStream類:
帶緩存的輸入輸出流,多了一個flush方法來將緩存區的數據強制輸出完
實現減少文件讀取次數
BufferedReader類與BufferedWriter類:
同樣具有內部緩存機制,並可以以行爲單位進行輸入輸出’ 使用其Write()方法時,數據並沒有立刻被寫入至輸出流中,而是首先進入緩存區,如果想立刻將緩存區中的數據寫入輸出流中,一定要調用flush()方法
數據輸入輸出流:
DataInputStream類與DataOutputStream類允許應用程序以與機器無關的方式從底層輸入流中讀取基本java數據類型
只提供了一個readUTF()方法返回字符串
壓縮文件:
利用ZipOutputStream類對象,可將文件壓縮爲“zip”文件。ZipOutputStream構造函數:
ZipOutputStream(OutputStreamout);
解壓縮ZIP文件:
ZipInputStream類可讀取ZIP壓縮格式的文件
訪問構造方法:
在通過下列一組方法訪問構造方法時,將返回Constructor類型的對象或數組。每個Constructor對象代表一個構造方法,利用Constructor對象可以操縱相應的構造方法
getConstructors()
getConstructor(Class<?>…parameterTypes)
getDeclaredConstructors()
getDeclaredConstructor(Class<?>…parameterTypes)
如果是訪問指定的構造方法,需要根據該構造方法的入口參數的類型來訪問
訪問成員變量:
在通過下列一組方法訪問成員變量時,將返回Field類型的對象或數組。每個Field對象代表一個成員變量,利用Field對象可以操縱相應的成員變量
getFields()
getField(Stringname)
getDeclaredFields()
getDeclaredField(Stringname0
訪問方法:
使用反射。
在通過下列一組方法訪問方法時,將返回Method類型的對象或數組。每個Method對象代表一個方法,利用Method對象可以操縱相應的方法
getMethods()
getMethod(Stringname,Class<?>…parameterTypes)
getDeclaredMethods()
getDeclaredMethod(Stringname,Class<?>…paramertertypes)
如果是訪問指定的方法,需要根據該方法的名稱和入口參數的類型來訪問
定義Annotation類型:
需要用到用來定義接口的inter發擦關鍵字,不過需要在interface關鍵字前加一個“@”符號,即定義Annotation類型的關鍵字爲@interface,這個關鍵字的隱含意思是繼承了java.lang.annotation.Annotation接口
public@interface NoMemberAnnotation{
String value();//成員的定義
}
訪問Annotation信息:
在定義Annotation類型時將@Retention設置爲RetentionPolicy.RUNTIME,那麼在運行程序時通過反射就可以獲取到相關的Annotation信息
使用枚舉類型設置常量:
publicenum Constants{
Constants_A,
Constants .B
Constants .C
}
Enum是定義枚舉類型關鍵字,當需要在程序中使用常量時,可以使用Constants.Constants_A來表示
常量在接口裏定義不能被修改
深入瞭解枚舉類型:
枚舉類型較傳統定義常量的方式,除了具有參數類型檢測的優勢之外,還具有其他方面的優勢
用戶可以將一個枚舉類型看作是一個類,它繼承於java.lang.Enum類,當定義一個枚舉類型時,每一個枚舉類型成員都可以咯不做是枚舉類型的一個實例,這些枚舉類型成員都默認被final,public,static所修飾,所以當使用枚舉類型成員時直接使用枚舉類型名稱調用枚舉類型成員即可
枚舉類型可以定義接口
使用枚舉類型的優勢:
類型安全
緊湊有效的數據定義
可以和程序其他部分完美交互
運行效率高
定義泛型類:
設計程序時通常使用傳入的值與返回的值都以Object類型爲主。當需要使用這些實例時,必須正確的將該實例轉換爲原來的類型,否則在運行時將會發生ClassCastException異常。JDK1.5版本以後,提出了泛型機制
類名<T>
T代表一個類型的名稱
通過這種方式可以將類設置爲支持泛型的類
泛型的常規方法:
定義泛型類時聲明多個類型
定義泛型類時聲明數組類型
集合類聲明容器的元素
泛型的高級用法:
限制泛型可用類型:<Textends List> T的類型只能是List類的子類
使用類型通配符:<?>可以使用?來表示通配符
繼承泛型類與是信啊泛型接口
Interface|<T1>{}
ClassSubClass<T1,T2,T3>implements i<T1>{}
泛型總結:
泛型的參數只能是類類型,不可以是簡單類型
泛型的類型個數可以有多個
可以使用extends關鍵字限制泛型的類型
可以使用通配符限制泛型的類型
線程簡介:
繼承Thread類:
程序員啓動一個新線程需要建立Thread實例
實現Runnable接口:
如果程序員需要繼承其他類並使該程序可以使用線程,就需要使用Runnable接口
publicclass Thread extends Object implements Runnable
線程的生命週期:
包含7種狀態:出生狀態,就緒狀態,運行狀態,等待狀態,休眠狀態,阻塞狀態和死亡狀態
線程的休眠:
sleep(休眠時間)
線程的加入:
join(),另一個線程等待剛加入進去的線程結束後,才能繼續執行
線程的中斷:
stop()廢除了
現在提倡在run()方法中使用無限循環的形式,然後使用一個布爾型標記控制循環的停止
線程的禮讓:
yield()對於支持多任務的操作系統來說,不需要調用yeild()方法,因爲操作系統會爲線程自動分配CPU時間片來執行
線程的優先級:
Thread.MIN_PRIORITY(常數1)
Thread.MAX_PRIORITY(常數10)
Thread.NORM_PRIORITY(常數5):默認情況下
每個新線程都繼承了父線程的優先級
線程安全:
與進程相比,線程可共享資源
來源於多個線程同時存取單一對象的數據
線程同步機制:
同步塊:synchronized(“”)
同步方法: synchronized修飾方法
UDP網絡程序:
廣播數據報程序
DatagramSocket:
用於發送和接受數據報的套接字
構造方法:DatagramSocket():創建DatagramSocket對象,構造數據報套接字並將其綁定到本地主機上任何可用的端口。
DatagramSocket(intport):綁定到本地主機上的指定端口,常用
DatagramSocket(intport,InetAddress addr):綁定到指定的本地地址,適用於有多塊網卡和多個IP的情況
DatagramPacket::
表示數據報
網絡協議:
IP協議
TCP與UDP協議
局域網與因特網:
WANLAN
端口與套接字:
一臺計算機只有單一的鏈接到網絡的物理連接
Socket用於將應用程序與端口的鏈接
TCP網絡程序:
ServerSocket類:
用來表示服務器套接字,主要功能是等待來自網絡上的請求,可以通過指定的端口來等待鏈接的套接字,服務器套接字一次可以與一個套接字鏈接
InetAddress類:
與IP地址相關的類,利用該類可以獲取IP地址,主機地址等信息
SQL語言:
結構化查詢語言
數據定義語言:表格
數據操縱語言:數據
數據控制語言:授權
事務控制語言:事務
什麼是數據庫:
一種存儲結構
特點:實現數據共享
減少數據的冗餘度
數據的獨立性
數據實現集中控制
數據的一致性和可維護性,以確保數據的安全性和 可靠性
由文件系統發展出來的
數據庫的種類及功能:
基於數據模型:層次型,網狀型,關係型及面向對象型
層次數據庫:淘汰了
網狀數據庫
面向對象數據庫
關係數據庫:重點,最流行的
JDBC-ODBC橋:
JDBC驅動程序,完成了從JDBC操作到ODBC操作之間的轉換工作,允許JDBC驅動程序被用作ODBC的驅動程序,使用JDBC-ODBC橋連接數據庫的步驟如下:
1首先加載JDBC-ODBC橋的驅動程序
2使用java.sql包中的Connection接口,並通過DriveManager類的靜態方法getConnection()創建鏈接對象
3向數據庫發送SQL語句
JDBC技術:
面向對象的應用程序接口,指定了統一的訪問各種類型關係數據庫的標準接口,JDBC是一種底層的API
與數據庫建立一個鏈接
向數據庫發送SQL語句
處理從數據庫返回的結果
JDBC不能直接訪問數據庫,必須依賴於數據庫廠商提供的JDBC驅動
JDBC驅動程序的類型:
總體結構:4個組件
應用程序,驅動程序管理器,驅動程序和數據源組成
JDBC驅動基本分爲以下四種:JDBC-ODBC橋
本地API-部分用java編寫的驅動程序
JDBC網絡驅動
本地協議驅動
Connection接口:
代表與特定的數據庫的鏈接
DriverManager類:
用來管理數據庫中的所有驅動程序,是JDBC的管理層,作用於用戶和去驅動之間,跟蹤可用的驅動程序,並在數據庫的驅動程序之間建立連接,也處理諸如驅動程序登錄時間限制及登錄和跟蹤信息的顯示等事務,方法都是靜態方法,在程序中無需進行實例化,直接通過類名就可以調用
PreparedStatement接口:
繼承了Statement接口,用於執行動態的SQL語句
ResultSet接口:
封裝結果集,類似於一個臨時表。用來暫時存放數據庫查詢操作所獲得的結果集
Statement接口:
用於創建向數據庫中傳遞SQL語句的對象,該接口提供了一些方法可以實現對數據庫的常用操作
處理查詢結果集:
ResultSet
連接數據庫:
模糊查詢:
LIKE操作符用於模糊查詢,可使用“%”來代替0個或多個字符,使用下劃線“_”來代替一個字符。例:查詢一個型姓張的同學的信息
select*from tb_stu where name like ‘張%’
順序查詢:
ResultSet類的next()方法的返回值是boolean類型的數據,當遊標移動到最後一行之後會返回false,下面的實例就是將數據表tb_emp的全部信息顯示在控制檯上
sql=con.createStatement();
res=sql.executeQuery(“select* from tb_emp”);
while(res.next()){
String id =res.getString(“id”);
…….
}
添加、修改、刪除記錄:
sql=con.prepareStatement(“insert into tb_emp values(?,?,?)”);
sql =con.prepareStatement(“updatetb_stu set birthday”+”=?where id=(select min(id) from tb_emp)”);
sql =con.prepareStatement(“deletefrom tb_emp where id=”+”(select min(id)from tb_emp)”);
向數據庫發送SQL語句:
要執行SQL語句首先要獲得Statement類對象,通過創建的連接數據庫對象con的createStatement()方法獲得Statement對象
預處理語句:
prepareStatement()
打印控制類:
PrinterJob類是控制打印的主要類,抽象類,不能實例化對象
獲取PrinterJob對象
打印任務的名稱屬性
設置打印頁面
獲取打印用戶
打印狀態
“打印”對話框:
boolean=ok=job.printDialog();
job是PrinterJob類的實例對象
打印頁面:
必須實現Printable接口
多頁打印:
Book類:append()
打印預覽
Printer接口:print()方法