day14.常用 API
java
课前回顾:
1.Object:所有类的父类
a.如果直接输出对象名,想输出的是对象内容,重写toString方法
b.如果比较对象,比较的是对象的内容,重写equals方法
2.String
a.概述:代表字符串
b.特点:
凡是带双引号的都是String的对象
字符串创建之后,值不能改变
字符串创建之后可以共享
c.构造:
String()
String(String s)
String(char[] chars)
String(byte[] bytes)
String(char[] chars,int offset,int count)
String(byte[] bytes,int offset,int length)
简化:String 变量名 = 值
d.比较功能:
boolean equals(Object obj)->比较字符串内容
boolean equalsIgnorecase(String s) -> 比较字符串内容,忽略大小写
e.获取功能:
int length()获取字符串长度
String concat(String s) 拼接字符串
char charAt(int index) 根据索引获取字符
int indexOf(String s) 获取指定的串儿在老串儿中第一次出现的索引位置
String substring(int beginIndex) 从指定索引开始截取字符串到最后
String substring(int beginIndex,int endIndex)从beginIndex,到endIndex截取字符串,含头不含尾
f.转换功能:
String replace(s1,s2) 将s1替换成s2
byte[] getBytes()将字符串转成字节数组
byte[] getBytes(String charsetname) 按照指定编码规则将字符串转成byte数组
char[] toCharArray()将字符串转成char数组
g.切割功能:
String[] split(String regex) 按照指定规则分割字符串
h.其他功能:
boolean contains(String s)判断老串儿中是否包含指定的串儿
boolean endsWith(String s)判断是否以指定的串儿结尾
boolean startsWith(String s)判断是否以指定的串儿开头
String toLowerCase()字母转成小写
String toUpperCase()字母转成大写
String trim()去掉两端空格
今日重点:
1.会使用BigInteger,BigDecimal
2.会使用Date对象,SimpleDateFormat对象
3.会使用jdk8新日期类中LocalDate,LocalDateTime对象
4.会使用System类中的arrayCopy方法
5.会使用Arrays类中的所有方法
6.知道基本类型对应的包装类是啥
7.会手动拆箱,装箱
第零章.StringBuilder
1.StringBuilder 的使用
java
1.StringBuiler()
2.StringBuilder(String str)
java
public class Demo01StringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb);
System.out.println("========================");
StringBuilder sb2 = new StringBuilder("abc");
System.out.println("sb2 = " + sb2);
}
}
2.StringBuilder 的常用方法
java
1.StringBuilder append(任意类型) -> 拼接字符串,返回的是StringBuilder自己
2.StringBuilder reverse() -> 字符串翻转,返回的是StringBuilder自己
3.String toString() -> 将StringBuilder转成String -> 将来用StringBuilder拼接之后,需要调用String中的方法去处理拼接好的字符串,所以我们需要将StringBuilder转成String
java
public class Demo02StringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = sb.append("张无忌");
System.out.println(sb1);
System.out.println(sb);
System.out.println(sb==sb1);
System.out.println("========================");
/*
链式调用
调用某个方法,我们就可以根据这个方法的返回值类型,继续点这个方法返回类型中的其他方法
*/
sb.append("张三丰").append("张翠山").append("殷素素").append("周芷若");
System.out.println(sb);
/*
StringBuilder reverse() -> 字符串翻转
*/
sb.reverse();
System.out.println(sb);
/*
String toString() -> 将StringBuilder转成String
*/
String str = sb.toString();
System.out.println(str);
}
}
java
练习: 键盘录入一个字符串,判断这个字符串是否是"回文内容"
abcba
上海自来水来自海上
山西运煤车煤运西山
蝶恋花香花恋蝶
鱼游水美水游鱼
java
public class Demo03StringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
String data = sc.next();
sb.append(data);
sb.reverse();
String str = sb.toString();
if (data.equals(str)){
System.out.println("回文");
}else {
System.out.println("不是回文");
}
}
}
String,StringBuilder 以及 StringBuffer 区别:
1.相同点:
三者都可以拼接字符串
2.不同点:
a.String 每拼接一次,都会产生一个新的 String 对象,占用内存空间,效率低
b.StringBuilder:拼接的过程中不会随意产生新对象.线程不安全,效率高
c.StringBuffer:拼接的过程中不会随意产生新对象.线程安全,效率低
3.从拼接效率上来看: StringBuilder>StringBuffer>String
第一章.Math 类
1.Math 类介绍
java
1.概述:数学工具类
2.作用:做数学运算
3.特点:
a.构造私有
b.方法都是静态的
4.使用:
类名直接调用
2.Math 类方法
java
static int abs(int a) -> 求参数的绝对值
static double ceil(double a) -> 向上取整
static double floor(double a) ->向下取整
static long round(double a) -> 四舍五入
static int max(int a, int b) ->求两个数之间的较大值
static int min(int a, int b) ->求两个数之间的较小值
java
public class Demo01Math {
public static void main(String[] args) {
//static int abs(int a) -> 求参数的绝对值
System.out.println(Math.abs(-100));
//static double ceil(double a) -> 向上取整
System.out.println(Math.ceil(3.14));
//static double floor(double a) ->向下取整
System.out.println(Math.floor(-3.14));
//static long round(double a) -> 四舍五入
System.out.println(Math.round(2.4));
//static int max(int a, int b) ->求两个数之间的较大值
System.out.println(Math.max(3,5));
//System.out.println(Math.max(3, Math.max(5,10)));
//static int min(int a, int b) ->求两个数之间的较小值
System.out.println(Math.min(10,20));
}
}
第二章.BigInteger
1.BigInteger 介绍
java
1.问题:将来我们可能会遇到超大整数,大到连long型都接收不了了,所以我们将这个整数可以称之为是一个"对象"
2.作用:
处理超大整数
2.BigInteger 使用
java
1.构造:
BigInteger(String val) -> 字符串内容必须是数字格式
2.方法:
BigInteger add(BigInteger val) -> 加法
BigInteger subtract(BigInteger val) ->减法
BigInteger multiply(BigInteger val) -> 乘法
BigInteger divide(BigInteger val) -> 除法
java
public class Demo01BigInteger {
public static void main(String[] args) {
BigInteger b1 = new BigInteger("12121212121212121212121212121212121212121212121");
BigInteger b2 = new BigInteger("12121212121212121212121212121212121212121212121");
BigInteger add = b1.add(b2);
System.out.println(add);
BigInteger subtract = b1.subtract(b2);
System.out.println("subtract = " + subtract);
BigInteger multiply = b1.multiply(b2);
System.out.println("multiply = " + multiply);
BigInteger divide = b1.divide(b2);
System.out.println("divide = " + divide);
}
}
javaint intValue() long longValue()
javaBigInteger可以操作的最大整数42亿的21亿次方,内存根本扛不住这么大的数,所以我们认为BigInteger是无限大的
第三章.BigDecimal 类
1.BigDecimal 介绍
java
1.问题:float和double直接参与运算,会有精度损失问题
2.可以使用BigDecimal去解决
3.作用:解决float和double直接参与运算,会有精度损失的问题
2.BigDecimal 使用
java
1.构造:
BigDecimal(String val)
2.方法:
static BigDecimal valueOf(double val)
BigDecimal add(BigDecimal val) -> 加法
BigDecimal subtract(BigDecimal val) ->减法
BigDecimal multiply(BigDecimal val) -> 乘法
BigDecimal divide(BigDecimal val) -> 除法 -> 如果除不尽,会报算数异常ArithmeticException
java
public class Demo03BigDecimal {
public static void main(String[] args) {
BigDecimal b1 = BigDecimal.valueOf(3.55);
BigDecimal b2 = BigDecimal.valueOf(2.12);
BigDecimal add = b1.add(b2);
System.out.println("add = " + add);
BigDecimal subtract = b1.subtract(b2);
System.out.println("subtract = " + subtract);
BigDecimal multiply = b1.multiply(b2);
System.out.println("multiply = " + multiply);
System.out.println("==========================");
//BigDecimal divide = b1.divide(b2);
//System.out.println("divide = " + divide);
}
}
java
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
divisor:除号后面的数
scale:保留几位小数
roundingMode:取舍方式 -> 传递的是BigDecimal中的静态变量
static int ROUND_UP -> 向上加1
static int ROUND_DOWN -> 直接舍去
static int ROUND_HALF_UP -> 四舍五入
java
public class Demo03BigDecimal {
public static void main(String[] args) {
BigDecimal b1 = BigDecimal.valueOf(3.55);
BigDecimal b2 = BigDecimal.valueOf(2.12);
BigDecimal add = b1.add(b2);
System.out.println("add = " + add);
BigDecimal subtract = b1.subtract(b2);
System.out.println("subtract = " + subtract);
BigDecimal multiply = b1.multiply(b2);
System.out.println("multiply = " + multiply);
System.out.println("==========================");
//BigDecimal divide = b1.divide(b2);
//System.out.println("divide = " + divide);
/*
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
divisor:除号后面的数
scale:保留几位小数
roundingMode:取舍方式
*/
BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_DOWN);
System.out.println("divide = " + divide);
}
}
方法上一旦带@Deprecated(since="9")注解,证明此方法是过时方法
3.BigDecimal 除法过时方法解决
java
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
divisor:除号后面的数
scale:保留几位小数
roundingMode:取舍方式
RoundingMode-> 是一个枚举类
UP:向上加1
DOWN:直接舍去
HALF_UP:四舍五入
java
public class Demo03BigDecimal {
public static void main(String[] args) {
BigDecimal b1 = BigDecimal.valueOf(3.55);
BigDecimal b2 = BigDecimal.valueOf(2.12);
BigDecimal add = b1.add(b2);
System.out.println("add = " + add);
BigDecimal subtract = b1.subtract(b2);
System.out.println("subtract = " + subtract);
BigDecimal multiply = b1.multiply(b2);
System.out.println("multiply = " + multiply);
System.out.println("==========================");
//BigDecimal divide = b1.divide(b2);
//System.out.println("divide = " + divide);
/*
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
divisor:除号后面的数
scale:保留几位小数
roundingMode:取舍方式
*/
//BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_DOWN);
//System.out.println("divide = " + divide);
System.out.println("==================================");
BigDecimal divide1 = b1.divide(b2, 2, RoundingMode.DOWN);
System.out.println("divide1 = " + divide1);
}
}
第四章.Date 日期类
1.Date 类的介绍
java
1.概述:表示特定的瞬间,精确到毫秒
2.地理常识:
a.北京经纬度:
东经:116.20
北纬:39.56
b.北京时区: 东8区
3.时间原点:1970年1月1日 0时0分0秒 -> 0度经线 -> 跟咱们东八区差8个小时
4.1秒 = 1000毫秒
2.Date 类的使用
java
1.构造:
Date()-> 根据无参构造创建对象,代表当前系统时间,从时间原点算的
Date(long time) -> 根据指定的毫秒值创建对象,从时间原点算的
java
public class Demo01Date {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println("date1 = " + date1);
System.out.println("====================");
Date date2 = new Date(1000L);
System.out.println("date2 = " + date2);
}
}
3.Date 类的常用方法
java
1.void setTime(long time) -> 设置时间,传递毫秒值
2.long getTime() -> 获取时间对应的毫秒值
java
public class Demo02Date {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.getTime());
date1.setTime(1000L);
System.out.println(date1);
}
}
第五章.Calendar 日历类
1.Calendar 介绍
java
1.概述:日历类 -> 抽象类
2.作用:主要是操作时间字段的(年月日时分秒都叫时间字段)
3.获取:
static Calendar getInstance()
4.注意:
Calendar中的月份从0开始的,所以我们获取时需要+1
5.方法:
int get(int field) ->返回给定日历字段的值
void set(int field, int value) :将给定的日历字段设置为指定的值
void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或者减去指定的时间量
Date getTime():将Calendar转成Date对象
field:代表的是字段,这些字段都是Calendar中的静态的成员变量,所以我们指定字段时,需要类名直接调用
java
public class Demo03Calendar {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//int get(int field) ->返回给定日历字段的值
int year = calendar.get(Calendar.YEAR);
System.out.println("year = " + year);
//void set(int field, int value) :将给定的日历字段设置为指定的值
calendar.set(Calendar.YEAR, 2000);
int year1 = calendar.get(Calendar.YEAR);
System.out.println("year1 = " + year1);
//void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或者减去指定的时间量
calendar.add(Calendar.YEAR, -1);
int year2 = calendar.get(Calendar.YEAR);
System.out.println("year2 = " + year2);
//Date getTime():将Calendar转成Date对象
Date date = calendar.getTime();
System.out.println("date = " + date);
}
}

