1.idea常用快捷键
详细可参考 :史上最全的IDEA快捷键总结
2.命名规则
3.个人混淆的知识点
3.1 Scanner输入流
//声明输入流实例
Scanner scanner = new Scanner(System.in);
//next :读取到空格前 , 如输入 hello world ,next仅能读取到hello
String str = scanner.next()
//nextLine : 读取到换行前 , 如在同一行输入 hello world , nextLine可以读取完hello world
String str = scanner.nextLine()3.2 可变参数
定义方法时,形参不确定具体个数时,可使用可变参数
方法:在 形参类型 后加...
//可传递多个int型参数
public static int add(int... x){}要求:一个方法中只能指定一个可变参数,且任何普通参数必须在它之前声明
public static int add(float a,int...b){}3.3 数组
Java风格 :int[] arr = new int[10];
C风格:int arr[] = new int[10];
4. 字符串相关
4.1 StringBuilder
方法 :
示例:
StringBuilder sb = new StirngBuilder();
//添加
sb.append("demo");
//反转
sb.reverse(); //结果为 omed
//求长度
sb.length(); //结果为4使用场景:
①字符串的拼接
②字符串的反转
③reverse可用于判断是否为对称字符串
4.2.StringJoiner
构造方法:
5.集合
5.1 集合与数组的对比
数组 :长度不可变;可以存储 基本数据类型 和 引用数据类型
集合:长度可变;只能存储 引用数据类型 (想在集合中存储基本数据类型,要装箱再存储,如int封装为Integer)
5.2 创建集合
语法:ArraryList<泛型> 变量名 = new ArraryList<泛型>();
其中泛型定义了该集合中的数据类型是什么,注意泛型是 Integer 或 引用数据类型的
5.3 成员方法
6.常用API
14.1 Math
注意点:
由于int类型的取值范围为 -2147483648 ~ 21474836477,使用abs传入-2147483648 ,则会出现错误的计算结果-2147483648
使用Math.random()获取整数的随机数方法为 ,Math.floor(Math.random() * 100) + 1 , 即[1,100]的随机数
6.2 System
注意点:
使用currentTimeMillis计算程序运行耗费的时间
long start = System.currentTimeMillis(); //运行代码前 /* * 运行代码 */ long end = System.currentTimeMillis(); //运行代码后 long time = end - start; //得到起始的时间差,即为程序运行所耗费的时间使用arraycopy拷贝数组时,若A,B数组为基本数据类型,则必须保持一致(如A,B均为int型数组,不一致会报错) 若A,B数组为结构体类型,也需要保持类型一致,但子类可以复制给父类(如A的数组类型 extend B的数组类型,则A可复制给B)
6.3 Runtime
该api的构造函数源码如下
private static Runtime currentRuntime = new Runtime(); //2.源码为我们声明了一个唯一的Runtime类型的对象
public static Runtime getRuntime() { //3.通过getRuntime方法将唯一的Runtime类型的对象返回 ,供我们使用
return currentRuntime;
}
private Runtime() {} // 1.构造函数是私有的 ,所以无法声明新对象这样做的原因:Runtime描述的是当前系统运行环境,所以需要唯一性
6.4 Object
Object类是所有类的父类,仅有空参构造方法
常用方法如下
注意点:
当给toString()方法传入对象类型时,调用println打印出来的结果是“包名+@+地址值” 。若想打印出来对象的成员变量,可在该类中重写toString()
Object类中的equals()方法,默认比较的地址值,而实际使用中比较地址值无意义,所以可以在该类中重写equals方法
面试题:
//声明String类型和StringBuilder两个字符串
String str1 = "abc";
StringBuilder str2 = new StringBuilder("abc");
//问:两者调用equals方法结果是什么?
str1.equals(str2);
str2.equals(str1);
//答:两者的结果都是false
//原因:
//1.String类中有重写equals方法,该方法会先判断str1和str2的地址值(即是不是同一对象),若是则可以直接返回true;然后会判断str2是否为String的实例,不是则直接返回false;最后才对str1和str2进行逐个字符对比,均相等则返回true,不等则返回false
//2.StringBuilder类没有重写equals方法,则默认为Object类中的equals方法(对比地址值)
6.5 浅克隆和深克隆
应用场景:如一个服务器不够用户使用,可通过克隆的方式,将一部分的用户信息克隆到第二台服务器上
使用方法:①在Java bean类中先implements Cloneable
②在Java bean类中重写Object类中的Clone方法,最后在该方法中调用super.clone()
代码实现:
//Cloneable为标记型接口,若未标记则该类无法被clone
public class User implements Cloneable {
private int id;
public User() {
}
public User(int id, String name, String password, String path, int[] data) {
this.id = id;
}
public int getId() {
return id;
}
//重写Object中的clone方法:使protected修饰的clone方法可以被调用
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}克隆策略:
浅克隆:基本数据类型复制值,引用数据类型直接复制地址值
深克隆:基本数据类型复制值,字符串类型复制地址值,引用数据类型创建新的对象存储原来的数据
Object的clone是浅克隆
重写clone方法或使用第三方工具类实现深克隆
6.6 BigInteger
构造方法:
BigInteger BI = new BigInteger(int num , Random r) : 创建一个随机大整数,范围为[0,2^num-1]
BigInteger BI = new BigInteger(String num) : 将num转为整数(注意该字符串只能为整数)
BigInteger BI = new BigInteger(String num , int radix) : 将num以radix进制来转为大整数
BigInteger BI = BigInteger.valueOf(int num) : 将num转为大整数,该静态方法在[-16,16]做了内存优化
注意事项:
BigInteger 表示的数,没有超出Long范围,可用静态方法valueof获取
BigInteger 表示的数,已经超出Long范围,可用构造方法2获取
BigInteger 对象一旦创建,内部的值不会改变,BI.add(num)是新创建了一个BigInteger对象
成员方法:
底层逻辑:
int[] mag: 存储绝对值的字节数组。数组的每个元素存储一个 32 位整数,数组中的高位在前(大端序)。int signum: 存储整数的符号,取值为-1(负数)、0(零)、1(正数)。
6.7 BigDecimal
浮点数使用 有限位数的二进制 来表示,由于尾数部分长度有限,所以超出的部分只能舍弃,故导致了计算精度的下降
6.8 Arrays
int[] arr = {8,1,6,3,9,2,5,4,7};
// 转为数组
System.out.println(Arrays.toString(arr));
// 查找元素
System.out.println( Arrays.binarySearch(arr, 6));
// 拷贝
System.out.println(Arrays.toString(Arrays.copyOf(arr, 9)));
System.out.println(Arrays.toString(Arrays.copyOfRange(arr, 2, 5)));
// 排序
Arrays.sort(arr); // 修改的是原数组,返回void. 升序( 插入排序 + 二分查找 )
System.out.println(Arrays.toString(arr));
// 填充元素
Arrays.fill(arr, 99); // 修改的是原数组,返回void
System.out.println(Arrays.toString(arr));
参与讨论
(Participate in the discussion)
参与讨论