• Java 的 String 不是包装类,但是引用类型;Java 的浮点数字面量默认是 double,所以直接赋值给 float 需要强制类型转换

  • 整形的表示结构,以 byte 为例

    • 对于有符号而言,使用最高位表示正负,0为正数,1为负数;这样一来还剩下低7位,最大可以表示 2 ^ 7 - 1 = 127,这样表示的范围就是 [-127, 127];除此之外还有两个没考虑的 0000000010000000,按照这种方法表示就是0和-0,但实际上后者没有意义,所以规定后者表示的是 -128;因此byte能够表示的范围就是 [-128, 127]

    • 对于无符号的而言,表示方法相同,不过没有符号位的作用了

  • >>>= 表示无符号右移,无论被操作数正负都补0;对应有符号右移,补的是原符号位

  • 在Java中,局部变量必须先初始化后访问,否则编译报错;静态变量在类加载的时候就初始化了,标准方法是通过类型去访问,但是通过实例化对象访问也不会报错,同时由于和局部变量的加载、销毁时间冲突,静态变量在Java中不能作为局部变量定义;

  • Java 的 this 关键字,有三种使用方法

    1. this.variable,访问成员变量

    2. this.func(),调用成员函数

    3. this(),在构造方法中调用与参数匹配的自己的其他的构造方法

  • 代码块的执行顺序

    • 静态代码块,形式为 static{ sentences; },执行实际是在类加载的时候,只执行一次,在后续 new 所在类的时候不再执行

    • 实例代码块,形式为 {sentences; },执行时机是在每次 new 的时候,可以存放各种构造方法中共用的构造语句,使代码更加简洁

    • 调用对应的构造方法

  • 继承体系中父类子类实例、构造的执行顺序(这里的子类就是我们 new 的子类的对象)

    1. 首先执行父类的静态变量赋值、静态代码块,然后是子类的静态变量赋值、静态代码块

    2. 接下来执行父类的实例的构造、父类的构造方法,然后是子类的实例的构造、子类的构造方法

  • super 关键字

    1. 三种用法

      • super(),执行父类的构造方法,传入的参数会传给父类的相应的构造方法

      • super.data,访问父类的属性

      • super.func(),访问父类的方法

    2. super 的意义:super 用来不受子类重写、隐藏的影响访问父类的方法、属性

    super() 调用父类的构造,显式调用的话必须放在构造方法第一行,如果不显式调用则默认隐式调用;和 this 一样,不能在静态方法中使用,this是因为静态方法、属性属于这个类而不是某个类实例,super 也是因为静态方法属于类,不属于某个对象,super 无法找到相应的父类实例

  • 关于访问限定符:Java 的访问限定符,是在访问位置(where)上对访问做出限定,不要理解成那种类型的对象可以访问(who或者what)

  • 关于 String

    • String 本身不存储字符串,类似与 C++ 的 string_view,存放的是在常量池中存储的字符串的地址,即 String 是引用类型。

    • String str = "abc" + "def";,在编译时,会被直接编译为 String str = "abcdef";

    • 当String 对象调用 += 时,会创建新的 StringBuilder 对象,然后调用 append,随后返回 toString(),得到新的 String 对象。总的来说,频繁调用 String 的 += 接口,效率低下,会频繁创建 StiringBuilder,废弃的 String 对象和老旧的字符数组交给 GC 处理

    • 拼接字符串,可以使用 StringBuilder 的 append 接口,内部存放的数组是可变的(String 中的是 final 修饰的),因此不需要频繁开辟新数组、回收旧数组

  • 关于 Java 的异常体系

    • Java 的异常体系分为两类,即继承了 Throwable 的 Error 和 Exception,其中 Exception 又被 RuntimeException 和 IOException 所继承

    • 运行时异常,如数组越界、空指针访问,对于是否捕获没有要求;受检异常,比如 IOException,必须捕获,可以通过 try-catch 在自己的方法体中处理,也可以往上传,在方法声明中使用 throws 关键字,交给调用方捕获处理

    • Error,大多是与 JVM 虚拟机相关的严重错误,不需要也不建议捕获

    • 一个 try-catch 结构中,可以有多个 catch 语句,但是只会执行其中一个

    • 在异常处理中,关闭数据库、释放资源、关闭文件应该在 finally 中执行

更多推荐