• java 重新学习 (六)


    一、java7以后,使用带泛型的接口,类定义变量,那么调用构造器创建对象时构造器的后面不必带上泛型。List<String> list = new ArrayList()<>;菱形语法

      java9甚至允许创建匿名内部类时使用菱形语法 A<String> a = new A<>{   }

    二、当创建了带泛型声明的接口或父类后,子类或者实现类继承实现父类接口时,父类与接口不可以在包含泛型形参。 如 A extends B<T> 写T 不允许,指明实际参数

    如 A extends B<String> 或 A extends B 也可以。调用方法时形参必须添加具体形参。

    三、类型通配符  List<?>,Set<?>,Map<?,?> 这种写法支持任何支持泛型声明的接口和类。    但是不能向其中添加对象(除了null)。因为无法确定集合中元素的类型。

      设定类型通配符上限 List< 子类 extends 父类>   但是不能向其中添加对象。因为无法确定集合中元素的类型。Bar是Foo的子类,A<Bar> 相当于 A<? extend Foo>的子类,可已经A<Bar> 赋值给 A<? extends Foo>类型的变量,这种型变方式称为协变。

      List<? extends Foo> list= new ArrayList<>();
    
      List<Bar> barList= new ArrayList<>();
    
      list= barList; //  

      设定类型通配符下限 List< ? super 子类>  ,Foo是Bar的子类,A<Bar>  A<Object> 赋值给 A<? super Foo>,这种型变称之为逆变。能往集合中添加Foo 或者Foo子类的对象。不能添加E的任何父类对象,读取时的对象为Object 类型。。

    List<? super Foo> list= new ArrayList<>();
    
    List<Bar> barList= new ArrayList<>();
    
    list= barList; //  逆变

    四、泛型方法 语法      修饰符 <T,S  多个逗号隔开> 返回值类型 方法名(形参列表){   //方法体}

    五、java7 捕获多种类型的异常是,多种异常类型之间要用  |   隔开。 异常变量有隐式final修饰不能 对 变量二次赋值

    try{
            
    }catch( A  |  B | C 变量){
       // ABC 代表不同的异常类    
      变量 = new Exception("exception"); 错误 变量是隐式final修饰。
    }

    六、异常对象的几个重要方法

      getMessage()  : 返回该异常的详细描述字符串

      printStackTrace() : 该异常的跟踪栈信息输出到标准错误输出。

      printStackTrace(PrintStream s)  将该异常的跟踪栈信息输出到指定输出流

      getStackTrace() 返回该异常的跟踪栈信息。

    七、垃圾回收不会回收任何物理资源,如数据库连接,网络连接,磁盘文件等。这些物理资源必须进行显式回收。

    八、java9 会在try语句块中自动关闭资源。相当于包含了隐式的finanlly块(这个finally块用于关闭资源),因此这个try语句可以没有catch或者finally

    创建对象 A ,B  
    try( A,B){
    
    }
    
    或者
    
    try(创建对象 A ;B  ){
    
    }

    九、check异常   要么显式声明抛出,要么显式捕获并处理。 uncheck异常 runtimeException ,error.

    十、使用throws 声明抛出异常。 在方法上使用 ,void method () throws exception 1,exception2(){}

    十一、throw new Exception("exception"); 

    十二、声明自定义异常都应该继承Exception基类,如果希望定义Runtime异常,要继承RuntimeException基类。定义自定义异常时通常要提供两个构造器

       一个是无参构造器;另一个是带一个字符串参数的构造器(也就是异常对象的getMessag()方法的返回值)。  

    十三、避免把java的异常跟踪栈打印出来。要编写代码处理。

  • 相关阅读:
    MySQL优化
    MySQL 的 SQL 操作
    笔记本电脑同时使用两个网络
    top
    logrotate
    正则表达式学习总结
    HttpClient parameter 和body 传输同时进行
    Node.js背景
    前后端分离的理解
    shiro 的subject 以及Context 对象的具体的含义。
  • 原文地址:https://www.cnblogs.com/wenbuzhu/p/10008124.html
Copyright © 2020-2023  润新知