JAVASE學習總結(二)
阿新 • • 發佈:2019-02-09
Collections.fill(list,student1);
Collections.replaceAll(list,studnet1,student5);
}
}
5.泛型
將物件的型別作為引數,指定到其它類或者方法上,從而保證型別轉換的安全性和穩定性,這就是泛型。泛型的本質就是引數化型別。
建立集合時使用泛型指定集合中元素的型別,從集合中取出元素時無需進行強制型別轉換。如果把非指定型別的元素放入集合時,會提示編譯錯誤。
示例:
Map<String,Stduent> students = new HashMap<String,Student>();
students.put("Jack",student1);
students.put("Jose",student2);
for(String key:students.keySet()){//遍歷key值
System.out.println(key);//key無需再強制型別轉換
}
for(Student stu:students.values()){ //stu無需再強制型別轉換
Sytem.out.println(stu.getName()+" "+stu.getSex())
}
Iterator it = studnets.iterator();
while(it.hasNext()){
Studnet stus = it.next();// it.next()獲取到的物件無需再強制型別轉換
System.out.println(stus.getName()+" "+suts.getSex());
}
學習泛型還需瞭解兩個重要的概念:
a.引數化型別:引數化型別包含了一個類或者介面,以及實際的型別引數列表。
b.型別變數:是一種非限定性識別符號,用來指定類、介面或者方法的型別。
二、JAVA中常用的實用類
1.JAVA API
API除了有“應用程式程式設計介面”的意思外,還特指API幫助文件。
API提供了以下常用的包:
java.lang 包含了java程式的基礎類和介面。如包裝類、Math類、String類等
java.util 包含了系統輔助類或者工具類。如Collection、list、Map等集合類等
java.io 包含了輸入輸出有關的類。如InputStream \OutputStream 、Reader\Writer類等
java.net 包含了與網路有關的類。如:Socket、ServerSocket類等
java.sql 包含了與資料庫有關的類。如:Connection、Statement類等
2.列舉類
列舉類是由一組固定的常量組成的類,使用關鍵字enum定義。
例如定義標識性別的列舉類:
public enum Genders{ //使用關鍵字enum而且修飾符一般為public
Male,Female //各個常量之間用","隔開
}
示例:
public enum Week{ //定義列舉類
MON,TUE,WED,THR,FRI,SAT,SUN
}
class WeekDemo{
public void doWhat(Week day){
switch(day){
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日,努力工作");
break;
case SAT:
case SUN:
System.out.println("休息日,釣魚、看電影");
break;
default:
System.out.println("一個星期就7天");
}
}
public static void main(String[] args){
WeekDemo wd = new WeekDemo();
wd.doWhat(Week.THU);
wd.doWhat(Week.SAT);
}
}
在程式中使用列舉類的好處:
a.是程式碼易於維護,有助於確保為變數指定合法、期望的值。
b.便於輸入,使用列舉賦值,只需在列舉名後面輸入“.”就能將所有列舉值顯示出來。
3.包裝類
JAVA語言是面向物件的,但JAVA中的基本資料型別卻不是面向物件的,為了解決這個不足,JAVA為8個基本資料型別都分別設計了一個對應的類,稱為包裝類。
包裝類的主要用途有兩個:
a.包裝類作為和基本資料型別對應的類存在,方便物件的操作。
b.包裝類包含了每種基本資料型別的相關屬性,如最大、最小值以及相關的操作方法。
包裝類和基本資料型別的轉換
1.基本資料型別轉換成包裝類
a>使用包裝類的兩個構造方法
public Type(type value)
public Type(String value)
使用new關鍵字將一個基本資料型別的值包裝成一個物件。如,要把int包裝成Integer類
int x = 21;
Integer intX = new Integer(21); //第一種構造方法public Type(type value)
Integer intX = new Integer("21");//第二種構造方法public Type(String value)
char y = w;
Character charY = new Character('w');//正確
Character charY = new Character("w"); //這種形式是錯誤的,因為char y是字元,不是字串
b>使用包裝類的方法valueOf()
如:
Integer intX = Integer.valueOf("21"); //正確
Character charY = Character.valueOf("w");//錯誤,y是char型別不是String型別
Character charY = Character.valueOf('w');正確
2.包裝類轉換成基本資料型別
方法:public type typeValue(); 如:byteValue()、charValue()分別返回byte、char值。
Integer integer = new Integer(25);
int intX = integer.intValue()//呼叫Integer包裝類的intValue()方法
3.基本資料型別和包裝類自動轉換
JAVA5.0之後,實現了包裝類和基本資料型別的自動轉換,編譯器會自動完成。
如:
Integer intObject = 5;//基本資料型別轉換成包裝類
int intValue = intObject; //包裝類轉換成基本資料型別
注:包裝類物件只有在基本資料型別需要用物件來表示時才使用,並不是用來取代基本資料型別的。否則相互轉換會增加系統的額外負擔。
4.Math類
java.lang.Math類是一個final類,提供了一些基本數學運算和幾何運算的方法。
Math類常見的方法有:
static double abs(double a) 返回double值得絕對值。如:Math.abs(-3.3);返回3.3
static double max(double a,double b) 返回最大值。如:Math.max(2.5,6.3);返回6.3
static double random();隨機返回一個double值,該值大於等於0.0且小於1.0 (>=0.0&&<1.0)
如:隨機產生0-9的數
int number = (int)(Math.random()*10);
5.String類
String類提供了很多方法,如,獲取字串的長度,比較、連線、提取、替換等等。
a>length()返回字串的長度
b>equals()比較兩個字串的值是否相同。str1.equals(str2);
注:java中"=="和equals()方法應用於字串時,所判斷的內容是不同的。"=="判斷的是兩個字串在記憶體中的地址是否相同,也就是判斷是否是同一個物件,而equals()判斷的是兩個字串的值是否相等。用equals()比較兩個字串"java"和"JAVA"時是不相等的,但他們都是同一門課程,因此需要使用另一個方法equalsIgnoreCase()方法。這個方法比較字串時會忽略字元的大小寫。
c>equalsIgnoreCase()//忽略大小寫
toLowerCase()//轉換成小寫
toUpperCase() //轉換成大寫
d>concat()方法//連線字串。如:str1.concat(str2);返回一個新的字串str1str2
連線字串也可以用"+"來連線
e> indexOf(int ch)
indexOf(String str) //搜尋第一個出現的字元ch(字串str)
lastIndexOf(int ch)
lastIndexOf(String str)//搜尋最後一個出現的字元ch(字串str)
substring(int index)//提取從索引位置開始的字串部分
substring(beginindex,endindex)//提取兩個索引之間的字串部分
trim()//返回一個前後不含任何空格的字串副本
示例:判斷郵箱名稱和JAVA檔名稱是否合法
public class Test{
public static void main(String[] args){
boolean fileflag = false;//檔案訊號量標識
boolean mainflag = false;//郵箱標識
Scanner input = new Scanner(System.in);
String filename = input.next();
String mailname = input.next();
//檢查JAVA檔名是否合法
int index = filename.lastIndexOf(‘.’);//"."的位置
if(index!=-1&&index!=0&&filename.substing(index+1,filename.length()).equals("java")){
fileflag = true;
}else{
System.out.println("檔名無效");
}
//檢查郵箱格式是否合法
if(mailname.indexOf(‘@’)!=-1&&mailname.indexOf(‘@’)!=0&&mailname.indexof(‘.’)>mailna
me.indexOf(’@‘)){
mailflag = true;
}else{
System.out.println("無效的郵箱名");
}
if(fileflag&&mailflag){
System.out.println("提交成功");
}else{
System.out.prinltn("提交失敗");
}
}
}
f> split()//拆分字串
示例:關鍵程式碼:
String words ="abc+def+ghi+jkl";
String[] word = new String[10];
word = words.split("+");//將字串按"+"拆分
for(String str:word){
System.out.println(str);
}
6.StringBuffer類和StringBuilder類
StringBuffer類的宣告和初始化
StringBuffer sb = new StringBuffer("浪子回頭");
StringBuffer常用的方法
a> toString() //轉換為字串型別
b> append() //追加字串 str.append(args); 該方法不同於String的concat()方法的是StringBuffer類可
以將任何型別的值追加到字串後面。
示例:
//關鍵程式碼:
StringBuffer sb = new StringBuffer("浪子回頭");
StringBuffer sb2 = sb.append("金不換");
int num = 100000000;
StringBuffer sb3 = sb2.append(num);//追加了一個int型別的整數
System.out.println(sb3);
執行結果:浪子回頭金不換100000000
c> insert(index,args)方法 將引數插入到指定的位置後返回,引數可以是任何型別。
示例:從後往前每隔3位插入","
String num = "1234567890";
StringBuffer sb = new StringBuffer(num);
for(int i=sb.length()-3;i>0;i=i-3){
sb.insert(i,',');
}
System.out.prinltn(sb.toString());
StringBuilder類
StringBuilder類是一個可變的字元序列,此類提供一個與StringBuffer相容的API,它比StringBuffer實
現快。
7.String 、StringBuffer、StringBuilder的區別
String:字串常量
String 是不可變的物件,在每次對String進行改變的時候其實等於生成了一個新的String物件,然後
指向新的String物件地址。
StringBuffer: 字串變數
StringBuffer是可變的字串,在每次對StringBuffer物件進行改變時,會對StringBuffer自身進行
操作,而不會形成新的物件。在字串連線操作中,Stringbuffer比String效率
StringBuilder: 字串變數
StringBuilder它與StringBuffer類等價,區別在於StringBuffer類是執行緒安全的,StringBuilder類是
單執行緒的,不提供同步。
8.日期和時間類
Date類、Calendar類、SimpleDateFormat類等
Date date = new Date();//獲取系統當前時間
Calendar類是Date類的增強版,它是個抽象類,可以通過靜態方法getInstance()方法獲得Calendar物件
SimpleDateFormat類用來格式化時間
示例:關鍵程式碼:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println("當前時間為:"+sdf.format(date));
輸出結果:當前時間為:2013年8月30日 14:47:34
Calendar示例關鍵程式碼:
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"
+c.get(Calendar.DAY_OF_MONTH)+"日");
Ststem.out.println("星期"+(c.get(Calendar.DAY_OF_WEEK)-1);
9.Random類
Random類用於生成隨機數。
構造方法:Random()/Random(long seed)種子隨機數生成器
示例:生成10個10以內大於或等於0的整數
Random rand = new Random(100);
Random rand2 = new Random(100)
for(int i=0;i<10;i++){
int num = rand.nextInt(10);
System.out.println("第"+(i+1)+"個隨機數為:"+num);
}
for(int i=0;i<10;i++){
int num2 = rand2.nextInt(10);
System.out.println(
Collections.replaceAll(list,studnet1,student5);
}
}
5.泛型
將物件的型別作為引數,指定到其它類或者方法上,從而保證型別轉換的安全性和穩定性,這就是泛型。泛型的本質就是引數化型別。
建立集合時使用泛型指定集合中元素的型別,從集合中取出元素時無需進行強制型別轉換。如果把非指定型別的元素放入集合時,會提示編譯錯誤。
示例:
Map<String,Stduent> students = new HashMap<String,Student>();
students.put("Jack",student1);
students.put("Jose",student2);
for(String key:students.keySet()){//遍歷key值
System.out.println(key);//key無需再強制型別轉換
}
for(Student stu:students.values()){ //stu無需再強制型別轉換
Sytem.out.println(stu.getName()+" "+stu.getSex())
}
Iterator it = studnets.iterator();
while(it.hasNext()){
Studnet stus = it.next();// it.next()獲取到的物件無需再強制型別轉換
System.out.println(stus.getName()+" "+suts.getSex());
}
學習泛型還需瞭解兩個重要的概念:
a.引數化型別:引數化型別包含了一個類或者介面,以及實際的型別引數列表。
b.型別變數:是一種非限定性識別符號,用來指定類、介面或者方法的型別。
二、JAVA中常用的實用類
1.JAVA API
API除了有“應用程式程式設計介面”的意思外,還特指API幫助文件。
API提供了以下常用的包:
java.lang 包含了java程式的基礎類和介面。如包裝類、Math類、String類等
java.util 包含了系統輔助類或者工具類。如Collection、list、Map等集合類等
java.io 包含了輸入輸出有關的類。如InputStream \OutputStream 、Reader\Writer類等
java.net 包含了與網路有關的類。如:Socket、ServerSocket類等
java.sql 包含了與資料庫有關的類。如:Connection、Statement類等
2.列舉類
列舉類是由一組固定的常量組成的類,使用關鍵字enum定義。
例如定義標識性別的列舉類:
public enum Genders{ //使用關鍵字enum而且修飾符一般為public
Male,Female //各個常量之間用","隔開
}
示例:
public enum Week{ //定義列舉類
MON,TUE,WED,THR,FRI,SAT,SUN
}
class WeekDemo{
public void doWhat(Week day){
switch(day){
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日,努力工作");
break;
case SAT:
case SUN:
System.out.println("休息日,釣魚、看電影");
break;
default:
System.out.println("一個星期就7天");
}
}
public static void main(String[] args){
WeekDemo wd = new WeekDemo();
wd.doWhat(Week.THU);
wd.doWhat(Week.SAT);
}
}
在程式中使用列舉類的好處:
a.是程式碼易於維護,有助於確保為變數指定合法、期望的值。
b.便於輸入,使用列舉賦值,只需在列舉名後面輸入“.”就能將所有列舉值顯示出來。
3.包裝類
JAVA語言是面向物件的,但JAVA中的基本資料型別卻不是面向物件的,為了解決這個不足,JAVA為8個基本資料型別都分別設計了一個對應的類,稱為包裝類。
包裝類的主要用途有兩個:
a.包裝類作為和基本資料型別對應的類存在,方便物件的操作。
b.包裝類包含了每種基本資料型別的相關屬性,如最大、最小值以及相關的操作方法。
包裝類和基本資料型別的轉換
1.基本資料型別轉換成包裝類
a>使用包裝類的兩個構造方法
public Type(type value)
public Type(String value)
使用new關鍵字將一個基本資料型別的值包裝成一個物件。如,要把int包裝成Integer類
int x = 21;
Integer intX = new Integer(21); //第一種構造方法public Type(type value)
Integer intX = new Integer("21");//第二種構造方法public Type(String value)
char y = w;
Character charY = new Character('w');//正確
Character charY = new Character("w"); //這種形式是錯誤的,因為char y是字元,不是字串
b>使用包裝類的方法valueOf()
如:
Integer intX = Integer.valueOf("21"); //正確
Character charY = Character.valueOf("w");//錯誤,y是char型別不是String型別
Character charY = Character.valueOf('w');正確
2.包裝類轉換成基本資料型別
方法:public type typeValue(); 如:byteValue()、charValue()分別返回byte、char值。
Integer integer = new Integer(25);
int intX = integer.intValue()//呼叫Integer包裝類的intValue()方法
3.基本資料型別和包裝類自動轉換
JAVA5.0之後,實現了包裝類和基本資料型別的自動轉換,編譯器會自動完成。
如:
Integer intObject = 5;//基本資料型別轉換成包裝類
int intValue = intObject; //包裝類轉換成基本資料型別
注:包裝類物件只有在基本資料型別需要用物件來表示時才使用,並不是用來取代基本資料型別的。否則相互轉換會增加系統的額外負擔。
4.Math類
java.lang.Math類是一個final類,提供了一些基本數學運算和幾何運算的方法。
Math類常見的方法有:
static double abs(double a) 返回double值得絕對值。如:Math.abs(-3.3);返回3.3
static double max(double a,double b) 返回最大值。如:Math.max(2.5,6.3);返回6.3
static double random();隨機返回一個double值,該值大於等於0.0且小於1.0 (>=0.0&&<1.0)
如:隨機產生0-9的數
int number = (int)(Math.random()*10);
5.String類
String類提供了很多方法,如,獲取字串的長度,比較、連線、提取、替換等等。
a>length()返回字串的長度
b>equals()比較兩個字串的值是否相同。str1.equals(str2);
注:java中"=="和equals()方法應用於字串時,所判斷的內容是不同的。"=="判斷的是兩個字串在記憶體中的地址是否相同,也就是判斷是否是同一個物件,而equals()判斷的是兩個字串的值是否相等。用equals()比較兩個字串"java"和"JAVA"時是不相等的,但他們都是同一門課程,因此需要使用另一個方法equalsIgnoreCase()方法。這個方法比較字串時會忽略字元的大小寫。
c>equalsIgnoreCase()//忽略大小寫
toLowerCase()//轉換成小寫
toUpperCase() //轉換成大寫
d>concat()方法//連線字串。如:str1.concat(str2);返回一個新的字串str1str2
連線字串也可以用"+"來連線
e> indexOf(int ch)
indexOf(String str) //搜尋第一個出現的字元ch(字串str)
lastIndexOf(int ch)
lastIndexOf(String str)//搜尋最後一個出現的字元ch(字串str)
substring(int index)//提取從索引位置開始的字串部分
substring(beginindex,endindex)//提取兩個索引之間的字串部分
trim()//返回一個前後不含任何空格的字串副本
示例:判斷郵箱名稱和JAVA檔名稱是否合法
public class Test{
public static void main(String[] args){
boolean fileflag = false;//檔案訊號量標識
boolean mainflag = false;//郵箱標識
Scanner input = new Scanner(System.in);
String filename = input.next();
String mailname = input.next();
//檢查JAVA檔名是否合法
int index = filename.lastIndexOf(‘.’);//"."的位置
if(index!=-1&&index!=0&&filename.substing(index+1,filename.length()).equals("java")){
fileflag = true;
}else{
System.out.println("檔名無效");
}
//檢查郵箱格式是否合法
if(mailname.indexOf(‘@’)!=-1&&mailname.indexOf(‘@’)!=0&&mailname.indexof(‘.’)>mailna
me.indexOf(’@‘)){
mailflag = true;
}else{
System.out.println("無效的郵箱名");
}
if(fileflag&&mailflag){
System.out.println("提交成功");
}else{
System.out.prinltn("提交失敗");
}
}
}
f> split()//拆分字串
示例:關鍵程式碼:
String words ="abc+def+ghi+jkl";
String[] word = new String[10];
word = words.split("+");//將字串按"+"拆分
for(String str:word){
System.out.println(str);
}
6.StringBuffer類和StringBuilder類
StringBuffer類的宣告和初始化
StringBuffer sb = new StringBuffer("浪子回頭");
StringBuffer常用的方法
a> toString() //轉換為字串型別
b> append() //追加字串 str.append(args); 該方法不同於String的concat()方法的是StringBuffer類可
以將任何型別的值追加到字串後面。
示例:
//關鍵程式碼:
StringBuffer sb = new StringBuffer("浪子回頭");
StringBuffer sb2 = sb.append("金不換");
int num = 100000000;
StringBuffer sb3 = sb2.append(num);//追加了一個int型別的整數
System.out.println(sb3);
執行結果:浪子回頭金不換100000000
c> insert(index,args)方法 將引數插入到指定的位置後返回,引數可以是任何型別。
示例:從後往前每隔3位插入","
String num = "1234567890";
StringBuffer sb = new StringBuffer(num);
for(int i=sb.length()-3;i>0;i=i-3){
sb.insert(i,',');
}
System.out.prinltn(sb.toString());
StringBuilder類
StringBuilder類是一個可變的字元序列,此類提供一個與StringBuffer相容的API,它比StringBuffer實
現快。
7.String 、StringBuffer、StringBuilder的區別
String:字串常量
String 是不可變的物件,在每次對String進行改變的時候其實等於生成了一個新的String物件,然後
指向新的String物件地址。
StringBuffer: 字串變數
StringBuffer是可變的字串,在每次對StringBuffer物件進行改變時,會對StringBuffer自身進行
操作,而不會形成新的物件。在字串連線操作中,Stringbuffer比String效率
StringBuilder: 字串變數
StringBuilder它與StringBuffer類等價,區別在於StringBuffer類是執行緒安全的,StringBuilder類是
單執行緒的,不提供同步。
8.日期和時間類
Date類、Calendar類、SimpleDateFormat類等
Date date = new Date();//獲取系統當前時間
Calendar類是Date類的增強版,它是個抽象類,可以通過靜態方法getInstance()方法獲得Calendar物件
SimpleDateFormat類用來格式化時間
示例:關鍵程式碼:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println("當前時間為:"+sdf.format(date));
輸出結果:當前時間為:2013年8月30日 14:47:34
Calendar示例關鍵程式碼:
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"
+c.get(Calendar.DAY_OF_MONTH)+"日");
Ststem.out.println("星期"+(c.get(Calendar.DAY_OF_WEEK)-1);
9.Random類
Random類用於生成隨機數。
構造方法:Random()/Random(long seed)種子隨機數生成器
示例:生成10個10以內大於或等於0的整數
Random rand = new Random(100);
Random rand2 = new Random(100)
for(int i=0;i<10;i++){
int num = rand.nextInt(10);
System.out.println("第"+(i+1)+"個隨機數為:"+num);
}
for(int i=0;i<10;i++){
int num2 = rand2.nextInt(10);
System.out.println(