0基础学java-day13
一、包装类
1. 包装类的分类
- 1) 针对八种基本数据类型相应的引用类型【对象】—包装类
- 2) 有了类的特点,就可以调用类中的方法。
- 3) 如图:
2 包装类和基本数据的转换
3 案例演示 Integer01.java
package com.hspedu.wrapper;/*** @author 林然* @version 1.0*/
public class Integer01 {public static void main(String[] args) {//演示 int <--> Integer 的装箱和拆箱//jdk5 前是手动装箱和拆箱//手动装箱 int->Integerint n1 = 100;Integer integer = new Integer(n1);Integer integer1 = Integer.valueOf(n1);//手动拆箱//Integer -> intint i = integer.intValue();//jdk5 后,就可以自动装箱和自动拆箱int n2 = 200;//自动装箱 int->IntegerInteger integer2 = n2; //底层使用的是 Integer.valueOf(n2)//自动拆箱 Integer->intint n3 = integer2; //底层仍然使用的是 intValue()方法}
}
4 课堂测试题
5 包装类型和 String 类型的相互转换
案例演示, 以 Integer 和 String 转换为例
package com.hspedu.wrapper;/*** @author 林然* @version 1.0*/
public class WrapperVSString {public static void main(String[] args) {//包装类(Integer)->StringInteger i = 100;//自动装箱//方式 1String str1 = i + "";
//方式 2String str2 = i.toString();
//方式 3String str3 = String.valueOf(i);
//String -> 包装类(Integer)String str4 = "12345";Integer i2 = Integer.parseInt(str4);//使用到自动装箱Integer i3 = new Integer(str4);//构造器System.out.println("ok~~");}
}
6 Integer 类和 Character 类的常用方法
/*** @author 林然* @version 1.0*/
public class WrapperMethod {public static void main(String[] args) {System.out.println(Integer.MIN_VALUE); //返回最小值System.out.println(Integer.MAX_VALUE);//返回最大值System.out.println(Character.isDigit('a'));//判断是不是数字System.out.println(Character.isLetter('a'));//判断是不是字母System.out.println(Character.isUpperCase('a'));//判断是不是大写System.out.println(Character.isLowerCase('a'));//判断是不是小写System.out.println(Character.isWhitespace('a'));//判断是不是空格System.out.println(Character.toUpperCase('a'));//转成大写System.out.println(Character.toLowerCase('A'));//转成小写}
}
7 Integer 类面试题
看看下面代码,输出什么结果?
/*** @author 林然* @version 1.0*/
public class WrapperExercise02 {public static void main(String[] args) {Integer i = new Integer(1);Integer j = new Integer(1);System.out.println(i == j); //False
//所以,这里主要是看范围 -128 ~ 127 就是直接返回
/*
解读
//1. 如果 i 在 IntegerCache.low(-128)~IntegerCache.high(127),就直接从数组返回
//2. 如果不在 -128~127,就直接 new Integer(i)
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
*/Integer m = 1; //底层 Integer.valueOf(1); -> 阅读源码Integer n = 1;//底层 Integer.valueOf(1);System.out.println(m == n); //T
//所以,这里主要是看范围 -128 ~ 127 就是直接返回
//,否则,就 new Integer(xx);Integer x = 128;//底层 Integer.valueOf(1);Integer y = 128;//底层 Integer.valueOf(1);System.out.println(x == y);//False}
}
8 Intege 类面试题总结
package com.hspedu.wrapper;/*** @author 林然* @version 1.0*/
public class WrapperExercise03 {public static void main(String[] args) {//示例一Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);//F
//示例二Integer i3 = new Integer(128);Integer i4 = new Integer(128);System.out.println(i3 == i4);//F
//示例三Integer i5 = 127;//底层 Integer.valueOf(127)Integer i6 = 127;//-128~127System.out.println(i5 == i6); //T// 示例四Integer i7 = 128;Integer i8 = 128;System.out.println(i7 == i8);//F
//示例五Integer i9 = 127; //Integer.valueOf(127)Integer i10 = new Integer(127);System.out.println(i9 == i10);//F
//示例六Integer i11=127;int i12=127;
//只有有基本数据类型,判断的是
//值是否相同System.out.println(i11==i12); //T
//示例七Integer i13=128;int i14=128;System.out.println(i13==i14);//T}
}
二、String 类
1 String 类的理解和创建对象
package com.hspedu.string_;/*** @author 林然* @version 1.0*/
public class String01 {public static void main(String[] args) {//1.String 对象用于保存字符串,也就是一组字符序列//2. "jack" 字符串常量, 双引号括起的字符序列//3. 字符串的字符使用 Unicode 字符编码,一个字符(不区分字母还是汉字)占两个字节//4. String 类有很多构造器,构造器的重载// 常用的有 String s1 = new String(); ////String s2 = new String(String original);//String s3 = new String(char[] a);//String s4 = new String(char[] a,int startIndex,int count)//String s5 = new String(byte[] b)//5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】// 接口 Comparable [String 对象可以比较大小]//6. String 是 final 类,不能被其他的类继承//7. String 有属性 private final char value[]; 用于存放字符串内容//8. 一定要注意:value 是一个 final 类型, 不可以修改(需要功力):即 value 不能指向// 新的地址,但是单个字符内容是可以变化String name = "jack";name = "tom";final char[] value = {'a','b','c'};char[] v2 = {'t','o','m'};value[0] = 'H';
//value = v2; 不可以修改 value 地址}
}
2 创建 String 对象的两种方式
3 两种创建 String 对象的区别
4 课堂测试题
按照之前的方法画出图就很好理解了
5.字符串的特性
5.1 说明
5.2 面试题
在change方法中会独自开辟一个栈 ,也就是其断开的是方法中str的连接,指向新的,但是main中的并没有改变
6.String 类的常见方法
6.1 说明
6. 2 String 类的常见方法一览
【了解用法就好】
package com.hspedu.string_;/*** @author 林然* @version 1.0*/
public class StringMethod01 {public static void main(String[] args) {//1. equals 前面已经讲过了. 比较内容是否相同,区分大小写String str1 = "hello";String str2 = "Hello";System.out.println(str1.equals(str2));//// 2.equalsIgnoreCase 忽略大小写的判断内容是否相等String username = "johN";if ("john".equalsIgnoreCase(username)) {System.out.println("Success!");} else {System.out.println("Failure!");}// 3.length 获取字符的个数,字符串的长度System.out.println("韩顺平".length());
// 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从 0 开始,如果找不到,返回-1String s1 = "wer@terwe@g";int index = s1.indexOf('@');System.out.println(index);// 3System.out.println("weIndex=" + s1.indexOf("we"));//0// 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回-1s1 = "wer@terwe@g@";index = s1.lastIndexOf('@');System.out.println(index);//11System.out.println("ter 的位置=" + s1.lastIndexOf("ter"));//4
// 6.substring 截取指定范围的子串String name = "hello,张三";
//下面 name.substring(6) 从索引 6 开始截取后面所有的内容System.out.println(name.substring(6));//截取后面的字符//name.substring(0,5)表示从索引 0 开始截取,截取到索引 5-1=4 位置System.out.println(name.substring(2,5));//llo}
}
package com.hspedu.string_;/*** @author 林然* @version 1.0*/
public class StringMethod02 {public static void main(String[] args) {// 1.toUpperCase 转换成大写String s = "heLLo";System.out.println(s.toUpperCase());//HELLO// 2.toLowerCaseSystem.out.println(s.toLowerCase());//hello
// 3.concat 拼接字符串String s1 = "宝玉";s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");System.out.println(s1);//宝玉林黛玉薛宝钗 together
// 4.replace 替换字符串中的字符s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
//在 s1 中,将 所有的 林黛玉 替换成薛宝钗
// 老韩解读: s1.replace() 方法执行后,返回的结果才是替换过的. // 注意对 s1 没有任何影响String s11 = s1.replace("宝玉", "jack");System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉
// 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
//老韩解读:
// 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
// 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \String[] split = poem.split(",");poem = "E:\\aaa\\bbb";split = poem.split("\\\\");System.out.println("==分割后内容===");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}
// 6.toCharArray 转换成字符数组s = "happy";char[] chs = s.toCharArray();for (int i = 0; i < chs.length; i++) {System.out.println(chs[i]);}
// 7.compareTo 比较两个字符串的大小,如果前者大,
// 则返回正数,后者大,则返回负数,如果相等,返回 0
// 老韩解读
// (1) 如果长度相同,并且每个字符也相同,就返回 0
// (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小
// 就返回 if (c1 != c2) {
// return c1 - c2;
// }
// (3) 如果前面的部分都相同,就返回 str1.len - str2.lenString a = "jcck";// len = 3String b = "jack";// len = 4System.out.println(a.compareTo(b)); // 返回值是 'c' - 'a' = 2 的值
// 8.format 格式字符串/* 占位符有:* %s 字符串 %c 字符 %d 整型 %.2f 浮点型**/String name = "john";int age = 10;double score = 56.857;char gender = '男';//将所有的信息都拼接在一个字符串.String info = "我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我! ";System.out.println(info);
//老韩解读
//1. %s , %d , %.2f %c 称为占位符
//2. 这些占位符由后面变量来替换
//3. %s 表示后面由 字符串来替换
//4. %d 是整数来替换
//5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理
//6. %c 使用 char 类型来替换String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";String info2 = String.format(formatStr, name, age, score, gender);System.out.println("info2=" + info2);}
}
三、StringBuffer 类
1 基本介绍
2.String VS StringBuffer
3 String 和 StringBuffer 相互转换
package com.hspedu.stringbuffer_;/*** @author 林然* @version 1.0*/
public class StringAndStringBuffer {public static void main(String[] args) {//看 String——>StringBufferString str = "hello tom";
//方式 1 使用构造器
//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响StringBuffer stringBuffer = new StringBuffer(str);
//方式 2 使用的是 append 方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);
//看看 StringBuffer ->StringStringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");
//方式 1 使用 StringBuffer 提供的 toString 方法String s = stringBuffer3.toString();
//方式 2: 使用构造器来搞定String s1 = new String(stringBuffer3);}
}
4 StringBuffer 类常见方法
增删改插【append delet replace insert】
package com.hspedu.stringbuffer_;/*** @author 林然* @version 1.0*/
public class StringBufferMethod {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello");
//增s.append(',');// "hello,"s.append("张三丰");//"hello,张三丰"s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏 100true10.5" System.out.println(s);//"hello,张三丰赵敏 100true10.5"
//删/** 删除索引为>=start && <end 处的字符* 解读: 删除 11~14 的字符 [11, 14)*/s.delete(11, 14);System.out.println(s);//"hello,张三丰赵敏true10.5"
//改
//使用 周芷若 替换 索引 9-11 的字符 [9,11)s.replace(9, 11, "周芷若");System.out.println(s);//"hello,张三丰周芷若 true10.5"
//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1int indexOf = s.indexOf("张三丰");System.out.println(indexOf);//6
//插//在索引为 9 的位置插入 "赵敏",原来索引为 9 的内容自动后移s.insert(9, "赵敏");System.out.println(s);//"hello,张三丰赵敏周芷若 true10.5"
//长度System.out.println(s.length());//22System.out.println(s);}
}
5 StringBuffer 类课堂测试题
5.1 题目一
下面会输出什么
public class StringBufferExercise01 {public static void main(String[] args) {String str = null;// okStringBuffer sb = new StringBuffer(); //oksb.append(str);//需要看源码 , 底层调用的是 AbstractStringBuilder 的 appendNullSystem.out.println(sb.length());//4System.out.println(sb);//null//下面的构造器,会抛出NullpointerExceptionStringBuffer sb1 = new StringBuffer(str);//看底层源码 super(str.length() + 16);System.out.println(sb1);}
}
大家可以去看具体方法的底层源码,对于第二个输出会抛出异常,同下方的方法所示查找对应的源码,选中你调用的方法,然后ctrl+b就可以查看,一步一步走
5.2 题目二
【在这里我就只把价格进行逻辑实现了,这个题目主要考察的还是价格的格式化操作,思路就是先找小数点的位置,然后对小数点前面的数字,每三位插入一个逗号,当不足三位时,循环结束】
package com.hspedu.stringbuffer_;import java.util.Scanner;/*** @author 林然* @version 1.0*/
public class StringBufferExercise02 {/*思路分析1.定义一个Scanner 对象,接收用户输入的价格2.希望使用StringBuffer的insert,需要将String转换成StringBudffer3.使用相关方法进行字符串处理*/public static void main(String[] args) {Scanner scanner =new Scanner(System.in);String price = scanner.next();StringBuffer sb =new StringBuffer(price);int i = sb.lastIndexOf(".");int index=0;while(true){if((i-index)<=2){break;}else{index=index+3;sb.insert(index,",");i=i+1;index=index+1;}}System.out.println(sb);}}
四、StringBuilder 类
1 基本介绍
2 StringBuilder 常用方法
3 String、StringBuffer 和 StringBuilder 的比较
4 String、StringBuffer 和 StringBuilder 的效率测试
StringBuilder > StringBuffer > String
package com.hspedu.stringbuilder_;/*** @author 林然* @version 1.0*/
public class StringVsStringBufferVsStringBuilder {public static void main(String[] args) {long startTime = 0L;long endTime = 0L;StringBuffer buffer = new StringBuffer("");startTime = System.currentTimeMillis();//获取当前时间for (int i = 0; i < 80000; i++) {//StringBuffer 拼接 20000 次buffer.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuffer 的执行时间:" + (endTime - startTime));StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {//StringBuilder 拼接 20000 次builder.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuilder 的执行时间:" + (endTime - startTime));String text = "";startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {//String 拼接 20000text = text + i;}endTime = System.currentTimeMillis();System.out.println("String 的执行时间:" + (endTime - startTime));}
}
5 String、StringBuffer 和 StringBuilder 的选择
五、Math 类
1 基本介绍
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数
2 方法一览(基本均为静态方法)
3 Math 类常见方法应用案例
package com.hspedu.math_;/*** @author 林然* @version 1.0*/
public class MathMethod {public static void main(String[] args) {//看看 Math 常用的方法(静态方法)
//1.abs 绝对值int abs = Math.abs(-9);System.out.println(abs);//9//2.pow 求幂double pow = Math.pow(2, 4);//2 的 4 次方System.out.println(pow);//16
//3.ceil 向上取整,返回>=该参数的最小整数(转成 double);double ceil = Math.ceil(3.9);System.out.println(ceil);//4.0
//4.floor 向下取整,返回<=该参数的最大整数(转成 double)double floor = Math.floor(4.001);System.out.println(floor);//4.0
//5.round 四舍五入 Math.floor(该参数+0.5)long round = Math.round(5.51);System.out.println(round);//6
//6.sqrt 求开方double sqrt = Math.sqrt(9.0);System.out.println(sqrt);//3.0
//7.random 求随机数
// random 返回的是 0 <= x < 1 之间的一个随机小数
// 思考:请写出获取 a-b 之间的一个随机整数,a,b 均为整数 ,比如 a = 2, b=7
// 即返回一个数 x 2 <= x <= 7
// Math.random() * (b-a) 返回的就是 0 <= 数 <= b-a
// (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )
// (2) 使用具体的数给小伙伴介绍 a = 2 b = 7
// (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)
// Math.random()*6 返回的是 0 <= x < 6 小数
// 2 + Math.random()*6 返回的就是 2<= x < 8 小数// (int)(2 + Math.random()*6) = 2 <= x <= 7
// (3) 公式就是 (int)(a + Math.random() * (b-a +1) )for(int i = 0; i < 100; i++) {System.out.println((int)(2 + Math.random() * (7 - 2 + 1)));}
//max , min 返回最大值和最小值int min = Math.min(1, 9);int max = Math.max(45, 90);System.out.println("min=" + min);System.out.println("max=" + max);}
}
六、Arrays 类
1 Arrays 类常见方法应用案例
package com.hspedu.arrays_;import java.util.Arrays;
import java.util.Comparator;/*** @author 林然* @version 1.0*/
public class ArraysMethod01 {public static void main(String[] args) {Integer[] integers = {1, 20, 90};
//遍历数组
// for(int i = 0; i < integers.length; i++) {
// System.out.println(integers[i]);
// }
//直接使用 Arrays.toString 方法,显示数组System.out.println(Arrays.toString(integers));////演示 sort 方法的使用Integer arr[] = {1, -1, 7, 0, 89};
//进行排序//1. 可以直接使用冒泡排序 , 也可以直接使用 Arrays 提供的 sort 方法排序
//2. 因为数组是引用类型,所以通过 sort 排序后,会直接影响到 实参 arr
//3. sort 重载的,也可以通过传入一个接口 Comparator 实现定制排序
//4. 调用 定制排序 时,传入两个参数 (1) 排序的数组 arr
// (2) 实现了 Comparator 接口的匿名内部类 , 要求实现 compare 方法
//5. 先演示效果,再解释
//6. 这里体现了接口编程的方式 , 看看源码,就明白// 源码分析
//(1) Arrays.sort(arr, new Comparator()
//(2) 最终到 TimSort 类的 private static <T> void binarySort(T[] a, int lo, int hi, int start, // Comparator<? super T> c)()
//(3) 执行到 binarySort 方法的代码, 会根据动态绑定机制 c.compare()执行我们传入的
// 匿名内部类的 compare () 底层是调用了二叉排序方法
// while (left < right) {
// int mid = (left + right) >>> 1;
// if (c.compare(pivot, a[mid]) < 0)
// right = mid;
// else
// left = mid + 1;
// }
//(4) new Comparator() {
// @Override
// public int compare(Object o1, Object o2) {
// Integer i1 = (Integer) o1;
// Integer i2 = (Integer) o2;
// return i2 - i1;
// }
// }
//(5) public int compare(Object o1, Object o2) 返回的值>0 还是 <0
// 会影响整个排序结果, 这就充分体现了 接口编程+动态绑定+匿名内部类的综合使用
// 将来的底层框架和源码的使用方式,会非常常见
//Arrays.sort(arr); // 默认排序方法
//定制排序Arrays.sort(arr, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer i1 = (Integer) o1;Integer i2 = (Integer) o2;return i2 - i1;}});System.out.println("===排序后===");System.out.println(Arrays.toString(arr));//}
}
package com.hspedu.arrays_;import java.util.Arrays;
import java.util.List;/*** @author 林然* @version 1.0*/
public class ArraysMethod02 {public static void main(String[] args) {Integer[] arr = {1, 2, 90, 123, 567};
// binarySearch 通过二分搜索法进行查找,要求必须排好//1. 使用 binarySearch 二叉查找//2. 要求该数组是有序的. 如果该数组是无序的,不能使用 binarySearch//在编译阶段是不会报错的,但是无序的话很可能是找不到要查找的值//3. 如果数组中不存在该元素,就返回 return -(low + 1); // key not foundint index = Arrays.binarySearch(arr, 567);System.out.println("index=" + index);//copyOf 数组元素的复制//1. 从 arr 数组中,拷贝 arr.length 个元素到 newArr 数组中
//2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
//3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException
//4. 该方法的底层使用的是 System.arraycopy()Integer[] newArr = Arrays.copyOf(arr, arr.length);System.out.println("==拷贝执行完毕后==");System.out.println(Arrays.toString(newArr));
//ill 数组元素的填充Integer[] num = new Integer[]{9,3,2};//1. 使用 99 去填充 num 数组,可以理解成是替换原理的元素//num数组元素全都变成99Arrays.fill(num, 99);System.out.println("==num 数组填充后==");System.out.println(Arrays.toString(num));//equals 比较两个数组元素内容是否完全一致Integer[] arr2 = {1, 2, 90, 123};//1. 如果 arr 和 arr2 数组的元素一样,则方法 true;
//2. 如果不是完全一样,就返回 falseboolean equals = Arrays.equals(arr, arr2);System.out.println("equals=" + equals);//老韩解读
//1. asList 方法,会将 (2,3,4,5,6,1)数据转成一个 List 集合
//2. 返回的 asList 编译类型 List(接口)
//3. asList 运行类型 java.util.Arrays#ArrayList, 是 Arrays 类的
// 静态内部类 private static class ArrayList<E> extends AbstractList<E>
// implements RandomAccess, java.io.SerializableList asList = Arrays.asList(2,3,4,5,6,1);System.out.println("asList=" + asList);System.out.println("asList 的运行类型" + asList.getClass());}
}
2 Arrays 类课堂练习
package com.hspedu.arrays_;import java.util.Arrays;
import java.util.Comparator;/*** @author 林然* @version 1.0*/
public class ArrayExercise {public static void main(String[] args) {/*案例:自定义 Book 类,里面包含 name 和 price,按 price 排序(从大到小)。要求使用两种方式排序 , 有一个 Book[] books = 4 本书对象.使用前面学习过的传递 实现 Comparator 接口匿名内部类,也称为定制排序。[同学们完成这个即可 10min ], 可以按照 price (1)从大到小(2)从小到大 (3) 按照书名长度从大到小
*/Book[] books = new Book[4];books[0] = new Book("红楼梦", 100);books[1] = new Book("金瓶梅新", 90);books[2] = new Book("青年文摘 20 年", 5);books[3] = new Book("java 从入门到放弃~", 300);//(1)price 从大到小
// Arrays.sort(books, new Comparator() {
// //这里是对 Book 数组排序,因此 o1 和 o2 就是 Book 对象
// @Override
// public int compare(Object o1, Object o2) {
// Book book1 = (Book) o1;
// Book book2 = (Book) o2;
// double priceVal = book2.getPrice() - book1.getPrice();
// //这里老师进行了一个转换
// //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
// if(priceVal > 0) {
// return 1;
// } else if(priceVal < 0) {
// return -1;
// } else {
// return 0;
// }
//
// }
// });//(2)price 从小到大
// Arrays.sort(books, new Comparator() {
// @Override
// public int compare(Object o1, Object o2) {
// Book book1 = (Book) o1;
// Book book2 = (Book) o2;
// double priceVal = book2.getPrice() - book1.getPrice();
// //这里老师进行了一个转换
// //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
// if(priceVal > 0) {
// return -1;
// } else if(priceVal < 0) {
// return 1;
// } else {
// return 0;
// }
// }
// });//(3)按照书名长度从大到小Arrays.sort(books, new Comparator() {//这里是对 Book 数组排序,因此 o1 和 o2 就是 Book 对象@Overridepublic int compare(Object o1, Object o2) {Book book1 = (Book) o1;Book book2 = (Book) o2;
//要求按照书名的长度来进行排序return book2.getName().length() - book1.getName().length();}});System.out.println(Arrays.toString(books));}
}
class Book{private String name;private double price;public Book(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", price=" + price +'}';}
}
七、System 类
1 System 类常见方法和案例
package com.hspedu.system_;import java.util.Arrays;/*** @author 林然* @version 1.0*/
public class System_ {public static void main(String[] args) {System.out.println("ok1");//exit()退出程序//1. exit(0) 表示程序退出//2. 0 表示一个状态 , 正常的状态
// System.exit(0);
// System.out.println("ok2");
// System.out.println("ok3");//arraycopy :复制数组元素,比较适合底层调用,
// 一般使用 Arrays.copyOf 完成复制数组int[] src={1,2,3};int[] dest = new int[3];// dest 当前是 {0,0,0}//1. 主要是搞清楚这五个参数的含义
//2. // 源数组// * @param src the source array. // srcPos: 从源数组的哪个索引位置开始拷贝
// * @param srcPos starting position in the source array. // dest : 目标数组,即把源数组的数据拷贝到哪个数组
// * @param dest the destination array. // destPos: 把源数组的数据拷贝到 目标数组的哪个索引
// * @param destPos starting position in the destination data. // length: 从源数组拷贝多少个数据到目标数组
// * @param length the number of array elements to be copied.System.arraycopy(src, 0, dest, 0, src.length);System.out.println("dest=" + Arrays.toString(dest));//[1, 2, 3]//currentTimeMillens:返回当前时间距离 1970-1-1 的毫秒数System.out.println(System.currentTimeMillis());}
}
八、BigInteger 和 BigDecimal 类
1 BigInteger 和 BigDecimal 介绍
2 BigInteger 和 BigDecimal 常见方法
package com.hspedu.bignum;import java.math.BigInteger;/*** @author 林然* @version 1.0*/
public class BigInteger_ {public static void main(String[] args) {//当我们编程中,需要处理很大的整数,long 不够用//可以使用 BigInteger 的类来搞定// long l = 23788888899999999999999999999l;// System.out.println("l=" + l)BigInteger bigInteger1 =new BigInteger("99999999999999999999999999");BigInteger bigInteger2 =new BigInteger("277737347477327478349498483090");//老韩解读
//1. 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
//2. 可以创建一个 要操作的 BigInteger 然后进行相应操作System.out.println("bigInteger1 + bigInteger2 = "+bigInteger1.add(bigInteger2));System.out.println("bigInteger1 - bigInteger2 = "+bigInteger1.subtract(bigInteger2));System.out.println("bigInteger1 * bigInteger2 = "+bigInteger1.multiply(bigInteger2));System.out.println("bigInteger1 / bigInteger2 = "+bigInteger1.divide(bigInteger2));}
}
package com.hspedu.bignum;import java.math.BigDecimal;/*** @author 林然* @version 1.0*/
public class BigDecimal_ {public static void main(String[] args) {//当我们需要保存一个精度很高的数时,double 不够用
//可以是 BigDecimal
// double d = 1999.11111111111999999999999977788d;
// System.out.println(d);BigDecimal bigDecimal = new BigDecimal("1999.11");BigDecimal bigDecimal2 = new BigDecimal("3");//1. 如果对 BigDecimal 进行运算,比如加减乘除,需要使用对应的方法
//2. 创建一个需要操作的 BigDecimal 然后调用相应的方法即可System.out.println(bigDecimal.add(bigDecimal2));System.out.println(bigDecimal.subtract(bigDecimal2));System.out.println(bigDecimal.multiply(bigDecimal2));System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常 ArithmeticException//在调用 divide 方法时,指定精度即可. BigDecimal.ROUND_CEILING
//如果有无限循环小数,就会保留 分子 的精度,也可以自己指定保留的精度System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));}
}
九、日期类
1 第一代日期类
package com.hspedu.date_;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @author 林然* @version 1.0*/
public class Date01 {public static void main(String[] args) throws ParseException {//1. 获取当前系统时间
//2. 这里的 Date 类是在 java.util 包
//3. 默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换Date d1 = new Date(); //获取当前系统时间System.out.println("当前日期=" + d1);Date d2 = new Date(9234567); //通过指定毫秒数得到时间System.out.println("d2=" + d2); //获取某个时间对应的毫秒数
////1. 创建 SimpleDateFormat 对象,可以指定相应的格式
//2. 这里的格式使用的字母是规定好,不能乱写SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format = sdf.format(d1); // format:将日期转换成指定格式的字符串System.out.println("当前日期=" + format);
//老韩解读
//1. 可以把一个格式化的 String 转成对应的 Date
//2. 得到 Date 仍然在输出时,还是按照国外的形式,如果希望指定格式输出,需要转换
//3. 在把 String -> Date , 使用的 sdf 格式需要和你给的 String 的格式一样,否则会抛出转换异常String s = "1996 年 01 月 01 日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + sdf.format(parse));}
}
2 第二代日期类
package com.hspedu.date_;import java.util.Calendar;/*** @author 林然* @version 1.0*/
public class Calendar_ {public static void main(String[] args) {//1. Calendar 是一个抽象类, 并且构造器是 private//2. 可以通过 getInstance() 来获取实例//3. 提供大量的方法和字段提供给程序员//4. Calendar 没有提供对应的格式化的类,因此需要程序员自己组合来输出(灵活)
//5. 如果我们需要按照 24 小时进制来获取时间, Calendar.HOUR ==改成=> Calendar.HOUR_OF_DAYCalendar c =Calendar.getInstance();System.out.println("c=" + c);
//2.获取日历对象的某个日历字段System.out.println("年:" + c.get(Calendar.YEAR));
// 这里为什么要 + 1, 因为 Calendar 返回月时候,是按照 0 开始编号System.out.println("月:" + (c.get(Calendar.MONTH) + 1));System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));System.out.println("小时:" + c.get(Calendar.HOUR));System.out.println("分钟:" + c.get(Calendar.MINUTE));System.out.println("秒:" + c.get(Calendar.SECOND));
//Calender 没有专门的格式化方法,所以需要程序员自己来组合显示System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +c.get(Calendar.DAY_OF_MONTH) +" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND) );}
}
3 第三代日期类
package com.hspedu.date_;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;/*** @author 林然* @version 1.0*/
public class LocalDate_ {public static void main(String[] args) {//第三代日期//1. 使用 now() 返回表示当前日期时间的 对象LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()System.out.println(ldt);// 创建 DateTimeFormatter 对象DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期=" + format);System.out.println("年=" + ldt.getYear());System.out.println("月=" + ldt.getMonth());System.out.println("月=" + ldt.getMonthValue());System.out.println("日=" + ldt.getDayOfMonth());System.out.println("时=" + ldt.getHour());System.out.println("分=" + ldt.getMinute());System.out.println("秒=" + ldt.getSecond());LocalDate now = LocalDate.now(); //可以获取年月日LocalTime now2 = LocalTime.now();//获取到时分秒//提供 plus 和 minus 方法可以对当前时间进行加或者减
//看看 890 天后,是什么时候 把 年月日-时分秒LocalDateTime localDateTime = ldt.plusDays(890);System.out.println("890 天后=" + dateTimeFormatter.format(localDateTime));
//看看在 3456 分钟前是什么时候,把 年月日-时分秒输出LocalDateTime localDateTime2 = ldt.minusMinutes(3456);System.out.println("3456 分钟前 日期=" + dateTimeFormatter.format(localDateTime2));}
}
4 DateTimeFormatter 格式日期类
5 Instant 时间戳
package com.hspedu.date_;import java.time.Instant;
import java.util.Date;/*** @author 林然* @version 1.0*/
public class Instant_ {public static void main(String[] args) {//1.通过 静态方法 now() 获取表示当前时间戳的对象Instant now = Instant.now();System.out.println(now);
//2. 通过 from 可以把 Instant 转成 DateDate date = Date.from(now);//3. 通过 date 的 toInstant() 可以把 date 转成 Instant 对象Instant instant = date.toInstant();}
}
6 第三代日期类更多方法
十、本章作业
1.作业一
package com.hspedu.homework;/*** @author 林然* @version 1.0*/
public class homework01 {public static void main(String[] args) {String str="abcdef";try {System.out.println(reverse(str,1,4));} catch (Exception e) {System.out.println(e.getMessage());return;}}/*(1)将字符串进行反转,比如“abcdef"反转成"aedcbf"(2)编写方法 public static String reverse(String str,int start,int end)思路分析(1)先确定方法(2)把String转成char[],因为char的元素是可以交换的*/public static String reverse(String str, int start, int end) {//对输入参数进行验证//对正确的判别,然后取反即可if(!(str!=null && start>=0 && end> start && end<str.length())){throw new RuntimeException("参数不正确");}char[] chars = str.toCharArray();char temp = ' ';//交换辅助变量for (int i = start, j = end; i < j; i++, j--) {temp = chars[i];chars[i] = chars[j];chars[j] = temp;}return new String(chars);}}
2.作业二
package com.hspedu.homework;/*** @author 林然* @version 1.0*/
public class homework02 {public static void main(String[] args) {String name ="lin";String pwd ="123456";String email = "linran@xinlang.com";try {userRegister(name,pwd,email);System.out.println("注册成功");} catch (Exception e) {System.out.println(e.getMessage());}}/*思路分析(1)先编写方法userRegister(String name,String pwd,String email){}(2)针对输入的内容进行校验,如果发现有问题,就抛出异常,给出提示(3)单独写一个方法判断密码是否都是数字*/public static void userRegister(String name,String pwd,String email){if(!(name.length()>=2&&name.length()<=4)){throw new RuntimeException("用户名长度不正确");}if(!(pwd.length()==6&& isDigital(pwd))){throw new RuntimeException("密码应该全为数字,且长度为6");}int i =email.indexOf('@');int j =email.indexOf('.');if(!(i>-1 && j>-1 &&j>i)){throw new RuntimeException("邮箱不正确");}}public static boolean isDigital(String str){char [] chars = str.toCharArray();for (int i = 0; i <str.length() ; i++) {if(!(chars[i]>='0'&&chars[i]<='9')){return false;}}return true;}
}
3.作业三
package com.hspedu.homework;/*** @author 林然* @version 1.0*/
public class homework03 {public static void main(String[] args) {String str="lin ran liu";printName(str);}/*编写方法,完成输出格式对接收的字符串进行分割split(" ")对得到的数组进行格式化 String.format()数据校验*/public static void printName(String str){if(str==null){System.out.println("字符串不能为空");return;}String [] name =str.split(" ");if(name.length!=3){System.out.println("输入的字符串格式不正确");return;}String format=String.format("%s,%s.%c",name[2],name[0],name[1].toUpperCase().charAt(0));System.out.println(format);}
}
4 作业四
5. 作业五
相关文章:

0基础学java-day13
一、包装类 1. 包装类的分类 1) 针对八种基本数据类型相应的引用类型【对象】—包装类 2) 有了类的特点,就可以调用类中的方法。 3) 如图: 2 包装类和基本数据的转换 3 案例演示 Integer01.java package com.hspedu.wrapper;/*** author 林然* version 1.0*/ p…...
好题记录:
好题记录: 1:2:3:三级目录 1: 下面代码的结果是:( ) 下面代码的结果是:( )#include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i …...
web前端之JavaScrip中的闭包
MENU 闭包--笔试-11defineReactive函数,利用闭包封装Object.defineProperty()闭包--节流函数--笔试-10闭包的定义JavaScript闭包的9大经典使用场景 闭包–笔试-11 function fun() { var n 9; // js 中强行给一个未声明的变量赋值,// 程序不会报错// 并…...

Windows下命令行启动与关闭WebLogic的相关服务
WebLogic 的服务器类型 WebLogic提供了三种类型的服务器: 管理服务器节点服务器托管服务器 示例和关系如下图: 对应三类服务器, 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…...

LeetCode Hot100 169.多数元素
题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 方法一:哈希表 class Solution {public int…...

数据结构:堆的实现思路
我们之前写过堆的实现代码:数据结构:堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…...
结合 DBSCAN 示例代码介绍 DBSCAN
前文为JoyT的科研之旅第一周——科研工具学习及论文阅读收获-CSDN博客 DBSCAN 介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够识别出任意形状的簇,并有效地处理噪声…...

vscode 调试jlink
文章目录 软件使用说明1、启动GDB Server2、下载gdb3、vscode配置4、调试 软件 vscodejlink - (JLinkGDBServer.exe)gcc-arm-none-eabi-10-2020-q4-major (arm-none-eabi-gdb.exe) 使用说明 vscode通过TCP端口调用JLinkGDBServer通过jlink连接和操作设备,vscode不…...

微前端实战:打造高效、灵活的前端应用架构
文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展,前端应用的规模和复杂度也在不断增加。…...

csv文件EXCEL默认打开乱码问题
这里讨论的问题是,当用记事本打开带有中文字符的csv正常时,用excel打开却是乱码。 简单概括就是:编码问题,windows的 excel打开csv文本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。如果写文件…...
C语言之实现贪吃蛇小游戏篇(2)
目录 🎇测试游戏test.c 🎇游戏头文件包含&函数声明snake.h 🎇游戏实现snake.c 🎇测试游戏test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "snake.h" void test() {int ch 0;do{Snake snake { 0 };//创建…...
Comparator接口
Comparator接口 Comparator 是 Java 中用于比较对象的接口。它允许开发者实现自定义的比较逻辑,以用于对对象进行排序或者确定它们的顺序。 主要方法: Comparator 接口中包含一个抽象方法: int compare(T o1, T o2):用于比较两…...
SELinux refpolicy详解(9)
接前一篇文章:SELinux refpolicy详解(8) 三、refpolicy内容详解 上一回讲解了refpolicy源码根目录下的build.conf文件的前一部分内容。本回继续讲解其后一部分。 2. build.conf 文件路径:refpolicy源码根目录/build.conf。 文…...

零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型
目标检测作为当前计算机视觉落地的热点技术之一,已被广泛应用于自动驾驶、智慧园区、工业检测和卫星遥感等场景。开发者在研究相关目标检测技术时,通常需熟练掌握图像目标检测框架,如通用目标检测框架 YOLO 系列,旋转目标检测框架…...
python每日一题——20旋转图像
题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]]…...

云计算生成式 -给你不一样的音乐推荐新体验
目录 摘要: 正文: 一、亚马逊云与生成式 AI 结合的展望/总结 二、我用亚马逊云科技生成式 AI 产品打造了什么,解决了什么问题 三、未来云端技术发展趋势的见解 四、云端技术未来需要解决的问题 1、如何保护数据安全和隐私? …...

Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器
Zabbix 6.0 Zabbix 6.0一、关于zabbix1、什么是zabbix2、zabbix工作原理3、zabbix 6.0 特性4、zabbix 6.0 功能组件 二、Zabbix 6.0 部署1、 部署 zabbix 服务端(1) 部署 Nginx PHP 环境并测试(2) 部署数据库(3) 编译安装 zabbix server 服务端(4) 部署 Web 前端,进…...
Docker 简介及其常用命令详解
Docker 简介及其常用命令详解 Docker 自推出以来,已成为开发和运维领域的重要工具。它简化了应用的部署、测试和分发过程,使得容器化技术成为现代软件开发的标准实践。本文将为您提供Docker的基础介绍以及其常用命令的详细讲解。 什么是Docker…...

基于PHP的高中生物学习平台
有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …...
Git多库多账号本地SSH连接配置方法
Git多库多账号本地SSH连接配置方法 一、前言二、环境三、帮助文档四、多环境配置4.1 配置config文件 五、生成RSA秘钥对5.1 ssh秘钥位置5.2 生成秘钥对(公钥、私钥)5.3 添加公钥到GIT用户配置中 六 测试git是否可以使用七、总结 一、前言 在使用Git管理…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...