扩展方法:
javavoid set(int year, int month, int date) -> 设置年月日 需求:键盘录入一个年份,判断是否为闰年或者平年
javapublic class Demo04Calendar { public static void main(String[] args) { //1.键盘录入一个整数,代表年份 Scanner sc = new Scanner(System.in); int year = sc.nextInt(); //2.获取Calendar对象 Calendar calendar = Calendar.getInstance(); /* 3.设置年月日 set(year,2,1) 设置的是国外的,国外的2月1日,相当于咱们得3月1日 */ calendar.set(year,2,1); calendar.add(Calendar.DATE,-1); int day = calendar.get(Calendar.DATE); if (day==29){ System.out.println(year+"是闰年"); }else { System.out.println(year+"不是闰年"); } } }
第六章.SimpleDateFormat 日期格式化类
1.SimpleDateFormat 介绍
java
1.概述:SimpleDateFormat extends DateFormat
2.作用:
a.将Date对象按照指定的格式格式化成String
b.将符合日期格式的String转成Date对象
3.构造:
SimpleDateFormat(String pattern) -> 按照指定的日期格式创建SimpleDateFormat对象
4.方法:
a.String format(Date date)-> 将Date对象按照指定格式转成String
b.Date parse(String time) -> 按照符合日期格式的字符串转成Date对象
时间字母表示 | 说明 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
字母不能改变,但是中间的连接符可以改变
java
public class Demo05DateFormat {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println("date = " + date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(date);
System.out.println("time = " + time);
System.out.println("=========================");
String time2 = "2000-10-10 10:10:10";
Date date1 = sdf.parse(time2);
System.out.println("date1 = " + date1);
}
}
第七章.JDK8 新日期类
1. LocalDate 本地日期
1.1.获取 LocalDate 对象
java
1.概述:LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日
2.作用:操作年月日
3.获取:
a.static LocalDate now() 获取当前系统时间
b.static LocalDate of(int year, int month, int dayOfMonth) 设置年月日
java
public class Demo06LocalDate {
public static void main(String[] args) {
LocalDate local1 = LocalDate.now();
System.out.println("local1 = " + local1);
System.out.println("======================");
LocalDate local2 = LocalDate.of(2000, 10, 10);
System.out.println("local2 = " + local2);
}
}
1.2.LocalDateTime 对象
java
1.概述:LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒 2.作用:操作精确时间
3.获取:
a.static LocalDateTime now()-> 获取当前系统时间
b.static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)-> 设置年月日时分秒
java
public class Demo07LocalDateTime {
public static void main(String[] args) {
LocalDateTime local1 = LocalDateTime.now();
System.out.println("local1 = " + local1);
System.out.println("=======================");
LocalDateTime local2 = LocalDateTime.of(2000, 10, 10, 10, 10, 10);
System.out.println("local2 = " + local2);
}
}
1.3.获取日期字段的方法 : 名字是 get 开头
java
int getYear()->获取年份
int getMonthValue()->获取月份
int getDayOfMonth()->获取月中的第几天
java
public class Demo08LocalDate {
public static void main(String[] args) {
LocalDate local1 = LocalDate.of(2000, 10, 10);
System.out.println(local1.getYear());
System.out.println(local1.getMonthValue());
System.out.println(local1.getDayOfMonth());
}
}
1.4.设置日期字段的方法 : 名字是 with 开头
java
LocalDate withYear(int year):设置年份
LocalDate withMonth(int month):设置月份
LocalDate withDayOfMonth(int day):设置月中的天数
java
public class Demo09LocalDate {
public static void main(String[] args) {
LocalDate local1 = LocalDate.now();
//System.out.println(local1);
//LocalDate localDate1 = local1.withYear(2000);
//System.out.println("localDate1 = " + localDate1);
//LocalDate localDate2 = localDate1.withMonth(10);
//System.out.println("localDate2 = " + localDate2);
//LocalDate localDate3 = localDate2.withDayOfMonth(10);
//System.out.println("localDate3 = " + localDate3);
LocalDate localDate = local1.withYear(2000).withMonth(10).withDayOfMonth(10);
System.out.println("localDate = " + localDate);
}
}
1.5.日期字段偏移
java
设置日期字段的偏移量,方法名plus开头,向后偏移
设置日期字段的偏移量,方法名minus开头,向前偏移
java
public class Demo10LocalDate {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
//LocalDate localDate1 = localDate.plusYears(-1);
//int year = localDate1.getYear();
//System.out.println("year = " + year);
LocalDate localDate1 = localDate.minusYears(1);
System.out.println(localDate1.getYear());
}
}
2.Period 和 Duration 类
2.1 Period 计算日期之间的偏差
java
1.作用:计算年月日时间偏差
2.方法:
static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值
getYears()->获取相差的年
getMonths()->获取相差的月
getDays()->获取相差的天
java
public class Demo11Period {
public static void main(String[] args) {
LocalDate local1 = LocalDate.of(2023, 10, 10);
LocalDate local2 = LocalDate.of(2024, 11, 9);
Period period = Period.between(local1, local2);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
}
}
2.2 Duration 计算时间之间的偏差
java
1.作用:计算精确时间
2.方法:
static Duration between(Temporal startInclusive, Temporal endExclusive) -> 计算时间差
Temporal是一个接口,常用的实现类:LocalDate,LocalDateTime ,但是Duration是计算精确时间偏差的,所以这里传递能操作时分秒的LocalDateTime对象
3.利用Duration获取相差的时分秒 -> to开头
toDays() :获取相差天数
toHours(): 获取相差小时
toMinutes():获取相差分钟
toMillis():获取相差秒(毫秒)
java
public class Demo12Duration {
public static void main(String[] args) {
LocalDateTime local1 = LocalDateTime.of(2023, 10, 10, 10, 10, 10);
LocalDateTime local2 = LocalDateTime.of(2024, 11, 11, 11, 11, 11);
Duration duration = Duration.between(local1, local2);
//toDays() :获取相差天数
System.out.println(duration.toDays());
//toHours(): 获取相差小时
System.out.println(duration.toHours());
//toMinutes():获取相差分钟
System.out.println(duration.toMinutes());
//toMillis():获取相差秒(毫秒)
System.out.println(duration.toMillis());
}
}
1.计算年月日时间偏差用 Period
2.计算精确时间偏差用 Duration
3.DateTimeFormatter 日期格式化类
java
1.获取:
static DateTimeFormatter ofPattern(String pattern) -> 获取对象,指定格式
2.方法:
a.String format(TemporalAccessor temporal)-> 将日期对象按照指定的规则转成String
TemporalAccessor:是一个接口,实现类有LocalDate以及LocalDateTime
b.TemporalAccessor parse(CharSequence text)-> 将符合规则的字符串转成日期对象

