实训--day01枚举,泛型

xiaoxiao2021-02-28  97

实训第一天记录:枚举,泛型。 暑假实训第一天:上午枚举,下午泛型。 1:枚举:实例对象固定而且有限的对象可以成为枚举类,用关键字enum。      今天一天课上下来,觉得枚举跟一般的类对象差不多,只是枚举对象的类型是enum类型,一般类对象的类型是class对象。所以在获取枚举对象的形势上有所不同。      class对象获得对象可以通过new的形势,而enum对象的获取有两个方法:第一个是 枚举.variable获取对象,这个方法返回的是单个枚举对象;第二个方法是 枚举.values。这         个方法可以获取所有的枚举对象,返回的是一个枚举类型的数组,如果要获得每个枚举对象,就使用高级for循环来获取。      获取到枚举对象之后,对对象的操作方式就和一般Java类差不多了。可以像一般的Java类一样,设置属性,进行数据的逻辑处理。只是在枚举类中不能有main方法。 放一个课堂上的联系:输入相应的数字,输出对应的星期数。这里我没有用switch case语句(jdk几以后可以使用String类型的变量,具体不清楚,百度答案感觉不准确),而是直接给每个星期一个id,如果输入的id和星期的id相同,则输出星期。 枚举类: [java]  view plain  copy  print ? public enum Enum2   {       MON(1,"星期一"),TUE(2,"星期二"),WENDS(3,"星期三"),THURS(4,"星期四"),FRI(5,"星期五"),SATU(6,"星期六"),SUN(7,"星期天");       private int id;       private String name;       public String getName() {           return name;       }       public void setName(String name) {           this.name = name;       }       private Enum2(int id,String name)       {           this.name=name;           this.id=id;       }       public int getId() {           return id;       }       public void setId(int id) {           this.id = id;       }          }   测试运行类: [java]  view plain  copy  print ? import java.util.Scanner;      public class Test2 {          public static void main(String[] args)        {           // TODO Auto-generated method stub           Enum2 [] e2=Enum2.values();           Scanner in=new Scanner(System.in);           int input=in.nextInt();           for(Enum2 e:e2)           {               int id=e.getId();               if(input==id)               {                   System.out.println(e.getName());               }           }       }      }   2:泛型:即参数化类型,是jdk1.5以后出现的新特性,增加了程序的安全性。 举个栗子:在没有使用泛型之前,集合可以存放各种类型的参数,加入一个集合存放了不同类型的参数,使用集合的时候要想不报错,只有靠程序员的直觉,因为这个错误在编译时是不会报错的,只会在运行时抛出运行时异常;ClassCastException等。但是加入泛型之后,就强制规定每个集合只能装那个类型的参数,就不会出现类型转换异常了。 泛型的定义一般有三种:定义在类上,定义在方法上,定义在接口上。 定义在类上,for example: 泛型类:在定义的类上限定了,类中的方法只能接受类上面定义类型的参数 [java]  view plain  copy  print ? public class Demo1 <T>   {       private T name;          public T getName() {           return name;       }       public void setName(T name) {           this.name = name;       }          }   测试类: [java]  view plain  copy  print ? public class Demo   {       public static void main(String[] args)        {                   Demo1<Integer> d=new Demo1<Integer>();           d.setName(1);           System.out.println(d.getName());           }   }   限定Integer之后,往里面设置值的时候,就只能放置integer类型的,如果不是integer类型的,在编写代码的时候就会直接报错 定义在方法上:借用上课的一道题,输入不同类型的数据,也能进行相加,但是输入的数据只能是 intlongfloatdouble类型。自己写的时候纠结很久没想出来,也是参考了网上一篇博客的。博客地址:http://blog.csdn.net/justdb/article/details/7470690。 补充一个基本数据类型转换的顺序:byte,short,char-->int-->long-->float-->double,即为了不损失精度,都是由小精度向大的精度进行转换。 [java]  view plain  copy  print ? public class Homework   {       public static void main(String[] args)       {           Scanner in=new Scanner(System.in);           int i1=in.nextInt();           int i2=in.nextInt();           System.out.println(add(i1,i2));                      long l1=in.nextLong();           long l2=in.nextLong();           System.out.println(add(l1, l2));                      float f1=in.nextFloat();           float f2=in.nextFloat();           System.out.println(add(f1, f2));                      double d1=in.nextDouble();           double d2=in.nextDouble();           System.out.println(add(d1, d2));          }       public static <T extends Number> double add(T input1,  T input2)       {           return input1.doubleValue()+input2.doubleValue();       }      }   其实我想写成,不论是输入什么类型的两个数,可以是不同类型的两个数,都可以进行相加,但是我找了一下scanner的方法,好像每个键盘录入都是带类型的,所以最后也没有写出来。如果两两结合输入再判断,感觉代码很烦,我又没想到优化的方式,就没有写。 最后一个,定义在接口上:定义在接口上的泛型一般都是API中定义的,这个只要看到的时候知道就好。
转载请注明原文地址: https://www.6miu.com/read-84898.html

最新回复(0)