Java Basic Notes
CLI Tools
编译
javac name.java
运行
java name(无后缀类名)
反汇编
javap –c name(无后缀类名)
打包
jar {c t x u f} [v m e 0 M i][-c 目录] 文件名
解释:
- c:创建 jar 包
- t:显示 jar 包内容
- x:解压 jar 包
- u:添加文件到 jar 包
- f:命名 jar 包
- v:显示详细执行过程报告
- m:指定 manifest.mf 文件(对 jar 包做相关设置)
- 0:打包 jar 包是不压缩
- M:不产生 manifest.mf 文件,覆盖 m 参数的设置
- i:创建 索引文件
- C:进入某目录后再执行 jar 命令
- 生成 API 文档:java doc –d [ ] 类名/包名
可选参数:
- -author/-version:文档中显示作者和版本信息(默认不显示)
- -link superlink 标准类名:为标准类添加超链接
- -linksourse:方法/类名转化为超链接,指向生成的 html 格式的源文件
Gradle Tool
sudo apt install gradle
gradle help
gradle tasks
gradle assemble
gradle build
gradle clean
gradle test
gradle jar
gradle javadoc
Build Gradle
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'com.sabertazimi.tao.Tao'
}
}
基本结构
数据类型
整型
类型
- byte 型:1 字节 -128~127
- short 型:2 字节 -2^15~2^15 -1
- int 型:4 字节 -2^31~2^31 -1(20 亿)
- long 型:8 字节 -2^63~2^63 -1
前/后缀
- 二进制前缀 0b/0B
- 八进制前缀 0
- 十六进制前缀 0x/0X
- 长整型后缀 l/L
浮点型
float 型
后缀 F:4 字节 -3403E383.403E38(有效位数 67 位)
float f = 1.2; //ERROR
float f = 1.2F; //OK
double 型
后缀 D(默认型):8 字节 -1798E308~1.798E308(有效位数 15 位)
科学计数法:指数均为十进制,符号为 e(尾数为十进制)/p(尾数为十六进制)
Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY,Double.isNaN(检数)
千分位下划线分隔法 e.g 123_456.789_000
字符型
-
1 个 char 型占 2 个字节(Unicode 编码)
-
’ ’(定界符)内可用八/十六进制转义字符表示字符
-
八:\xxx
-
十六:\uxxxx(\u 转义序列可出现在任何地方) e.g ‘\u0061’
改进的 Unicode 字符集:
- 代码点(前缀 U+) 分为 17 个代码级别(code plane)
- 第一个级别为经典 Unicode 代码,
- 其余附加级别 U+10000 至 U+10FFFF。
布尔型
只允许赋值为 true、false(不可取 0 或非 0 值),不可与整型相互转换
引用类型
数组(Array)
字符串 String:不可变性(需要修改变量名所引用值,必须重新创建一个 String 对象例)
旧的对象实例若被判定为垃圾便会被系统自动回收
类(Class)
接口(Interface)
常量
定义(随使用随定义)
运算符
短路与、短路或
- &&:第一个操作数为假不再向后运算
- ||:第一个操作数为真不再向后运算
移位符
有符号右移>>:最高位补符号位 左操作数 int/long,右操作数 mod32/mod64
e.g int a >> 33 即 int a >> 1
无符号右移>>>:最高位补 0
字符串连接运算符
+
: 左右操作数 String 字符串/其他类型(自动被转化为 String)
判断运算符
==
:
- 基本类型值相等,引用类型引用相等
- 基本类型:转换后比较;boolean 型不与 int 型比较
- 引用类型:指向两个不同对象实例的变量不相等;若判断两个对象实例内容是否相等,必须调用 equals()方法
强制类型转换运算符
()
- 只能在继承层次内进行强制类型转换(同一家族)
- 将父类转换为子类前,应使用 instanceof 运算符进行检查
字符串
子串
stringTest.substring(a, b)方法返回长度为 b-a 的子串,a(包括)、b(不包括)为起止位置
相等
- 内容相等:stringOne.equals(stringTwo)方法返回值 true/false
- 不区分大小写 equalsIgnoreCase
常用方法
构建字符串
StringBuilder 类:单线程,功能同 StringBuffer 类(多线程)
输入输出
Scanner 类
监视器,功能最强大的输入类,new Scanner(System.in)
格式化输出方法
System.out.printf(): 静态创建格式化字符串
文件的输入与输出
输入(至内存)
用 File 对象构造一个 Scanner 对象:new Scanner(Paths.get(“FileName”))(反斜杠需双写)
输出(至文件)
用文件名构造一个 PrintWriter 对象:
new PrintWriter(“FileName”)
, 之后调用System.PrintWriter.print
方法.
表达式
- 整数提升:算术运算前 byte,short,char 提升为 int
- 没有”,”运算符和表达式语句
控制流程
合法语句:赋值语句和方法调用语句
块作用域
- 不允许内层块与外层块变量同名(无 C 语言中的可见性)
- 块内声明变量不允许在块外使用:if 块、for 块、while 块、普通 block
switch 语句
case 标签变量类型:字符型(包装类)、三整型(包装类)、枚举常量、字符串类
loop 语句
循环五要素
- 初始化部分(init_statement);
- 循环条件部分(test_explanation);
- 循环体部分(body_statement);
- 迭代部分(alter_statement):自加/自减运算符改变条件变量
- 结束后处理
for each 循环
//只读遍历;变量age只作用于for循环体
for (int age : arrayName) {}
Break and Continue Statement
Break Statement
label:
{
break label;
} //可跳出任意语句块:跳至标签块末尾
Continue Statement
label:
{
continue label;
} //跳至循环块首部
大数值
- java.math.BigInteger
- java.math.BigDecimal
数组
定义与引用
- 类型(包括类/对象) +
[]
+ 标识符. - 类型(包括类/对象) + 标识符 +
[]
. int a[N]
非法 数组是引用类型.- 不可对数组名进行自增操作(尽管
[]
与*
具有类似作用).
初始化
- 默认初始化数值类型为
0
/false
, 引用类型为null
. - 使用
new
分配内存单元.
两种不同初始化方式:
- 声明时:
MyDate[] dates = {new MyDate(),……};
- 赋值时:
MyDate[] dates = new MyDate[] (匿名数组){new MyDate(),…..};
方法
- 属性:arrayName.length
- 打印:arrays.toString 方法
- 复制:arrayName.Copy( source, 0, destination, 0, source.length);
Arrays.copyOf(ArrayName, Array.length); //可用来增长数组长度
- 比较:Arrays.equals(type[] a,type[] b);
命令行参数
字符串数组 String[] args, args 数组不包括程序名.
排序
Arrays.sort(ArrayName)快速排序方法
多维数组
- 多维数组的声明和初始化应按从高维到低维的顺序进行:
- 声明与初始化:
int[][] t = new int[3][];
. - 子数组交换:
temp = a[i];a[i]=a[i+1];a[i+1]=temp;
.
- 声明与初始化:
- 子数组长度可不一致: 可先构造一维长度, 再使用循环构造子数组各自长度.