day13_自我总结
一、回顾
1.字符串转换性的方法
public byte[] getBytes() ==>将字符串转换为字节数组
public char[] toCharArray()==> 将字符串转换为字符数组
public String toLowerCase()==>将大写转换为小写
public String toUpperCase()==>将小写转换为大写
public String replace(CharSequence target,CharSequence replacement) 替换字符串指定内容
public String[] split(String regex) 根据条件来进行拆分
public String trim() 去除首尾空格
2.StringBuffer
A.常用的方法
public StringBuffer append(boolean b) 在末尾进行插入
public StringBuffer insert(int offset, boolean b) 在指定索引位置处进行插入
public StringBuffer deleteCharAt(int index) 根据索引删除
public StringBuffer delete(int start,int end) 根据区间来进行删除
public StringBuffer reverse() 反转
B.StringBuffer与String之间的转换
StringBuffer ==>String
a.public String toString()
b.public String(StringBuffer buffer)构造方法
String ==>StringBuffer
a.public StringBuffer(String str)
b. new StringBuffer().append(String str);
3.Syetem
public static long currentTimeMillis()获取当前系统的毫秒值
public static void exit(int status) 终止jvm
4.Math
public static double random() 产生一个0-1随机数(包括0不包括1)
5.Date
public Date() 构造方法
public void setTime(long time) 将时间的毫秒值转换为Date
public long getTime() 将Date转换为时间的毫秒值
6.Calendar
public static Calendar getInstance() 获取Calendar 对象
public int get(int field) 返回给定日历字段的值
public abstract void add(int field,int amount) 根据日历字段设置时间偏移
public final Date getTime() =>将Calendar 转换为Date对象
public final void setTime(Date date) ==>键Date转换为Calendar
7.Integer
public static int parseInt(String s) 将字符串转换int类型
二、 SimpleDateFormat (重点)
1.SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类 用于来进行时间格式化类
2.构造方法
public SimpleDateFormat(String pattern) 日期和时间格式的模式
3.常用的方法
public Date parse(String source) ==> 将指定字符串格式的时间转换为Date对象
public final String format(Date date)==> 将Date对象转换为指定格式的字符串
年 y
月 M
日 d (月份中的天数)
时 h (am / pm 中的小时数(1-12))
分 m (小时中的分钟数)
秒 s (分钟中的秒数)
代码
package com.qf.test02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test01 {
public static void main(String[] args) throws ParseException {
//实例化Date
Date d = new Date();
//实例化SimpleDateFormat
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
String time = sf.format(d);
System.out.println(time);
//将字符串的时间转换为Date对象
Date d1 = sf.parse(time);
System.out.println(d1);
}
}
2.1 案例
step01 需求
键盘录入你的出生日期,统计出生了多少天。
step02 分析
A.实例化Scanner
B.使用SimpleDateFormat 转换为Date对象
C.获取毫秒值 getTime()
D.获取系统当前时间的毫秒值
E.(系统当前时间的毫秒值-出生的毫秒值)/1000/60/60/24
step03 代码
package com.qf.test02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
System.out.println("请输入生日");
String line = input.next();
//根据-来进行分割
String[] arrays = line.split("-");
//获取Calendar
Calendar cla = Calendar.getInstance();
//设置年
cla.set(Calendar.YEAR,Integer.parseInt(arrays[0]));
//设置月-1
cla.set(Calendar.MONTH,(Integer.parseInt(arrays[1])-1));
//设置日
cla.set(Calendar.DAY_OF_MONTH,Integer.parseInt(arrays[2]));
//转换为Date对象
Date d = cla.getTime();
//转换为毫秒值
long time = d.getTime();
//获取系统的毫秒值
long currentTime = System.currentTimeMillis();
long days = (currentTime-time)/1000/60/60/24;
System.out.println(days);
//String[] arrays = line.split("\\.");
//System.out.println(Arrays.toString(arrays));
// //转化为Date对象
// Date d = new SimpleDateFormat("yyyy-MM-dd").parse(line);
// //获取毫秒值
// long time = d.getTime();
// //获取系统的毫秒值
// long currentTime = System.currentTimeMillis();
// long days = (currentTime-time)/1000/60/60/24;
// System.out.println(days);
}
}
三、Scanner (了解)
3.1 简介
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器 ==>扫描器
3.2 构造方法
构造方法 | 构造说明 |
---|---|
public Scanner(File source) | 构造一个新的 Scanner,它生成的值是从指定文件扫描的 |
public Scanner(InputStream source) | 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的 |
public Scanner(String source) | 构造一个新的 Scanner,它生成的值是从指定字符串扫描的(其实就是根据文件路径来扫描文件) |
3.3 常用的方法
方法的名称 | 方法的描述 |
---|---|
public String next() | 用于获取字符串 |
public String nextLine() | 获取一行内容(包括空格) |
public xxx nextxxx() | 获取各种基本数据类型的数据(没有 nextChar()这个方法) |
public boolean hasNextxxx() | 用于判断键盘录入的数据的数据类型与接收的数据类型是否一致 |
代码
package com.qf.test03;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
// System.out.println("请输入字符串");
// String line = input.next();
// System.out.println(line);
// System.out.println("请输入字符串");
// String line = input.nextLine();
// System.out.println(line);
System.out.println("请输入消费金额");
//判断接收数据类型与键盘录入的数据类型是否一致
if (input.hasNextDouble()){
double money = input.nextDouble();
System.out.println(money);
}else {
System.out.println("输入错误");
}
}
}
3.4 问题
问题:
第一个键盘输入完一个整数之后 按回车键 nextLine() 读取了这个回车键 所有就结束
解决:
A.重新实例化Scanner来进行处理
B.都接收字符串类型 nextLine() 使用方法将String转换为int类型
代码-问题
package com.qf.test03;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
//从键盘获取整数
int num = input.nextInt();
System.out.println(num);
//从键盘中获取字符串
String line = input.nextLine();
System.out.println(line);
}
}
代码-解决-01
package com.qf.test03;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
//从键盘获取整数
int num = input.nextInt();
System.out.println(num);
Scanner in = new Scanner(System.in);
//从键盘中获取字符串
String line = in.nextLine();
System.out.println(line);
}
}
代码-解决-02
package com.qf.test03;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
//从键盘获取整数
String num = input.nextLine();
System.out.println(Integer.parseInt(num));
//从键盘中获取字符串
String line = input.nextLine();
System.out.println(line);
}
}
四、Arrays
1.此类包含用来操作数组(比如排序和搜索)的各种方法 数组的操作类
2.Arrays 提供的是私有的构造方法 不能实例化对象
3.常用的方法
方法的名称 | 方法的描述 |
---|---|
public static |
将数组转换为集合 |
public static int binarySearch(int[] a, int key) | 查找指定元素在数组中索引值 |
public static int[] copyOf(int[] original, int newLength) | 复制指定的数组 |
public static void fill(int[] a, int val) | 给数组填充固定的值 |
public static void sort(byte[] a) | 数组中元素升序进行排序 |
public static String toString(int[] a) | 返回指定数组内容的字符串表示形式 |
代码
package com.qf.test04;
import java.util.Arrays;
public class Test01 {
public static void main(String[] args) {
//创建一个数组
int[] arrays = {10, -1, 30, 70, 9, 20};
//对数组进行排序
Arrays.sort(arrays);
//打印数组中元素
System.out.println(Arrays.toString(arrays));
//查找数组元素的索引值
int index = Arrays.binarySearch(arrays, 20);
System.out.println(index);
//对数组进行扩容
int[] nums = Arrays.copyOf(arrays, 7);
System.out.println(Arrays.toString(nums));
//给数组填充固定的值
Arrays.fill(nums,200);
System.out.println(Arrays.toString(nums));
}
}
五、BigInteger
1.不可变的任意精度的整数 大数据类型 比基本数据类型的取值范围更加大
2.构造方法
构造方法名称 | 构造方法描述 |
---|---|
public BigInteger(String val) | 将十进制整数的字符串转换为BigInteger |
public BigInteger(String val, int radix) | 将指定进制整数的字符串转换为十进制BigInteger(将radix 转换为十进制) |
代码
package com.qf.test05;
import java.math.BigInteger;
public class Test01 {
public static void main(String[] args) {
BigInteger big = new BigInteger("12345678912345");
System.out.println(big);
BigInteger big01 = new BigInteger("10",8);
System.out.println(big01);
}
}
3.常用的方法
方法的名称 | 方法的描述 |
---|---|
public BigInteger abs() | 取绝对值 |
public BigInteger negate() | 取反 |
public BigInteger add(BigInteger val) | 加法 |
public BigInteger divide(BigInteger val) | 除法 |
public BigInteger subtract(BigInteger val) | 减法 |
public BigInteger multiply(BigInteger val) | 乘法 |
public BigInteger remainder(BigInteger val) | 取余 |
代码
package com.qf.test05;
import java.math.BigInteger;
public class Test02 {
public static void main(String[] args) {
//实例化BigInteger
BigInteger big01 = new BigInteger("10");
BigInteger big02 = new BigInteger("-2");
//取绝对值
System.out.println(big01.abs());
System.out.println(big02.abs());
//取反
System.out.println(big01.negate());
System.out.println(big02.negate());
//加法运算
System.out.println(big01.add(big02));
//减法运算
System.out.println(big01.subtract(big02));
//乘法
System.out.println(big01.multiply(big02));
//除法运算
System.out.println(big01.divide(big02));
//取余数
System.out.println(big01.remainder(big02));
}
}
六、BigDecimal (重点)
1.不可变的、任意精度的有符号十进制数 大数据类型 相对于BigIntege范围大 更加精确
2.构造方法
方法的名称 | 方法的描述 |
---|---|
public BigDecimal(String val) | 将字符串的数值转换为BigDecimal |
public BigDecimal(double val) | 将double类型转换为BigDecimal |
public BigDecimal(BigInteger val) | 将BigInteger类型转换为BigDecimal |
代码
package com.qf.test05;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Test03 {
public static void main(String[] args) {
//将double类型构建成BigDecimal
BigDecimal big01 = new BigDecimal(20.75);
System.out.println(big01);
//将BigInteger 构建成BigDecimal
BigInteger big = new BigInteger("123456789");
BigDecimal big02 = new BigDecimal(big);
System.out.println(big02);
//实例化 BigDecimal
BigDecimal big03 = new BigDecimal("123456789.123456789");
System.out.println(big03);
}
}
3.常用的方法
方法的名称 | 方法的描述 |
---|---|
public BigDecimal abs() | 取绝对值 |
public BigDecimal negate() | 取反 |
public BigDecimal add(BigDecimal val) | 加法 |
public BigDecimal divide(BigDecimal val) | 除法 |
public BigDecimal subtract(BigDecimal val) | 减法 |
public BigDecimal multiply(BigDecimalval) | 乘法 |
public BigDecimal remainder(BigDecimal val) | 取余 |
代码
package com.qf.test05;
import java.math.BigDecimal;
public class Test04 {
public static void main(String[] args) {
//实例化BigDecimal
BigDecimal big01 = new BigDecimal("10");
BigDecimal big02 = new BigDecimal("3");
//加法运算
System.out.println(big01.add(big02));
//减法运算
System.out.println(big01.subtract(big02));
//乘法运算
System.out.println(big01.multiply(big02));
//除法运算
// 设置模式 ROUND_HALF_UP 四色五入 ROUND_UP 向上取整 ROUND_FLOOR 向下取整
System.out.println(big01.divide(big02,2,BigDecimal.ROUND_FLOOR));
//取余
System.out.println(big01.remainder(big02));
}
}
七、异常 (重点)
7.1 简介
1.生活中异常: 上班堵车 上课迟到 生病......
2.开发中异常: 在执行程序的过程中 发生错误或者是执行流程不正确 都称为是异常
3.异常的体系
4.异常的分类
A.编译时异常:编译期间发生的错误
B.运行时异常:运行期间发生的错误
异常类 | 说明 |
---|---|
Throwable | 所有异常的直接父类或者是间接父类,只有是Throwable本身或者是其子类的异常才能进行处理 |
Error | 表示非常严重的错误 一般是由jvm产生的异常 这种异常不用进行处理(可以避免这种异常产生) |
Exception | 表示不是非常严重的异常,这种异常必须进行处理 |
RuntimeException | 运行时异常编译时 |
编译时异常
public class Test01{
public static void main(String[] args){
new SimpleDateFormat("yyyy-MM-dd").parse(""); //此处报错
}
}
运行时异常
public class Test01{
public static void main(String[] args){
int [] nums = null;
System.out.println(nums[0]); //没有报错
}
}
//编译结果报错
/*
Exception in thread "main" java.langNullPointerException
at com.qf.Test01.main(Test01.java06)
*/
7.2 jdk处理异常的方式
A.如果某段代码发生的异常
B.将异常信息封装到 Throwable中
C.将异常信息抛给调用者
D.如果调用者不处理 异常信息就会 一层 一层往上抛
E.如果所有的调用者 都不处理异常 最后由jvm来进行处理
F.在控制台打印堆栈信息(错误信息) 终止程序
代码
package com.qf.test06;
public class Test03 {
public static void main(String[] args) {
show01();
System.out.println("bbbbbbbb");
}
public static void show01(){
System.out.println("aa");
show02();
}
public static void show02(){
System.out.println("aa");
show03();
}
public static void show03(){
System.out.println("aa");
show04();
}
public static void show04(){
//
int [] nums =null;
System.out.println(nums[0]);
}
}
7.3 第一处理异常方式捕获-try-catch
1.语法:
try {
可能发生异常的代码
}catch(异常类型的声明) {
处理异常的方式
}
2.单词翻译 try 尝试 catch 抓取
3.执行的流程:
A.如果没有发生异常 代码正常执行 按照从上到下的顺序执行
B.如果发生了异常
a.如果发生的异常与声明异常可以匹配 那么执行catch中的代码
b.如果发生的异常与声明异常不可以匹配 由jvm来处理异常 终止程序
4.说明:
A.try 大括号中代码是可能发生异常的代码
B.catch 大括号中代码是处理异常的方式 : a.收集异常 b.打印异常信息
7.4 第二种处理异常方式 -try- catch-catch
1.语法:
try {
可能发生异常的代码
}catch(异常类型的声明1 ){
处理方式1
}cathc(异常类型的声明2) {
处理方式2
}
2.执行的流程:
A.如果没有发生异常 代码正常执行 按照从上到下的顺序执行
B.如果发生异常
a.如果发生的异常 依次与catch中声明的异常类型进行匹配 如果可以匹配 执行对应catch中的代码
b.如果发生的异常 依次与catch中声明的异常类型不能进行匹配
那么由jvm来处理异常 a.打印堆栈信息 b.终止程序运行
3.说明:
A.在jdk1.7之后 可以使用|来连接多个异常 连接多个异常的时候不能连接 Exception
B.异常类型声明范围越小越好 可以方便解决错误
代码
package com.qf.test06;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数");
int num1= input.nextInt();
System.out.println("请输入第二个数");
int num2 = input.nextInt();
// //两个数相除
// try {
// int sum = num1 /num2;
// System.out.println(sum);
// int [] nums =null;
// System.out.println(nums[9]);
//
// }catch (ArithmeticException e){
// System.out.println("出现了算术异常");
//
// }catch (IndexOutOfBoundsException e) {
// System.out.println("出现数组下标越界异常");
// }
try {
int sum = num1 /num2;
System.out.println(sum);
int [] nums ={20,30,40};
System.out.println(nums[9]);
} catch (ArithmeticException | IndexOutOfBoundsException e) {
System.out.println("发生了异常");
}
System.out.println("程序结束");
}
}
7.5 try- catch-finally
1.语法:
try{
可能发生异常的代码
}catch(异常类型的声明) {
异常处理的方式
}finally{
最后执行代码
}
2.执行的流程:
A. 如果没有发生异常 先执行try 中的代码 再执行finally中的代码
B.如果发生的异常 依次与catch中声明的异常类型进行匹配
如果可以匹配 执行对应catch中的代码 再执行finally中代码
try ==>catch ==>finally
C.如果发生的异常 依次与catch中声明的异常类型进行匹配
如果不可以匹配 执行finally中代码 再由jvm来处理异常
try ==>finally
3.说明:
A.finally中的代码不管是否发生异常 都会执行
B.如果遇到return 先执行finally中代码 再执行return
C.只有杀死jvm虚拟机 才不会执行finally中的代码
D.finally中一般用于释放资源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)