本博主是 JavaScript 出身的,使用的是弱类型语言;所以对于强类型语言,或者面向对象开发类型的语言,很多细节都不太习惯。本入门系列文章,都是为了加固 强类型语言/面向对象 的一下概念、关键字 和 方法等知识。
1、Java 的基本知识:
1 /// Java 的源代码的文件名 必须与公共类 的名字相同,并用 .java 作为扩展名 (大小写也要保持一致) 2 3 /// 命令行 编译 和 运行java 程序: 4 /// 编译:javac 源代码文件名(带扩展名 .java) -> 编译后的的文件为 源代码文件名.class 5 /// 运行:java 源代码的文件名(不带扩展名 .class) 6 /// javac 程序是一个 Java 编译器 7 /// java 程序启动 Java 虚拟机,虚拟机执行编译器放在 .class 文件中的字节码 8 9 /// main 入口,必须声明为 public (Ps: 虽然有些 Java 解析器 当 main 不是 public 也可以运行 但这点只需要知道就行了,我们通常都是必须要为 public 的)
2、基本类型:
1 /// Java 有 8 种基本类型(primitive type),其中有 4种整型、2种浮点型、1种用于表示 Unicode 的编码的字符单元的字符类型 char 和 一种表示真值的boolean 类型。
2 /// int、short、long、byte、float、double、char 和 boolean
(A)、整型(Java 中没有任何无符号(unsigned) 形式的 int、long、short 或者 byte 类型):
类型 | 存储需求 | 取值范围 | 使用场景 |
int | 4 字节 | -2 147 483 648 ~ 2 147 483 647(正好超过20亿) | 最常用 |
short | 2 字节 | -32 768 ~ 32 767 | 底层的文件处理或者需要控制占用存储空间量的大数组 |
long | 8 字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 | 星球上的居然人数 |
byte | 1 字节 | -128 ~ 127 | 底层的文件处理或者需要控制占用存储空间量的大数组 |
(B)、浮点型:
类型 | 存储需求 | 取值范围 | 特点 |
float | 4 字节 | 大约 ± 3.402 823 47E + 38F (有效位数为 6 ~ 7) | float 类型的数值后缀 F 或 f,没有后缀的默认是 double 类型 |
double | 8 字节 | 大约 ± 1.797 693 134 862 315 70E + 308(有效位数为 15位) | double 类型的后缀是 D 或者 d,没有后缀的默认是 double 类型 |
Ps:
1、所有的浮点数值计算都遵循 IEEE 754 规范。
2、常量 Double.POSITIVE_INFINITY(double 类型的正无穷大)、Double.NEGATIVE_INFINITY(double 类型的负无穷大)和 Double.NaN(Double 类型的 NaN)
3、检测一个特定值是不是 等于 Double.NaN 只能用 Double.isNaN(特定值) 这个方法。因为所有 “非数值” 的值都认为是不相同的。
4、Float 类型也有它自己的 正无穷大、负无穷大或者是 NaN, 把 Double 改成 Float 就行了
5、浮点类型的计算还是有误差的,在金融计算中,不能用 因为涉及金钱方面的,要求精确。后面会说的 金融计算中,使用的 BigDecimal 类
(C)、char 类型:
1、原本是表示单个字符的,但是现在有些 Unicdoe 字符可以用一个 char 值 描述,另一些 Unicode 字符则需要两个 char 值。
2、char 类型的字面量值要用 单引号括起来。
3、在 Java 的核心技术中,有大致说到 Unicode 和 char 类型,但是这部分需要理解完整的 编码 知识,博主知识库不充足,需要的请自己去详情了解一下。
(D)、boolean 类型:
1、boolean 类型的值,就只有 true Or false 两个值,用来判定逻辑条件。
2、与 JavaScript 中的不同,Java 中的 整型值 和 布尔值 之间 不能进行相互转换
3、变量:
1 /// 在 Java 中,每一个变量都有一个类型 (type)。在声明变量时,变量的类型位于变量名之前。 2 /// Java 中的变量名,必须是一个以字母开头 并 由 字母或 数字构成的序列 3 /// 与其他语言相比,Java 中的 “字母” 和 “数字” 的范围更加大,字母包括 'A' ~ 'Z'、'a' ~ 'z'、'_'、'$' 外,还可以使某种语言中表示字母的任何 Unicode 字符。比如希腊人可以用 π,德国人可以用 'ä'
Ps:
1、不能使用 Java 保留字 作为变量名
2、要知道哪些 Unicode 字符属于 Java 中的字母,可以使用 Character 类的 isJavaIdentifierStart 和 isJavaIdentifierPart 去检查
3、尽管 $ 是 一个合法的 Java 字符,但不要在自己的代码中使用这个字符,它只用在 Java 的编译器 或其他工具生成的名字中。
4、虽然可以一行声明多个变量,但不提倡使用这种风格,因为逐一声明每一个变量可以提高程序的可读性。
5、变量声明后,要初始化才能使用,否则会报 // ERROR--variable not initialized 错误
6、Java 中,提倡变量的声明,尽可能靠近变量第一次使用的地方,这是一种良好的编写风格。
4、常量:
A、在 Java 中,利用关键 final 指示常量,例如: final double CM_PER_INCH = 2.54;
B、关键字 final 表示这个变量只能被赋值一次,一旦赋值后,就不能够再更改了。
C、习惯上,常量名使用全大写。
D、在 Java 中,希望某个常量可以在一个类中的多个方法使用,通常将这些常量成为 类常量;使用关键字 static final 设置。
E、类常量 定义位于 方法的外部。
F、在 JavaScript 中 定义常量使用的是 const, 在 Java 中 const 是作为保留关键字,目前未被使用。
G、在运算时候,比如 cos ,sin, tan 等数学方法,都在 Math 类中。
H、Java 中提供了两个接近 π 和 e 的常量的近似值:Math.PI 和 Math.E
5、数值类型之间的转换:
A、实心箭头表示唔信息丢失的转换,虚箭头表示可能有精度损失的转换。
B、如果两个操作数有一个是 double 类型,另一个操作数会转换为 double 类型;
否则,如果其中一个操作数使 float 类型,另一个操作数将会转成 float 类型;
否则,如果其中一个操作数为 long 类型,另一个操作数将会转成 long 类型;
否则,两个数都会被转成为 int 类型
C、强制类型转换, 强制类型转换的语法格式是圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名,例如:
1 double x = 9.997;
2 int nx = (int) x;
D、如果强制转换的值,超过目标类型的范围,就会被截取成一个完全不同的值。比如 int 300 转换成 byte 类型 的实际值 为44。
6、枚举类型:
A、有时候变量的值只在一个有限的集合内,就要用到自定义枚举类型,例如:销售的服装尺寸只有 小、中、大和超大 这四种尺寸。
1 /// 这里定义枚举类型
2 enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
3 /// 上面定义完后,可以使用这种枚举类型
4 /// Size 类型的变量只能存储在这个类型声明中给定的某个枚举值
5 /// 或者 null 值,null 表示这个变量没有设置任何值
6 Size s = Size.MEDIUM;
7、字符串:
A、从概念上来说,Java 字符串 就是 Unicode 字符串序列。
B、Java 中没有内置的字符串类型,而是在 标准的Java 类库中提供了一个 预定义类,叫做 String.
C、每个用双引号括起来的字符串都是 String 类的一个实例。
D、Java 中的 String 是不可变字符串,没有提供修改的字符串的方法(说的应该就是没有 replace 方法了)
E、第四点的原因,是因为编译器可以让字符串共享。
F、检测字符串是否相等,表达式:
/// s 和 t 可以使字符串变量,也可以使字符串字面量。
/// equals 是区分大小写的
s.equals(t)
/// 不区分大小写可以使用 equalsIgnoreCase 方法
s.equalsIgnoreCase(t)
G、不能使用 == 运算符,判断连个字符串是否相等,这个运算符只能确定两个字符是否放在同一个位置上。例如:
String greeting = "Hello"; if (greeting == "Hello")... // probably true if (greeting.substring(0, 3) == "Hel")... // probably false
H、因为实际上,只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不共享。
I、空串 和 Null 串:
1 /// 空串是长度为 0 的字符串,可以使用下面的方法检查是否为空串:
2 if (str.length() == 0) ..
3 // 或者
4 if (str.equals(""))...
5 /// Null 串是一个特殊值,表示目前没有任何对象与该变量关联。
6 /// 检查字符串是否为 null 使用 ==
7 if (str == null)...
8 /// 检查字符串不是既不是空串,也不是 null 串时,要先判断 null 串,因为 null 上面是没有 length() 方法,会导致报错的