jdk1.5的新特性之-------->靜態(tài)導(dǎo)入
靜態(tài)導(dǎo)入的作用:簡化書寫。
靜態(tài)導(dǎo)入僅對于一個類的靜態(tài)成員起作用、
靜態(tài)導(dǎo)入的格式:
import static 包名.類名.靜態(tài)成員;
靜態(tài)導(dǎo)入要注意的實現(xiàn):
- 如果靜態(tài)導(dǎo)入的成員與本類的靜態(tài)成員同名了,那么在本類中優(yōu)先使用本類的靜態(tài)成員, 如果要使用靜態(tài)導(dǎo)入的方法,那么需要指定類名進(jìn)行調(diào)用。
package cn.itcast.jdk15;
import java.util.ArrayList;
import java.util.Collections;
/*
import static java.util.Collections.sort;
import static java.util.Collections.max;
import static java.util.Collections.min;
*/
import static java.util.Collections.*;
import static java.lang.System.out;
public class Demo1 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(19);
list.add(3);
list.add(23);
list.add(4);
//排序:(有本地同名的靜態(tài)函數(shù)時,只有寫全)
Collections.sort(list);
out.println("集合的元素:"+ list);
out.println("集合 的最大值:"+ max(list));
out.println("集合 的最小值:"+ min(list));
out.println();
}
public static void sort(ArrayList<Integer> list){
System.out.println("哈哈,排序了...");
}
}
jdk1.5新特性之----- 增強for循環(huán)
增強for循環(huán)的主要作用是: 簡化迭代器的書寫格式。
增強for循環(huán)的格式:
for(元素的數(shù)據(jù)類型 變量名 : 遍歷的目標(biāo)){
}
使用增強for循環(huán)的前提: 只有實現(xiàn)了Iterable接口的對象或者是數(shù)組對象才能使用。
增強for循環(huán)要注意的細(xì)節(jié):
- 增強for循環(huán) 的底層還是通過獲取迭代器的方式進(jìn)行遍歷的,只不過不需要我們手動獲取迭代器而已,所以在使用增強for循環(huán)的遍歷元素 的過程中不準(zhǔn)使用集合對象改變集合對象中的元素個數(shù)。
- 增強for循環(huán)與迭代器遍歷的區(qū)別: 增強for循環(huán)只能用于遍歷集合的元素,不能增刪元素 。 而迭代器的遍歷方式可以使用迭代器的方法增刪元素。
- 增強for循環(huán)使用的時候必須要存在一個遍歷的目標(biāo)對象, 而普通的for循環(huán)可以不存在遍歷的目標(biāo)對象。
public class Demo2 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("張三");
set.add("李四");
set.add("王五");
/* System.out.println("===========迭代器的遍歷方式===========");
Iterator<String> it = set.iterator(); //使用迭代器
while(it.hasNext()){
String item = it.next();
System.out.print(item +",");
it.remove();
}
for(String item : set){ //遍歷出來的每個元素都會交給item變量。
System.out.print(item+",");
}
int[] arr = {19,17,18,30};
//普通的for循環(huán)遍歷
for(int i = 0 ; i<arr.length ; i++){
System.out.print(arr[i]+",");
}
//增強for循環(huán)
for(int item :arr){
System.out.print(item+",");
}
int[] arr2 = new int[5];
//在控制臺打印5句hello world
for(int i = 0 ; i<5; i++){
System.out.println("hello world");
}
*/
TreeMap<Integer, String> tree = new TreeMap<Integer, String>();
tree.put(110, "張三");
tree.put(109, "李四");
tree.put(120, "王五");
tree.put(115, "趙六");
//使用增強for循環(huán)遍歷map集合、。
Set<Entry<Integer, String>> entryes = tree.entrySet();
for(Entry<Integer, String> entry : entryes){
System.out.println("鍵:"+entry.getKey()+" 值:"+ entry.getValue());
}
}
}
jdk1.5新特性之----- 自定義類實現(xiàn)Iterable接口
實現(xiàn)了Iterable接口后就可以使用迭代功能啦!!!
//自定義一個集合類
class MyList implements Iterable<String>{
Object[] arr ;
int index = 0;//當(dāng)前的索引值
public MyList(){
arr = new Object[10];
}
public void add(Object o){
int minLength = index+1;
ensureCapcity(minLength); //檢查長度
arr[index++]= o;
}
//檢查當(dāng)前的長度是否夠用,如果不夠用自動拓展0.5倍。
public void ensureCapcity(int minLength){
if(minLength==arr.length){
int newLength = (int) (arr.length*1.5);
arr = Arrays.copyOf(arr, newLength);
}
}
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
int cursor; //游標(biāo)
@Override
public boolean hasNext() {
return cursor!=index;
}
@Override
public String next() {
return (String) arr[cursor++];
}
@Override
public void remove() {
}
};
}
}
public class Demo3 {
public static void main(String[] args) {
MyList list = new MyList();
list.add("張三");
list.add("李四");
list.add("王五");
list.add("趙六");
for(String item :list){
System.out.println(item+",");
}
}
}
jdk1.5新特性之----- 自定義類實現(xiàn)Iterable接口
可變參數(shù)的格式:
數(shù)據(jù)類型... 變量名 //幾個點必須要寫的
可變參數(shù)要 注意的事項:
- 如果一個函數(shù)的形參使用了可變參數(shù),那么調(diào)用該函數(shù)的時候可以傳遞參數(shù)也可以不傳遞參數(shù)。
- 可變參數(shù)實際上就是一個數(shù)組.
- 可變參數(shù)必須要位于形參列表中的最后一個位置。
- 一個方法中最多只能使用一個可變參數(shù)。
需求:定義函數(shù)計算總和
public class Demo4 {
public static void main(String[] args) {
sum(1,2); //當(dāng)一個函數(shù)使用了可變參數(shù)的時候,傳遞的數(shù)據(jù)的時候,jvm會自動把實參數(shù)據(jù)保存到一個數(shù)組中,然后再傳遞給可變參數(shù)。
}
public static void sum(int... arr){
int sum = 0;
for(int i : arr){
sum+=i;
}
System.out.println("總和:"+ sum);
}
}
jdk1.5新特性之---自動裝箱與自動拆箱
java是面向?qū)ο蟮恼Z言, 任何的事物都使用了一個類進(jìn)行了描述。 基本類型數(shù)據(jù)也是一類事物,所以
java對于基本類型的數(shù)據(jù)也使用了對應(yīng)的類進(jìn)行了描述,我們把描述基本類型變量的類稱作為----- 包裝類。
基本數(shù)據(jù)類型 | 包裝類型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
***基本數(shù)據(jù)類型設(shè)計出對應(yīng)的包裝類型的好處: *** 可以讓基本數(shù)據(jù)類型也使用上方法,讓功能變得更加強大。
public class Demo5 {
public static void main(String[] args) {
/*String str = "12";
//功能一:可以把字符串轉(zhuǎn)成數(shù)字
int num = Integer.parseInt(str);
System.out.println(num+1);
//功能2: 可以把數(shù)字轉(zhuǎn)成指定進(jìn)制格式的字符串。
int num2 = 10;
System.out.println("二進(jìn)制:"+ Integer.toBinaryString(num2));
System.out.println("八進(jìn)制:"+ Integer.toOctalString(num2));
System.out.println("十六進(jìn)制:"+ Integer.toHexString(num2));*/
//自動裝箱 -- 自動把基本數(shù)據(jù)類型轉(zhuǎn)成引用數(shù)據(jù)類型數(shù)據(jù),
/*ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1); // new Integer(數(shù)據(jù))
list.add(2);
*/
//自動拆箱: 自動把引用數(shù)據(jù)類型數(shù)據(jù)轉(zhuǎn)成 基本數(shù)據(jù)類型.
Integer i = new Integer(10); //引用數(shù)據(jù)類型數(shù)據(jù)
System.out.println(2+i); // intValue() 獲取基本類型的數(shù)據(jù)
/*
Integer類內(nèi)部維護(hù)了一個靜態(tài)的數(shù)組,該數(shù)組內(nèi)部存儲了-128~127這些數(shù)據(jù),當(dāng)我們創(chuàng)建
一個Integer對象的時候,如果數(shù)據(jù)是落入到了-128~127這個范圍之內(nèi),那么會直接從數(shù)組中
獲取,而不會創(chuàng)建新的Integer對象。 ----------> 把一些常用的數(shù)據(jù)事先創(chuàng)建好,
然后貢獻(xiàn)給大家一起使用 : 享元模式。
*/
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2);//true;在int表示范圍內(nèi),所以比較的其實是兩個int數(shù)據(jù)而已
Integer ii1 = 128;
Integer ii2 = 128;
System.out.println(ii1==ii2)//false;因為超出了int表示的范圍,所以這里是創(chuàng)建了兩個不同對象
}
}
jdk1.5的新特性之-------->枚舉類
枚舉類的應(yīng)用場景:一些方法在運行時,它需要的數(shù)據(jù)不能是任意的,而必須是一定范圍內(nèi)的值 , 這時候我們就可以使用枚舉類進(jìn)行限制。
比如: 一年四季、 方向、 性別...
定義枚舉類的格式:
enum 類名{
}
枚舉類要注意的事項:
- 枚舉類是一個特殊的類。
- 枚舉值默認(rèn)的修飾符是: public static final 。
- 枚舉值其實就是一個當(dāng)前枚舉類的對象。
- 枚舉值必須是枚舉類中的第一個語句。
- 枚舉類的構(gòu)造方法默認(rèn)的修飾符是private,修飾符也必須是private.
- 枚舉類允許出現(xiàn)抽象的方法,但是一旦出現(xiàn)了抽象的方法,那么枚舉值就必須要實現(xiàn)抽象方法。(幾乎不用)
enum Direction{
/*UP("上"){
@Override
public void test() {
System.out.println("哈哈,爽嗎?");
}
},DOWN("下"){
@Override
public void test() {
System.out.println("呵呵,是向下!!");
}
}; */ //枚舉值
UP("上"),DOWN("下");
String value; //成員變量
private Direction(String value){
this.value = value;
}
//成員函數(shù)
public void print(){
System.out.println("value:"+value);
}
//public abstract void test();
}
public class Demo7 {
public static void main(String[] args) {
//Direction.UP.test();使用抽象方法
Direciton.DOWN.print();
//使用values方法可以使用該枚舉類的所有枚舉值
Direction []d = Direction.values();
for(Direction value :d){
System.out.println(value);
}
}
}
switch語句的使用
switch語句適用的數(shù)據(jù)類型: byte\ short \ int \char \ String \枚舉類型。
注意的事項:
- 在switch語句中使用枚舉類的時候,case語句后面的枚舉值不能帶有枚舉類,直接寫枚舉值即可。
//季節(jié)
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
}
public class Demo8 {
public static void main(String[] args) {
Season currentSeason = Season.SUMMER;
switch (currentSeason) {
case SPRING:
System.out.println("春天來了..");
break;
case SUMMER:
System.out.println("夏天到了..");
break;
case AUTUMN:
System.out.println("秋天不遠(yuǎn)了..");
break;
case WINTER:
System.out.println("冬天不見了..");
break;
}
}
}