语法糖机制(JDK1.5新特性) ---- 程序员的最爱

本文介绍了Java 1.5引入的一些语法糖特性,包括自动拆装箱机制,增强了for循环的便利性,可变参数的使用场景及注意事项,静态导入的便捷性,以及枚举的介绍和常见方法。这些特性显著提高了Java开发的效率和代码的可读性。
摘要由CSDN通过智能技术生成

一.自动拆装箱机制

1.自动拆装箱

2.jdk1.5版本之前是手动拆装箱!

二.增强for循环

1.语法格式(快捷生成方式:  集合或数组名.for  然后回车即可!)

2.好处和注意事项

三.可变参数 

1.可变参数适用于定义方法的时候不知道该定义多少个参数的情况!

2.格式:修饰符 返回值类型 方法名(数据类型…  变量名){}

3.注意事项

四.静态导入 

五.枚举

1.枚举的介绍

2.枚举类的常见方法 


一.自动拆装箱机制

自动拆装箱机制是jdk1.5版本之后才有的机制,因为用起来很舒心,所以有了语法糖这个说法!(jdk1.5版本之前是手动拆装箱的哈!)

1.自动拆装箱

自动装箱:自动将基本类型转换成他对应的包装类型.
自动拆箱:自动将包装类型转换成天对应的基本类型.

public class Test {
    public static void main(String[] args) {
          
            //自动装箱
            int num = 200;
            Integer integer = num;

            
            Integer a = new Integer(20);
            Integer b = new Integer(120);
            //自动拆箱
            int sum = a + b; 
            System.out.println(sum);
            
            Integer i = 100; //自动装箱
            i += 200; //先自动拆箱,再自动装箱

        }
    }

2.jdk1.5版本之前是手动拆装箱!

public class Test {
    public static void main(String[] args) {
            
        //手动装箱
        Integer integer = Integer.valueOf(100);

        Integer a = new Integer(5);
        Integer b = new Integer(15);
        //手动拆箱
        int i = a.intValue();
        int j = b.intValue();
        System.out.println(i + j);

        }

    }

补充:自动拆装箱里面有一个定律就是自动拆装箱的数字如果大于127,那么俩个对象的地址值不相等,如果小于等于127,那么俩个对象的地址值是相等的!

public class ChaiZhuangXiangTest {
    public static void main(String[] args) {
           
        Integer sum1=128;
        Integer sum2=128;

        Integer sum3=127;
        Integer sum4=127;

        //Integer中重写了equals方法,重写之后判断的是内容是否相等.所以用==判断地址值是否相等.
        System.out.println(sum1==sum2);       //false
        System.out.println(sum3==sum4);       //true

        }
    }

其原因需要认真查看底层代码实现才能懂! 其详细介绍在这里!    ------>    这里这里!


 二.增强for循环

JDK1.5版本之后才出现了增强for循环,也可称为新式for循环.它的出现简化了数组和Collection集合的遍历.

1.语法格式(快捷生成方式:  集合或数组名.for  然后回车即可!)

for(元素数据类型 变量 : 数组或者Collection集合) {
        使用变量即可,该变量就是元素
    }

2.好处和注意事项

好处是简化了遍历,注意事项------>增强for的目标要判断是否为null并且在迭代集合的途中,不能增删元素,会报并发修改异常.(并发修改异常------->这里这里)

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {

        //数组
        int[] arr = {10, 50, 30, 90, 25, 30};
        
        //增强for循环 JDK1.5
        //for(容器中元素的数据类型 变量名:容器名)
        for (int ele : arr) {
            System.out.println(ele);
        }

        //集合
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("eee");
        list.add("fff");
        
        for (String s : list) {
            System.out.println(s);
        }

    }
}

三.可变参数 

1.可变参数适用于定义方法的时候不知道该定义多少个参数的情况!

2.格式:修饰符 返回值类型 方法名(数据类型…  变量名){}

