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/

(0)
彭晨涛彭晨涛管理者
上一篇 2019年11月25日 18:05
下一篇 2019年11月27日 18:05

相关推荐

  • Java中的四种内部类

    我发现最近真是越来越没有东西写了。。。不可能天天学习新知识啊,最近在复习阶段了,复习的东西大多数是博客里写过的/(ㄒoㄒ)/ 复习Java基础的时候认真看了一下Java的内部类,这…

    Java 2020年5月23日
    0100
  • 详解Java中的四种引用及其应用

    本文参考资源: 深入理解Java中的引用(一)——Reference - 简书 深入理解Java中的引用(二)——强软弱虚引用 - 简书 深入理解Java中的引用(三)——Dire…

    2020年2月14日
    0190
  • 深入理解java虚拟机第三版读书笔记06

    附: Java虚拟机规范-Class文件格式:JDK8 Java虚拟机规范-Class文件格式:JDK13 以下是第六章 类文件结构的内容 Class类文件的结构 Class文件是…

    Java 2020年1月18日
    0180
  • 深入理解java虚拟机第三版读书笔记03

    续深入理解java虚拟机第三版读书笔记02 HotSpot虚拟机对象探秘 对象的创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一…

    2020年1月6日
    0130
  • 网络编程之AIO

    AIO介绍 AIO是JDK1.7引入的,也称为NIO 2.0 NIO的同步非阻塞类似于轮询,让Selector去询问各个通道的状态。 而AIO则是通过Future实现真正的异步,让…

    Java 2020年2月8日
    0280
  • 深入理解java虚拟机第三版读书笔记01

    做笔记之前的感言 谈到《深入理解java虚拟机》,在业内可太有名了,是国内的一位大神写的一本关于java虚拟机的畅销书,基本上对java稍有深入的程序员都听说过这本书。不过遗憾的是…

    2020年1月4日
    0270
  • PriorityQueue源码分析

    总结 总结放前面防止太长不看: PriorityQueue是个最小堆,如果要改变排序顺序只能重写比较器传入构造方法。 内部元素要么实现Comparable接口,要么传入比较器进行比…

    Java 2020年2月10日
    0260
  • String s = new String("123");创建了几个String对象?

    提要 最近复习看到一道题目很有意思啊: String s = new String("123"); 问这样一行代码创建了几个String对象? 乍一看我其实以为和JDK的版本有关系…

    Java 2020年5月24日
    0580
  • 为什么说Java只有值传递?

    先说一下。。以后可能不会怎么写Java相关的博客了,因为找到了字节跳动的实习工作,用Go/Python开发后端,所以这几天在抓紧时间学Go,在学Go的时候,了解到Go语言只有值传递…

    Java 2020年6月26日
    03100
  • ArrayList源码分析

    总结 总结放前面防止太长不看: ArrayList内部是用数组实现的。 如果使用无参构造函数建立ArrayList,在添加第一个元素的时候会分配10个元素的空间。 ArrayLis…

    2019年11月22日
    0150

发表回复

登录后才能评论