Java基础增强2-枚举,可变参数

本文详细探讨了Java中的可变参数及其用法,以及枚举的高级应用,包括如何创建复杂的枚举实例并封装更多信息。同时强调了枚举构造函数必须为私有以及枚举在switch语句中的使用。枚举在Java中默认继承自enum类,并且枚举类型常用于实现单态设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、可变参数:

测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。
可变参数实例:
public class Demo1 {
    public static void main(String[] args) {
        sum(1,2,3,4,5);
        Integer arr[] = {1,2,3,4,5,6};
        sum(arr);//如果一个方法接受可变参数,那向里面传数组也是可以的
    }

    public static void sum(Integer ... args){
        //可变参数在编程时当成数组即可
        int sum=0;
        for (int num:args){
            sum += num;
        }
        System.out.println(sum);
    }
}

传入基本类型数组,会把数组自身当成一个对象。因此,在JAVA编程中,用可变参数一定要传对象类型,通通用对象类型
                Integer arr2[] = {1,2,3,4,5};
		list = Arrays.asList(arr2);  //5
		System.out.println(list);
		
		//注意的问题
		int a[] = {1,2,3};
		list = Arrays.asList(a);  //1
		System.out.println(list);

可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数
//注意
	public static void sum2(Integer num,Integer ... args){
		//可变参数在编程时当成数组即可
		int sum = 0;
		for(int arg : args){
			sum += arg;
		}
		System.out.println(sum);
	}

2、枚举

在应用开发过程中,如果出现异常,一定要通知上一层程序:A、通过方法返回值    B、抛出异常        No sout!

枚举实例:
学生成绩分为:A,B,C,D,E五档,其他录入不成立。

public class Student {
    private String name;
    private Grade grade;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Grade getGrade() {
        return grade;
    }

    public void setGrade(Grade grade) {
        this.grade = grade;
    }
}

enum Grade{
    A,B,C,D,E;
}
A,B,C,D,E  为Grade类型的对象。

等效于:
class Grade{
	
	private Grade(){}
	public static Grade A = new Grade();
	public static Grade B = new Grade();
	public static Grade C = new Grade();
	public static Grade D = new Grade();
	public static Grade E = new Grade();
}


测试程序:
public class Test {


    public static void main(String[] args) {
        Student s = new Student();
        s.setGrade(Grade.A);
    }
}


复杂枚举实例:

1、枚举对象需要封装更多的信息。(如何让枚举对象拥有自己的属性)如:A(90-100)  B(80-89)

enum Grade{
    A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");

    private String value;
    private Grade(String value ){
        this.value=value;
    }

    public String getValue() {
        return value;
    }
}

System.out.println(Grade.B.getValue());
2、如何让枚举拥有自己的方法

enum Grade{
    A("100-90"){
        public String getLocalValue() {
            return "优";
        }
    }
    ,B("89-80"){
        public String getLocalValue() {
            return "良";
        }
    }
    ,C("79-70"){
        public String getLocalValue() {
            return "中";
        }
    }
    ,D("69-60"){
        public String getLocalValue() {
            return "及格";
        }
    }
    ,E("59-0"){
        public String getLocalValue() {
            return "差";
        }
    };

    private String value;
    private Grade(String value ){
        this.value=value;
    }

    public String getValue() {
        return value;
    }

    public abstract String getLocalValue();        //抽象函数不能有body
}
建立对象时就创建方法。

注意事项:

  1. 枚举的构造函数必须为私有的!!
  2. 类,对象,对象拥有什么东西。   先写对象。
  3. swith可以接收int,byte,char,short,enum。
  4. 枚举默认集成enum类。。。java class没有说明继承,默认继承Object。
  5. 单态设计模式,只有一个对象。如下:
enum Demo{
      demo;
}

枚举类的常用方法:
@org.junit.Test
    public void test1(){
        //枚举类的常用方法:name  valueOf  values
        String name="B";
        Grade g = Grade.valueOf(name);      //把字符串转换成枚举对象
        System.out.println(g.name());       //获取枚举对象名称

        //获得枚举类的所有对象
        Grade[] values = Grade.values();
        for (Grade i:values){
            System.out.println(i.name());
        }
    }








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值