用 + 拼接字符串时会创建一个新对象(存于堆中)并返回;
floor 求小于参数的最大整数,返回 double 类型,例如:Math.floor(-4.2) = -5.0;
ceil 求大于参数的最小整数,返回 double 类型,例如:Math.ceil(5.6) = 6.0;
round 对小数进行四舍五入后的结果,返回 int 类型,例如:Math.round(-4.6) = -5;在线程 A 中调用线程 B 的 join(),直到线程 B 执行完成之后,再执行线程 A;
在子类构造方法中使用 super() 时,必须放在第一行,否则编译不通过;
两个数值进行二元操作(包括 ==)时,会有如下的转换操作:
如果两个操作数其中有一个是 double 类型,另一个将会转换为 double 类型;
否则,如果其中一个操作数是 float 类型,另一个将会转换为 float 类型;
否则,如果其中一个操作数是 long 类型,另一个将会转换为 long 类型;
否则,两个操作数都转换为 int 类型;Thread 的 start() 能让线程进入可运行状态(Runnable),等待 CPU 的使用权(并不是立即进入运行状态);
基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,例如:
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
// 输出结果:true方法优先级:静态方法 / 代码块 > main 方法 > 非静态方法 / 代码块 > 构造方法
线程安全的集合:喂,SHE
喂:Vector(比 ArrayList 多了线程安全)
S:Stack
H:HashTable(比 HashMap 多了线程安全)
E:Enumeration接口中的属性默认为 public static final,方法默认为 public abstract;
子类重写的方法权限只能比父类高,抛出异常只能比父类小,例如:
父类方法权限为 default,子类可以为 protected;
父类抛出异常为 Exception,子类可以为 RuntimeException;重写:函数名称,参数列表,返回值都必须相同;
重载:函数名称相同,参数列表不同,返回值无所谓;构造方法不能被继承,只能被显式或隐式调用;
final 类型的变量一定要初始化,因为 final 类型的变量不可更改;
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,因此编译通过ArrayList list = new ArrayList(); // 默认创建大小为 10 的数组;
Java 构造方法规则:
定义:
当类没有定义构造方法时,虚拟机默认提供无参构造器;
一旦类定义了构造方法(无论是有参还是无参)时,虚拟机不提供无参构造器;
继承关系:
当子类没有通过 super 调用父类的构造方法时,默认调用父类的无参构造器(此时如果父类不存在无参构造器则编译失败);
当子类通过 super 调用父类的构造方法时,不调用父类的无参构造器;关于 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 操作在实际操作之前执行,因此可以看做是顺序操作,此处没问题;010 八进制 8;
0x8 十六进制 8;“<<”:左移运算符
“>>”:右移运算符
“>>>”:无符号右移,忽略符号位,空位都以 0 补齐(只对 32 位或 64 位的值有意义)
Java 碎碎记
最新推荐文章于 2022-09-03 22:53:50 发布