DAY16Java语言入门基础教学10泛型 集合2 异常处理

泛型

定义

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

泛型方法

如何定义泛型方法

  1. 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
  2. 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
  3. 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  4. 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。
public class GenericMethodTest
{
   // 泛型方法 printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }
 
    public static void main( String args[] )
    {
        // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
        System.out.println( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组
        System.out.println( "\n双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组
        System.out.println( "\n字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
    } 
}

泛型类

和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

public class MyClass {
    public static void main(String[] args){
        GenericTest g1 = new GenericTest<>();
        g1.test("jack","jack");
}
//E或T都行
class GenericTest{
    int age;
    E a1;
    E a2;
    public void test(E a1,E a2){
        this.a1 = a1;
        this.a2 = a2;
        System.out.println(a1.equals(a2));
    }
}

集合(补充)

DAY16Java语言入门基础教学10泛型 集合2 异常处理_第1张图片
集合.jpg
  1. 集合里面对象不能重复 如果重复 只加一次
    内部使用HahMap来实现 键值对 键key不能重复
  2. 集合是无序的 添加的顺序和存储的顺序无关
    使用了默认排序

哈希算法

如何实现HashMap里面的key不相同

计算这个key对应的对象的Hash值
整数:在对象的地址的基础上按照一定的算法算出来的一个整数 如果两个对象相同 那么计算出来的Hash值就相同

HashSet

HashSet names = new HashSet<>();
        names.add("JACK");
        names.add("MERY");
        names.add("abc");
        names.removeIf(ele ->{
            return ele.compareTo("c") > 0;
        });
        //可以排序的集合
        TreeSet score = new TreeSet<>();
        score.add(32);
        score.add(2);
        score.add(3);
        score.add(1);
        System.out.println(score);

HashMap

HashMap 集合 存储数据的特点 键KEY值VALUE
key不能重复 可以是任意的对象类型 通常使用字符串String

        HashMap score = new HashMap<>();
        //添加对象
        score.put("Chinese",89);
        score.put("Math",94);
        score.put("English",92);
        //更改某个键对应的值
        score.put("Chinese",95);

        //获取键值对的个数
        score.size();
        //获取所有的key
        System.out.println(score.keySet());
        //获取所有的值
        System.out.println(score.values());
        //获取Entry:key - value
        System.out.println(score.entrySet());
        //获取一个键对应的值
        System.out.println(score.get("English"));

键值对的遍历

        //1.通过遍历key来得到每一个key对应的值
        for(String key:score.keySet()){
            int s = score.get(key);
            System.out.println("key:"+key+"value:"+s);
        }
        //2.通过EntrySet得到Entry对象的集合
        //一个Entry管理一个键值对getKey geyValue
        Set> entrys = score.entrySet();
        for(Map.Entry entry:entrys){
            //得到entry对应的key
            String key = (String)entry.getKey() ;
            //获取Entry对应的值
            Integer value = (Integer)entry.getValue();
            System.out.println("key:"+key+" value:"+value);
 }

异常处理

处理运行过程中出现的不可控的错误 使程序更健壮

Exception 类的层次

DAY16Java语言入门基础教学10泛型 集合2 异常处理_第2张图片
异常

捕获异常

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch代码块中的代码称为保护代码。

try{
      执行的代码
      可能出现异常
      一旦出现异常系统自动为我们创建一个异常对象 并抛出
  }catch(){
      如果需要自己处理异常就catch
  }catch(){
      如果有多个异常 可以用多个catch来捕获
     如果有多个异常 catch的顺序是由小到大
  }finally{
  不管有没有异常 finally都会被执行
      处理资源回收网络连接 数据库连接 I/O流
 }
  1. 如果异常出现 后面的代码将不会执行
  2. try代码块 不要抓太多代码

throws/throw 关键字

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。 一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
eg.

public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

体会

今天的内容较简单但有一些琐碎
感觉知识结构体系很混乱,可能需要整理一下

你可能感兴趣的:(DAY16Java语言入门基础教学10泛型 集合2 异常处理)