Java 碎碎记

  1. 用 + 拼接字符串时会创建一个新对象(存于堆中)并返回;

  2. floor 求小于参数的最大整数,返回 double 类型,例如:Math.floor(-4.2) = -5.0;
    ceil 求大于参数的最小整数,返回 double 类型,例如:Math.ceil(5.6) = 6.0;
    round 对小数进行四舍五入后的结果,返回 int 类型,例如:Math.round(-4.6) = -5;

  3. 在线程 A 中调用线程 B 的 join(),直到线程 B 执行完成之后,再执行线程 A;

  4. 在子类构造方法中使用 super() 时,必须放在第一行,否则编译不通过;

  5. 两个数值进行二元操作(包括 ==)时,会有如下的转换操作:
    如果两个操作数其中有一个是 double 类型,另一个将会转换为 double 类型;
    否则,如果其中一个操作数是 float 类型,另一个将会转换为 float 类型;
    否则,如果其中一个操作数是 long 类型,另一个将会转换为 long 类型;
    否则,两个操作数都转换为 int 类型;

  6. Thread 的 start() 能让线程进入可运行状态(Runnable),等待 CPU 的使用权(并不是立即进入运行状态);

  7. 基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,例如:
    int i=0;
    Integer j = new Integer(0);
    System.out.println(i==j);
    // 输出结果:true

  8. 方法优先级:静态方法 / 代码块 > main 方法 > 非静态方法 / 代码块 > 构造方法

  9. 线程安全的集合:喂,SHE
    喂:Vector(比 ArrayList 多了线程安全)
    S:Stack
    H:HashTable(比 HashMap 多了线程安全)
    E:Enumeration

  10. 接口中的属性默认为 public static final,方法默认为 public abstract;

  11. 子类重写的方法权限只能比父类高,抛出异常只能比父类小,例如:
    父类方法权限为 default,子类可以为 protected;
    父类抛出异常为 Exception,子类可以为 RuntimeException;

  12. 重写:函数名称,参数列表,返回值都必须相同;
    重载:函数名称相同,参数列表不同,返回值无所谓;

  13. 构造方法不能被继承,只能被显式或隐式调用;

  14. final 类型的变量一定要初始化,因为 final 类型的变量不可更改;

  15. Java 中的 byte,short,char 计算时都会提升为 int 类型;
    例子1:
    byte b1 = 1, b2 = 2, b3;
    b3 = b1 + b2;
    // b1 + b2 结果为 int 类型,因此编译不通过
    例子2:
    byte b3;
    final byte b1 = 1, b2 = 2;
    b3 = b1 + b2;
    // 由于 b1 和 b2 是 final 类型,在编译时已经变成 b3 = 3,因此编译通过

  16. ArrayList list = new ArrayList(); // 默认创建大小为 10 的数组;

  17. Java 构造方法规则:
    定义:
    当类没有定义构造方法时,虚拟机默认提供无参构造器;
    一旦类定义了构造方法(无论是有参还是无参)时,虚拟机不提供无参构造器;
    继承关系:
    当子类没有通过 super 调用父类的构造方法时,默认调用父类的无参构造器(此时如果父类不存在无参构造器则编译失败);
    当子类通过 super 调用父类的构造方法时,不调用父类的无参构造器;

  18. 关于 i++:
    当执行 i++ 操作时,JVM 首先会将栈中的 i 复制到局部变量表中,在表中进行自增,当 i 在语句中的操作执行完毕后,JVM 将表中 i 的值覆盖原来栈中 i 的值。看下面的例子:
    例子1:
    i = 5;
    i = i++;
    System.out.println(i);
    // 以上代码输出 5,分析:自增操作后,局部变量表中 i 的值为 6,但此时执行 i = i 操作时,由于 i 发生变化,会覆盖局部变量表中 i 的值,所以此时 i 的值由 6 变成 5,因此最后栈中的值也变成 5;
    例子2:
    i = 5;
    i = ++i;
    System.out.println(i);
    // 以上代码输出 6,分析:由于 ++i 操作在实际操作之前执行,因此可以看做是顺序操作,此处没问题;

  19. 010 八进制 8;
    0x8 十六进制 8;

  20. “<<”:左移运算符
    “>>”:右移运算符
    “>>>”:无符号右移,忽略符号位,空位都以 0 补齐(只对 32 位或 64 位的值有意义)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值