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

时间:2021-09-04 12:12:55

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());
}
}