3.注意事项

  • 这里的变量其实是一个数组
  • 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
public class Test {
        public static void main(String[] args) {
            
            int sum1 = add(2, 6);
            int sum2 = add(2, 6, 7);
            int sum3 = add(2, 6, 7, 8);
            System.out.println(sum1);
            System.out.println(sum2);
            System.out.println(sum3);
        }

        public static int add(int... a) {
            //此时可以传入多个数据.
            System.out.println(a.length);
            int sum = 0;
            for (int i : a) {
                sum += i;
            }
            return sum;
        }

}

四.静态导入 

        也就是可以把静态方法直接像导包一样在Public class Test之前导入!例如: import static java.lang.Math.random;就直接将Math类中的random方法导入了!也可以使用通配符" * "把Math类下的所有静态方法都导入,如:import static java.lang.Math.*;导入成功之后再次调用Math下的random方法时就可以不用写类名调用了.


五.枚举

1.枚举的介绍

就是一个类只能存在几个固定的对象,那么这个就是枚举.我们就可以使用这些对象可以表示一些固定的值。举例: 一年只有4个季节等。案例演示如下:

//季节,自定义枚举
public class Season {
    String name;
    public static final Season spring = new Season("春天");
    public static final Season summer = new Season("夏天");
    public static final Season autumn = new Season("秋天");
    public static final Season winter = new Season("冬天");

    private Season(String name) {
        this.name = name;
    }
}



public class MyTest {
    public static void main(String[] args) {
        //调用枚举内容
        Season spring = Season.spring;
        Season summer = Season.summer;
        Season autumn = Season.autumn;
        Season winter = Season.winter;

        System.out.println(spring.name);
        System.out.println(summer.name);
        System.out.println(autumn.name);
        System.out.println(winter.name);

    }
}

枚举类也可以有抽象方法,但是枚举项必须重写该方法。

//季节,自定义枚举
public abstract class Season {
    String name;
    public static final Season spring = new Season("春天") {

        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };
    public static final Season summer = new Season("夏天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };
    public static final Season autumn = new Season("秋天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };
    public static final Season winter = new Season("冬天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };

    private Season(String name) {
        this.name = name;
    }

    //抽象方法
    public abstract void show(String name);
}



public class MyTest {
    public static void main(String[] args) {

        Season spring = Season.spring;
        Season summer = Season.summer;
        Season autumn = Season.autumn;
        Season winter = Season.winter;

        System.out.println(spring.name);
        System.out.println(summer.name);
        System.out.println(autumn.name);
        System.out.println(winter.name);
    }
}

        定义枚举类要用关键字enum,  所有枚举类都是Enum的子类,但是不要显式的写出来,  枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略,  建议不要省略。补:这个同第一个写枚举的意思是一样的,  这个更加方便!

//季节,自定义枚举 enum 这个关键字就是用来定义枚举的
public enum Season {
    //枚举项
    SPRING, SUMMER, AUTUMN, WINTER;
}



public class MyTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Season winter = Season.WINTER;
        System.out.println(spring);
        System.out.println(summer);
        System.out.println(autumn);
        System.out.println(winter);
    }
}

枚举类可以有构造器,但必须是private的,它默认的也是private的。

//季节,自定义枚举 enum 这个关键字就是用来定义枚举的
public enum Season {
    //枚举项
    SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天");
    String name;

    //构造器
    private Season(String name) {
        this.name = name;
    }
}



public class MyTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Season winter = Season.WINTER;
        System.out.println(spring);
        System.out.println(summer);
        System.out.println(autumn);
        System.out.println(winter);
    }
}

枚举项的用法比较特殊:     格式: 枚举(“  ”)  

//季节,自定义枚举 enum 这个关键字就是用来定义枚举的
//枚举类,本身就是抽象的,不需要加 abstract
public enum Season {
    //枚举项,    格式: 枚举(“  ”);
    SPRING("春天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    }, SUMMER("夏天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    }, AUTUMN("秋天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    }, WINTER("冬天") {
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };
    String name;

