美文网首页
DAY16Java语言入门基础教学10泛型 集合2 异常处理

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

作者: 辞cccc | 来源:发表于2019-08-17 23:58 被阅读0次

    泛型

    定义

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

    泛型方法

    如何定义泛型方法

    1. 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的<E>)。
    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<String> g1 = new GenericTest<>();
            g1.test("jack","jack");
    }
    //E或T都行
    class GenericTest<E>{
        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));
        }
    }
    

    集合(补充)

    集合.jpg
    1. 集合里面对象不能重复 如果重复 只加一次
      内部使用HahMap来实现 键值对 键key不能重复
    2. 集合是无序的 添加的顺序和存储的顺序无关
      使用了默认排序

    哈希算法

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

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

    HashSet

    HashSet<String> names = new HashSet<>();
            names.add("JACK");
            names.add("MERY");
            names.add("abc");
            names.removeIf(ele ->{
                return ele.compareTo("c") > 0;
            });
            //可以排序的集合
            TreeSet<Integer> 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<String,Integer> 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<Map.Entry<String,Integer>> 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 类的层次

    异常

    捕获异常

    使用 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 异常处理

          本文链接:https://www.haomeiwen.com/subject/nelksctx.html