java
public class Demo13DateTimeFormatter {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.now();
String format = dtf.format(localDateTime);
System.out.println(format);
System.out.println("=====================");
String time = "2000-10-10 10:10:10";
TemporalAccessor temporalAccessor = dtf.parse(time);
System.out.println(temporalAccessor);
LocalDateTime localDateTime1 = LocalDateTime.from(temporalAccessor);
System.out.println("localDateTime1 = " + localDateTime1);
//LocalDateTime localDateTime1 = LocalDateTime.parse(time, dtf);
//System.out.println("localDateTime1 = " + localDateTime1);
}
}
第八章.System 类
java
1.概述:系统相关工具类
2.特点:
a.构造私有
b.方法静态
3.使用:
类名直接调用
方法 | 说明 |
---|---|
static long currentTimeMillis() | 获取当前系统时间毫秒值 |
static void exit(int status) | 退出当前正在执行的 jvm |
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | 数组复制 src:源数组 srcPos:从源数组的哪个索引开始复制 dest:目标数组 destPos:从目标数组的哪个索引开始粘贴 length:复制多少个 |
java
public class Demo01System {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
if (i==5){
//退出正在执行的jvm
//System.exit(0);
}
System.out.println("哈哈哈");
}
long end = System.currentTimeMillis();
System.out.println(end-start);
System.out.println("============================");
int[] arr1 = {1,2,3,4,5,6};
int[] arr2 = new int[10];
System.arraycopy(arr1,0,arr2,0,2);
System.out.println(Arrays.toString(arr2));
}
}
第九章.Arrays 数组工具类
java
1.概述:数组工具类
2.作用:操作数组
3.特点:
a.构造私有
b.方法静态
4.使用:
类名直接调用
方法 | 说明 |
---|---|
static void sort(int[] a) | 数组升序 |
static String toString(int[] a) | 将数组元素打印出来[元素 1,元素 2...] |
static int binarySearch(int[] a, int key) | 二分查找,前提数组是升序的 |
static int[] copyOf(int[] original, int newLength) | 数组扩容,返回新数组 |
java
public class Demo02Arrays {
public static void main(String[] args) {
int[] arr = {5,4,3,2,1};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println("========================");
int[] arr2 = {1,2,3,4,5,6,7,8,9};
int index = Arrays.binarySearch(arr2, 5);
System.out.println("index = " + index);
System.out.println("==========================");
int[] arr3 = {1,2,3,4,5};
int[] newArr = Arrays.copyOf(arr3, 10);
System.out.println(Arrays.toString(newArr));
}
}