    private Season(String name) {
        this.name = name;
    }

    public abstract void show(String name);
}


public class MyTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Season winter = Season.WINTER;
        System.out.println(spring);
        System.out.println(summer);
        System.out.println(autumn);
        System.out.println(winter);

    }
}

枚举在switch语句中的使用。

//季节,自定义枚举 enum 这个关键字就是用来定义枚举的
public enum Season {
    //枚举项,一般大写,多个有逗号隔开,最后一个枚举项,后面没有代码分号可以省略不写,如果还有代码那分号得写上
    SPRING, SUMMER, AUTUMN, WINTER;
    //String name;
}



public class MyTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Season winter = Season.WINTER;
        System.out.println(spring);
        System.out.println(summer);
        System.out.println(autumn);
        System.out.println(winter);

        int ordinal = spring.ordinal();
        System.out.println(ordinal);

        System.out.println(spring.toString());
        System.out.println(spring.name());

        // byte short int 字符串,枚举
        switch (Season.SPRING) {
            case SPRING:
                System.out.println("春天");
                break;
            case SUMMER:
                System.out.println("夏天");
                break;
            case WINTER:
                System.out.println("冬天");
                break;
            case AUTUMN:
                System.out.println("秋天");
                break;
        }
    }
}

枚举的单例模式(只有一个枚举项)

//这个枚举类,只有一个枚举项,其实就是单例模式
public enum Student {
    ONE
}


public class MyTest {
    public static void main(String[] args) {
        Student one = Student.ONE;
        System.out.println(one);
        Student one2 = Student.ONE;
        System.out.println(one == one2);
}

总结:定义枚举类要用关键字enum,  枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是建议不要省略,   枚举类可以有构造器,但必须是private的。枚举项的用法比较特殊:枚举(“”);枚举类也可以有抽象方法,但是枚举项必须重写该方法。枚举在还可以在switch语句中使用!

2.枚举类的常见方法 

int ordinal()                                      // 返回枚举项的序号
int compareTo(E o)                         //比较两个枚举项的 返回的是两个枚举项序号的 差值
String name()                                  //获取枚举项的名称
String toString()                              //获取枚举项的名称
<T> T valueOf(Class<T> type,String name)         //用来获取指定的枚举项  参数1:枚举类对应的字节码对象 参数2 枚举项的名称
values()                                            //获取所有的枚举项,  此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便

public static void main(String[] args) {
	
	// 测试
	Direction front = Direction.FRONT ;
	Direction behind = Direction.BEHIND;
	Direction left = Direction.LEFT ;
	Direction right = Direction.RIGHT ;
	
	System.out.println(front.ordinal());
	System.out.println(behind.ordinal());
	System.out.println(left.ordinal());
	System.out.println(right.ordinal());
	
	System.out.println("----------------------------------");

	System.out.println(front.compareTo(right));
	
	System.out.println("----------------------------------");
	
	System.out.println(front.name());
	
	System.out.println("----------------------------------");
	
	System.out.println(front.toString());
	System.out.println(front);
	
	System.out.println("----------------------------------");
	
	// <T> T valueOf(Class<T> type,String name):	用来获取指定的枚举项
	// type: 表示的是对应的枚举的字节码文件对象
	// name: 就是枚举项的名称
	Direction direction = Direction.valueOf(Direction.class, "RIGHT") ;
	System.out.println(direction);
	
	System.out.println("----------------------------------");
	
	Direction[] directions = Direction.values() ;
	
	for(Direction d : directions){
		System.out.println(d);
	}

}

(小编也在努力学习更多哟!以后再慢慢挖掘,慢慢补充啦!)

希望对友友们有所帮助!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

naoguaziteng

谢谢友友的打赏!一起努力吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值