Java基础查缺补漏01

某些点会在不远的将来深挖。

  1. >>是逻辑右移,>>>是算术右移
  2. JDK6 可以使用Console.readPassword从控制台中读取密码,用户输入的过程中密码是不可见的。

    public static void main(String[] args) {
       Console cs = System.console();
       String username = cs.readLine("User name: ");
       char[] passwd = cs.readPassword("Password: ");
    }
    
  3. printf格式化输出中的%s转换符能格式化任意的对象,对于实现了Formattable接口的对象将调用formatTo方法,否则将调用ToString方法。
  4. Java的文件读取:通过File构造一个Scanner对象;写入文件:构造一个PrintWriter对象

    Scanner in = new Scanner(Paths.get("myfile.txt","UTF-8");
    
    PrintWriter out = new PrintWriter("myfile.txt","UTF-8");
    
  5. Math中的BigIntegerBigDecimal可以满足高精度的运算需要。
  6. 匿名数组的写法:new int[]{17,19,23,29,31,37}

  7. finalize方法:相当于析构方法,在垃圾回收器清除对象之前调用。但不推荐使用这个方法,因为很难确定这个方法在什么时候才能被调用。

  8. import static是静态导入,可以导入某个类中的静态方法和静态字段。

  9. 可变参数列表:function(Object... values),在函数内部可以把values看成一个参数数组。

  10. java8方法引用:

    • 对象的方法引用 object::instanceMethod
    • 类的静态方法引用 Class::staticMethod
    • 任意类的任意对象的方法引用:Class::instanceMethod,它只能被该类的实例对象调用。
    • 类的构造器调用 Class::new
  11. 内部类
    为什么要使用内部类
    • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。
    • 内部类可以对同一个包种的其他类隐藏起来。
    • 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

    内部类类型

    • 普通内部类
    • 局部内部类(在方法中定义的内部类,不能有访问修饰符,不能是static)
      局部内部类可以访问当前代码块的常量,和此外围类的所有成员。
    • 静态内部类(声明为static,不依赖于外部类的对象存在,实际上成为了一个顶级类)
    • 匿名内部类(立刻使用,代码短小,只用到一个实例)
      语法:new SuperType(construction parameter){inner class methods and data}

    内部类底层实现(普通内部类):

    1. 编译器自动为内部类添加一个成员变量,该成员变量的类型和外部类的类型相同,这个成员变量就是指向外部类对象引用。
    2. 编译器自动为内部类的构造方法添加一个参数,参数的类型是外部类的类型,在构造方法内部使用这个参数为1中添加的成员变量赋值。
    3. 在调用内部类的构造函数初始化内部类对象时,会默认传入外部类的引用。
  12. Java动态代理:https://www.jianshu.com/p/95970b089360
  13. Throwable分层:

    img
    Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
    Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常(非受查异常在运行之前不会知道有错误),所有其他的异常称为受查异常(受查异常在编译之前就能知道,必须用try/catch捕获)。
  14. 断言:

    • assert 条件;
    • assert 条件:表达式;
      如果结果是false,抛出一个AssertionError异常,第二种形式使用表达式构造AssertionError,转换成消息字符串。
  15. 可以在普通类里面定义泛型方法:T function(T... param)
    代表T是BoundingType的子类。代表T是BoundingType的超类。
    BoundingType可以是用”&”分隔的多个类
    java泛型-类型擦除:https://www.cnblogs.com/joeblackzqq/p/10813143.html

  16. java关键字volatile:确保本条指令不会因编译器的优化而省略,且要求每次直接读值

  17. java关键字transient: 标记的成员变量不参与序列化过程

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/java%e5%9f%ba%e7%a1%80%e6%9f%a5%e7%bc%ba%e8%a1%a5%e6%bc%8f01/