写在前面的话:
- 作者水平:二刷Java基础知识
- 参考资料:《Java核心技术 卷Ⅰ》- 第3章Java的基本程序设计结构
1.Java中的bug
oracle公司:bug 库
Bug Database (java.com)https://bugs.java.com/bugdatabase/index.jsp
比如main方法使用private修饰,就是一个bug (在jdk1.2之前允许该操作)
2.java中的注释
注释有3种:
- 单行注释 // /* */
- 多行注释 /* */
- 文档注释 /** */
/**
[这是文档注释,一般用来说明该类有什么作用、哪一个人所创、创作时间]
程序说明: 在控制台上输出Hello World
创作者 : 星与梦想star_dream
创作时间: 2022年5月28日 17:16
*/
class A {
//[这是单行注释]main()主方法
public static void main(String[] args){
/*
[这是多行注释,不可以嵌套]
输出Hello World
*/
//方法(函数)调用,使用“.”
System.out.println("Hello World");//换行,并带参数
System.out.print();//不换行,空参
}
}
2.java中的数据类型
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648 ~ 2 147 483 647(刚刚超过20亿) |
short | 2字节 | -32 768 ~ 32767 |
long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
byte | 1字节 | -128 ~ 127 |
float | 4字节 | 大约 ± 3.402 823 47E+38F(有效位数6~7位) |
double | 8字节 | 大约 ± 1.797 693 134 862 315 70E+308(有效位数15位) |
char | - | - |
boolean | 一位 | true 或者 fal |
2.1 浮点类型
采用十六进制表示浮点数:0x1.0p1
public class TestFloat { public static void main(String[] args) { double d1 = 0.125; //0.125 = 2^(-3) = 0x1.0p-3 double d2 = 0x10p1; System.out.println("d1 = " + d1); System.out.println("d2 = " + d2); double d3 = d2 + 0x1p1; System.out.println("d3 = " + d3); } }
深入剖析十六进制表示浮点数
在这里有一个表格,更好地记录下规律
十六进制表示 浮点数值 0x1p1 2.0 0x2p1 4.0 ... ... 0xap1 20.0 0xbp1 22.0 ... ... 0x10p1 32.0 根据表格,我们可以了解到尾数部分每一次加上0x1p1等价于加上2.0
public class TestFloat { public static void main(String[] args) { double d1 = 0x1p1; for (int i = 0;i < 100;i++) { System.out.println("d1 = " + d1); d1 += 0x1p1; } } }
有3个特殊的浮点数:
- 正无穷大,如:一个正整数除以0
- 负无穷大
- NaN,如:计算0/0 或者 负数的平方根
警告!浮点数值不适用于舍入误差的金融计算(如:2.0-0.1 = 0.899999)
对于上述情况,应该采用BigDecimal类