*编译器将.java编译成字节码.class
*Double.POSITIVE_INFINITY
修饰符
final 变量名大写
public static final double CM_PER = 2.5; // 定义在main外
Math.pow(a, b) 幂运算
Math.round() 返回long
位运算:&, | , ^(xor), ~ 很重要,应用多 << , >> 注意符号位
P41:类型转换
三元操作符 ?:
&& || 短路设计
枚举类型:enum Size {SMALL, LARGE};
s.substring(start, end);
String.join(",", …); // ,拼接所有s
s1.equals(s2); // ==判断的是位置,不是字符串内容
码点和代码单元,有的符号虽然是一个码点,但需要两个代码单元来表示,所以遍历特殊string尽量不要使用s.charAt(i),使用s.codePoints().toArray()转为数组遍历(codePoints方法将其作为流返回)
P50 API
字符串构建器 StringBuilder API: P55
import java.util.*; Scanner in = new Scanner(System.in); String s = in.nextLine(); // .next 读取单词(空格分隔) .nextInt
Scanner in = new Scanner(Paths.get("f.txt"), "UTF-8"); // 读取 PrintWriter out = new PrintWriter("f.txt", "UTF-8"); // 创建
switch
jump: while () { while () { break jump; } }
带标签的continue
匿名数组及其传递
main接收命令行参数 String[] args
Array[API]: P84 toString, copyOf, copyOfRange, sort, binarySearch, fill, equals
多维数组快速打印:System.out.println(Arrays.deepToString(a));
类的关系:uses-a, has-a, is-a
类方法:构造器,更改器,访问器
.java源文件中只能有一个public类,且文件名类名一样(若有构造器,也一样)。可有多个非公有类,编译后产生所有.class类文件。
类的实例域尽量标为private,用this.引用
封装:实例域为可变对象的引用时,访问器不可直接返回,return (Data) hireDay.clone();
类方法可以访问所属类的任意对象的私有域
java是按值调用 call by value,即得到参数的拷贝,无法修改,但在对象引用时可以修改对象,对于基本数据类型,则完全不能修改。
javac com/horstmann/corejava/Employee.java // 编译器 java com.horstmann.corejava.Employee // 解释器加载
由源文件生成HTML文档
import .. /** * A {@code Card} object represents a card, bala... */ public class Card { ... /** * 方法注释:描述 * @param ... * @return ... * @throws ...可能抛出的异常 */ public double raiseSalary() { ... } ... }
此外还有
包注释:在包目录中添加单独文件:package.html or package-info.java
public class Manager extends Employee
public abstract class Person { public abstract String getDescription(); }
拓展抽象类时,如果方法不全是抽象方法,就要将子类定义为抽象类。
抽象类不能被实例化,即不能创建类的对象,但可以定义抽象类对象变量引用非抽象子类对象
var people = new Person[2]; // Person[] people = ... people[0] = new Employee(args); people[0].getDescription(); // Person类中未定义,但是引用的Employee类中定义了该方法
只有基本类型(primitive types, 如int. String boolean)不是对象,Object变量可以引用所有类型对象。
public int hashCode() { return Objects.hash(name, salary, hireDay); }
采用类型参数(type parameter)的泛型类(generic class)。
ArrayList<Employee> staff = new ArrayList<>(); staff.ensureCapacity(100); // 若评估出可能大小,或 ArrayList<Employee> staff = new ArrayList<>(100); // 两种方式初始化后并不包含任何元素 staff.size(); // 实际大小 staff.add(new Employee(...)); // 添加元素 staff.add(n, e); // 特定位置添加元素 staff.trimToSize(); // 调整大小 staff.set(i, harry); // i 必须先有元素 Employee e = staff.remove(n); // 获取元素同时删除元素 Employee e = (Employee) staff.get(i); // 访问元素需要进行数据转换 Employee[] a = new Employee[staff.size()]; list.toArray(a); // 或者转为数组a访问 for (Employee e: staff) // 遍历访问元素 pass
和没有使用类型参数的遗留代码进行交互,如果数组列表变量接收返回的ArrayList型,进行类型转换依然会受到警告,当确保转换的类型可行后,可进行标注:
@SuppressWarnings("unchecked") ArrayList<Employee> result = (ArrayList<Employee>) employeeDB.find(query);
基本类型转换为类:Integer, Long, Float…,Character, Void, Boolean
如ArrayList 类型参数不能为基本类型,可以采用包装器
特性:1.值不可变;2.final类,不可定义子类;3.比较值用equals
int x = Integer.parseInt(s);
API:
int intValue() String toString(int i) int parseInt(String s) Integer valueOf(String s) // 以上三个可指定进制
printf(String fmt, Object... args) // Object... 等同 Object[]
public enum Size {SMALL, MEDIUM, LARGE};
以上语句定义了一个类,有三个实例。
比较枚举类型的值时直接使用 = =
可在枚举类型中添加构造器方法域 API:P188
使用多态
少用反射
合理设计继承关系和方法
不要使用受保护的域,少用protected
*tips: 本次复习只查看PDF上笔记部分(2021.9.23)
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |