jdk 1.5新特性

jdk1.5的新特性之-------->静态导入

静态导入的作用:简化书写。
静态导入仅对于一个类的静态成员起作用、

静态导入的格式:

import static 包名.类名.静态成员;

静态导入要注意的实现:

  1. 如果静态导入的成员与本类的静态成员同名了,那么在本类中优先使用本类的静态成员, 如果要使用静态导入的方法,那么需要指定类名进行调用。
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);
        //排序:(有本地同名的静态函数时,只有写全)
        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循环

增强for循环的主要作用是: 简化迭代器的书写格式。
增强for循环的格式:

 for(元素的数据类型     变量名   : 遍历的目标){
    
 }

使用增强for循环的前提: 只有实现了Iterable接口的对象或者是数组对象才能使用。

增强for循环要注意的细节:

  1. 增强for循环 的底层还是通过获取迭代器的方式进行遍历的,只不过不需要我们手动获取迭代器而已,所以在使用增强for循环的遍历元素 的过程中不准使用集合对象改变集合对象中的元素个数。
  2. 增强for循环与迭代器遍历的区别: 增强for循环只能用于遍历集合的元素,不能增删元素 。 而迭代器的遍历方式可以使用迭代器的方法增删元素。
  3. 增强for循环使用的时候必须要存在一个遍历的目标对象, 而普通的for循环可以不存在遍历的目标对象。
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循环遍历
        for(int i = 0 ; i<arr.length ; i++){
            System.out.print(arr[i]+",");
        }
        
        
        //增强for循环
        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循环遍历map集合、。
        Set<Entry<Integer, String>> entryes = tree.entrySet();
        for(Entry<Integer, String> entry :  entryes){
            System.out.println("键:"+entry.getKey()+" 值:"+ entry.getValue());
        }
    }
}

jdk1.5新特性之----- 自定义类实现Iterable接口

实现了Iterable接口后就可以使用迭代功能啦!!!

//自定义一个集合类
class MyList implements Iterable<String>{
    
    Object[] arr ;
    
    int index = 0;//当前的索引值
    
    public MyList(){
        arr = new Object[10];
    }
    
    public void add(Object o){
        int minLength = index+1;
        ensureCapcity(minLength); //检查长度
        arr[index++]= o;
    }

    //检查当前的长度是否够用,如果不够用自动拓展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;  //游标
            
            @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新特性之----- 自定义类实现Iterable接口

可变参数的格式:

数据类型...  变量名 //几个点必须要写的

可变参数要 注意的事项:

  1. 如果一个函数的形参使用了可变参数,那么调用该函数的时候可以传递参数也可以不传递参数。
  2. 可变参数实际上就是一个数组.
  3. 可变参数必须要位于形参列表中的最后一个位置。
  4. 一个方法中最多只能使用一个可变参数。

需求:定义函数计算总和

public class Demo4 {
    
    public static void main(String[] args) {
        sum(1,2);         //当一个函数使用了可变参数的时候,传递的数据的时候,jvm会自动把实参数据保存到一个数组中,然后再传递给可变参数。
    }
    
    public static void sum(int... arr){
        int sum = 0;
        for(int i : arr){
            sum+=i;
        }
        System.out.println("总和:"+ sum);
    }

}

jdk1.5新特性之---自动装箱与自动拆箱

java是面向对象的语言, 任何的事物都使用了一个类进行了描述。 基本类型数据也是一类事物,所以
java对于基本类型的数据也使用了对应的类进行了描述,我们把描述基本类型变量的类称作为----- 包装类。

基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

***基本数据类型设计出对应的包装类型的好处: *** 可以让基本数据类型也使用上方法,让功能变得更加强大。

public class Demo5 {
    
    public static void main(String[] args) {
        /*String str = "12";
        
        //功能一:可以把字符串转成数字
        int num = Integer.parseInt(str); 
        System.out.println(num+1);
        
        //功能2: 可以把数字转成指定进制格式的字符串。
        int num2 = 10; 
        System.out.println("二进制:"+ Integer.toBinaryString(num2));
        System.out.println("八进制:"+ Integer.toOctalString(num2));
        System.out.println("十六进制:"+ Integer.toHexString(num2));*/
        
        
        //自动装箱 --     自动把基本数据类型转成引用数据类型数据,
        /*ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1); // new Integer(数据)
        list.add(2);
        */
        
        //自动拆箱:   自动把引用数据类型数据转成  基本数据类型.
        Integer i = new Integer(10);  //引用数据类型数据
        System.out.println(2+i); // intValue() 获取基本类型的数据
        
        /*
         Integer类内部维护了一个静态的数组,该数组内部存储了-128~127这些数据,当我们创建
         一个Integer对象的时候,如果数据是落入到了-128~127这个范围之内,那么会直接从数组中
         获取,而不会创建新的Integer对象。    ----------> 把一些常用的数据事先创建好,
         然后贡献给大家一起使用 : 享元模式。
         
         */
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1==i2);//true;在int表示范围内,所以比较的其实是两个int数据而已
        
        Integer ii1 = 128;
        Integer ii2 = 128;
        System.out.println(ii1==ii2)//false;因为超出了int表示的范围,所以这里是创建了两个不同对象
    }
}

jdk1.5的新特性之-------->枚举类

枚举类的应用场景:一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值 , 这时候我们就可以使用枚举类进行限制。

比如: 一年四季、 方向、 性别...

定义枚举类的格式:

enum  类名{
    
}

枚举类要注意的事项:

  1. 枚举类是一个特殊的类。
  2. 枚举值默认的修饰符是: public static final 。
  3. 枚举值其实就是一个当前枚举类的对象。
  4. 枚举值必须是枚举类中的第一个语句。
  5. 枚举类的构造方法默认的修饰符是private,修饰符也必须是private.
  6. 枚举类允许出现抽象的方法,但是一旦出现了抽象的方法,那么枚举值就必须要实现抽象方法。(几乎不用)
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;
    }
    
    //成员函数
    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语句适用的数据类型: byte\ short \ int \char \ String \枚举类型。

注意的事项:

  1. 在switch语句中使用枚举类的时候,case语句后面的枚举值不能带有枚举类,直接写枚举值即可。
//季节
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("秋天不远了..");
                break;
            case WINTER:
                System.out.println("冬天不见了..");
                break;
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容