目录
Java 9 REPL (JShell)
REPL(Read Eval Print Loop)意为交互式的编程环境。
JShell 是 Java 9 新增的一个交互式的编程环境工具。
Java 注释
Java 注释分三种:
- 单行注释:以
//
开头,之后的内容都会被注释掉// 这是一个单行注释
- 多行注释:以
/*
开头,以*/
结尾,之间的内容都会被注释掉/* 这是一个多行注释 这是一个多行注释 这是一个多行注释 */
- JavaDoc注释:文档注释,以
/**
开头,以*/
结尾,可以在之间写一些描述性的信息,帮助生成帮助文档/** * @author 作者 * @version 版本 * @since 最小 JDK 版本 * @param 方法形参描述 * @return 方法返回值描述 * @exception 对方法可能抛出的异常进行描述(推荐描述 Runtime 异常) * @throws 对方法可能抛出的异常进行描述(推荐描述 非Runtime 异常) * @deprecated 不建议使用该方法 */
一些有趣的代码注释可以搜索
有趣的代码注释
Java 是大小写敏感的
public class CaseSensitive {
public static void main(String[] args) {
System.out.println("Java 是大小写敏感的:");
String man = "Jack";
String Man = "John";
System.out.println("man: " + man);
System.out.println("Man: " + Man);
System.out.println("==================");
String woman = "Rose";
// String woman = "Mei";
System.out.println("woman: " + woman);
}
}
/* 输出如下:
Java 是大小写敏感的:
man: Jack
Man: John
==================
woman: Rose
*/
Java 数据类型
JDK 7 后,数字间可以用下划线 _
分隔
jshell> int num1 = 123_456;
num1 ==> 123456
jshell> long num2 = 123_3454355_345L;
num2 ==> 1233454355345
jshell> byte num3 = 1_20;
num3 ==> 120
jshell> float num4 = 123_63724_2.24F;
num4 ==> 1.2363724E8
jshell> double num5 = 12_34.45;
num5 ==> 1234.45
整数扩展
- 十进制表示: 正常表示
int num = 10; // num ==> 10
- 二进制表示: 二进制以
0b
开头,后面跟二进制数int num = 0b10; // num ==> 2
- 八进制表示: 八进制以
0
开头,后面跟八进制数int num = 010; // num ==> 8
- 十六进制表示: 十六进制以
0x
开头,后面跟十六进制数int num = 0x10; // num ==> 16
浮点数扩展
浮点数存在精度问题,最好尽量避免使用浮点数进行比较!
jshell> float num1 = 0.1F;
num1 ==> 0.1
jshell> double num2 = 1.0 / 10;
num2 ==> 0.1
jshell> num1 == num2
$21 ==> false
在涉及银行或其它对精度要求特别高的业务时,使用 BigDecimal(大数处理工具类) 进行处理。
数据类型转换
低 ---------------------------------------------- 高
byte, short, char -> int -> long -> float -> double 小数优先级 > 整数优先级
-
低级数据
⇒高级数据
==> 自动转换 -
高级数据
⇒低技数据
==> 强制转换(通过在变量前加(目的类型)
实现)public class TypeCast { public static void main(String[] args) { System.out.println("低 -> 高"); byte num1 = 120; int num2 = num1; System.out.println(num1); System.out.println(num2); System.out.println("高 -> 低"); long num3 = 233L; int num4 = (int) num3; // 强制转换 System.out.println(num3); System.out.println(num4); System.out.println("低 -> 高 & 整数 -> 浮点数"); long num5 = 12345678L; float num6 = num5; System.out.println(num5); System.out.println(num6); System.out.println("高 -> 低 & 浮点数 -> 整数"); float num7 = 1234.567F; long num8 = (long) num7; // 强制转换 System.out.println(num7); System.out.println(num8); } }
-
不能对
boolean
类型数据进行类型转换。
-
类型转换时可能会存在内存溢出或精度丢失等问题。
public class TypeCast { public static void main(String[] args) { System.out.println("高 -> 低 & 内存溢出"); int num9 = 128; System.out.println(num9); System.out.println((byte) num9); System.out.println("高 -> 低 & 精度问题"); System.out.println((int) 23.45); System.out.println((int) -23.4556F); } } /* 输出如下: 高 -> 低 & 内存溢出 128 -128 高 -> 低 & 精度问题 23 -23 */
-
char
类型和int
类型的互相赋值- 在
0 ~ 65535
范围内,char
和int
类型可以互相赋值 - 若显示定义
int
变量后,转换为char
需强制转换public class Char2Int { public static void main(String[] args) { char a1 = 'a'; int a2 = 'a'; System.out.println(a1); System.out.println(a2); int A1 = 65; char A2 = 65; System.out.println(A1); System.out.println(A2); char B1 = 'B'; int B2 = B1; System.out.println(B1); System.out.println(B2); int b1 = 98; char b2 = (char) b1; System.out.println(b1); System.out.println(b2); } } /* 输出如下: a 97 65 A B 66 98 b */
- 在
变量
变量三要素
- 变量类型
- 变量名
- 变量值
变量声明(并赋值)
变量类型 变量名 = 变量值;
- Java 中可以一行声明多个变量(但不推荐一行声明多个变量)
int a = 1, b = 2, c = 3; a ==> 1 b ==> 2 c ==> 3 int a, b, c; a ==> 0 b ==> 0 c ==> 0
按照作用域划分,Java 中有 3 种变量
- 类变量: 独立于方法之外的变量,用 static 修饰,再用 final 修饰的话就是常量 (修饰符间没有顺序,谁前谁后都可以)。
- 实例变量: 可以不初始化,实例创建时,会自动将实例变量初始化为所属类型的默认值(
数字 ⇒ 0
,boolean ⇒ false
,引用类型 ⇒ null
)。 - 局部变量: 使用前必须声明和初始化值。
public class Variable{
static final String ZHANG_SAN = "zhangsan";
static int allClicks = 0; // 类变量
String str = "Hello, World"; // 实例变量
public static void main(String[] args) {
int num = 0; // 局部变量
System.out.println(num);
System.out.println(ZHANG_SAN);
}
}
运算符
自动升型
在运算中,运算结果类型会自动升为混合运算中类型最高的类型!
jshell> Integer.MAX_VALUE
$1 ==> 2147483647
jshell> Integer.MAX_VALUE + 1
$2 ==> -2147483648
jshell> Integer.MAX_VALUE + 1L
$3 ==> 2147483648
jshell> 1 + 1.0
$4 ==> 2.0
instanceof
instanceof 用于判断一个对象是否属于指定的类型。
class Human {
}
class Man extends Human {
}
public class InstanceOf {
public static void main(String[] args) {
Human human = new Human();
Man man = new Man();
System.out.println(man instanceof Man);
System.out.println(man instanceof Human);
System.out.println(man instanceof Object);
System.out.println(human instanceof Object);
}
}
逻辑运算符 | 短路运算
短路运算:
false && [Any...] // 后面没有执行
true || [Any...] // 后面没有执行
public class ShortOutOperation {
public static void main(String[] args) {
int c = 5;
boolean n = (c < 4) && (c++ > 5); // c < 4 为 false, 如果执行了后面,c 必然变成 6
System.out.println(n);
System.out.println(c);
int d = 5;
boolean m = (d > 4) || (d-- == 4); // d > 4 为 true, 如果执行了后面,d 必然变成 4
System.out.println(m);
System.out.println(d);
}
}
/* 输出如下:
false
5
true
5
*/
位运算
&
: 与|
: 或~
: 非^
: 异或- ⇒ 相同为0,不同为1
- ⇒ 可以理解为
异
: 相异为1(true),不相异为0(false) - ⇒
二进制加法
: 0+0=0,0+1=1
<<
: 左移 ⇒ *2 ⇒2 << 2
⇒ 23 = 8>>
: 右移 ⇒ /2 ⇒8 >> 2
⇒ 3√8 = 2
字符串连接 +
只要 +
两边任一边有字符串,就会进行连接。
jshell> "" + 10 + 20
$1 ==> "1020"
jshell> 10 + "" + 20
$2 ==> "1020"
jshell> 10 + 20 + ""
$3 ==> "30"
运算符优先级
不要刻意记忆,不确定的用括号 ()
包起来