一. 常用类
1. BigDecimal
BigDecimal类提供了可以对小数精确运算的方法
1.1 对象的创建
BigDecimal b = new BigDecimal("数字");
1.2 运算
方法 | 操作 |
---|---|
add | 加 |
subtract | 减 |
multiply | 乘 |
divide | 除 |
package com.qf;
import java.math.BigDecimal;
public class Demo01 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
double d3 = d1 - d2;
System.out.println(d3); //0.09999999999999998
/*
* 在10进制中 10/3 = 3.3333333333333
*/
BigDecimal b1 = new BigDecimal("1.0");
BigDecimal b2 = new BigDecimal("0.9");
BigDecimal b3 = new BigDecimal("0.5");
//减
BigDecimal r1 = b1.subtract(b2); // b1- b2
System.out.println(r1);
//加
BigDecimal r2 = b1.add(b2);
System.out.println(r2);
//除
BigDecimal r3 = b1.divide(b3);
System.out.println(r3);
//乘
BigDecimal r4 = b1.multiply(b3);
System.out.println(r4);
//由于运算的结果还是BigDecimal对象,所以可以连续运算
BigDecimal r5 = b1.multiply(b3).add(b2).subtract(b1);
System.out.println(r5);
}
}
2. java.util.Date
Date(java.util.Date)表示时间 (日期)
- 表示当前时间
- 操作时间 (大部分被Calendar替代)
- 作为参数的数据类型
package com.qf;
import java.util.Date;
public class Demo02 {
public static void main(String[] args) {
//获取服务器(电脑)当前时间
Date now = new Date();
System.out.println(now); //Thu Apr 14 10:25:21 CST 2022
/*
* getTime() 获取当前时间距离1970-01-01 00:00:00的毫秒数
*/
long time = now.getTime(); //1649903242950
System.out.println(time);
/*
* 获取指定的时间
*
* Date date = new Date(参数为毫秒数);
* 表示距离 1970-01-01 00:00:00 过了 这么多毫秒数的时间
*/
Date date = new Date(time - 1000*60*60*24); //一天前的时间
System.out.println(date);
/*
* 获取一天后的当前时间
* 获取5个小时,30分钟前的时间
*/
}
}
class Student {
private String name;
private Date birthday; //作为属性的数据类型
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
3. Calendar
Calendar (日历)
接收了所有Date关于日期操作的方法
方法名 | |
---|---|
getInstance() | 获取Calendar对象 |
int get(int field) | 获取年月日时分秒 |
set(int field) | 设置年月日时分秒 |
add(int field, int value); | 对时间进行操作 |
getTime() | Calendar转化为Date |
package com.qf;
import java.util.Calendar;
import java.util.Date;
public class Demo03 {
public static void main(String[] args) {
//获取当前时间(日历)
Calendar c = Calendar.getInstance();
System.out.println(c);
/*
*
* get(int field) 获取某个时间只
*
* Calendar.YEAR 年
* Calendar.MONTH 月
* Calendar.DATE 日
* Calendar.HOUR 时
* WEEK_OF_YEAR 本年的第几个星期
* WEEK_OF_MONTH 本月的第几个星期
*
*/
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
int hour = c.get(Calendar.HOUR);
int week = c.get(Calendar.WEEK_OF_YEAR);
int weekOfMonth = c.get(Calendar.WEEK_OF_MONTH);
System.out.println(year);
//Calendar和Date的转化
Date d = c.getTime();
System.out.println(d);
/*
* set(int field, value);
*
*/
//获取本月第一天时间
c.set(Calendar.DATE, 1);
//获取今天12点30分50秒的时间
c = Calendar.getInstance(); //重新赋值当前时间
c.set(Calendar.HOUR, 12);
c.set(Calendar.MINUTE, 30);
c.set(Calendar.SECOND, 50);
System.out.println(c.getTime());
//获取1999年12月20日 19:00:00时间
}
}
package com.qf;
import java.util.Calendar;
public class Demo03_2 {
public static void main(String[] args) {
/*
* add(int field, value);
* 在当前时间的基础上,进行时间时间运算 value的可以为负数
*/
/*
* 获取本月的最后一天
* 1. 获取下个月的第一天
* 2. 往前来一天
*/
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1); //月份加1
c.set(Calendar.DATE, 1); //日期设置为1 下个月第一天
c.add(Calendar.DATE, -1); //往前来一天
System.out.println(c.getTime());
/*
* 获取本星期的最后一天
* 1. 获取下个星期的第一天
* 2. 往前来一天
*/
c = Calendar.getInstance();
c.add(Calendar.WEEK_OF_YEAR, 1);
c.set(Calendar.DAY_OF_WEEK, 1);
c.add(Calendar.DATE, -1);
System.out.println(c.getTime());
/*
* 获取当前时间
* 1. 一个月后的时间
* 2. 一年两个月后的时间
* 3. 三个星期后的时间
* 4. 两周前的时间
* 5. 五周后第一天的时间
* 6. 三月前的那个月的最后一天
* 7. 本月第一天,最后一天
* 8. 本周第一天,最后一天
*/
//获取当前时间距离1970-01-01 00:00:00的毫秒数
long timeInMillis = c.getTimeInMillis();
System.out.println(timeInMillis);
}
}
4. SimpleDateFormat
SimpleDateFormat 是操作日期的工具类
- 把Date对象转化为对应形式的字符串 : df2.format(now);
- 把日期类型的字符串转化为Date对象 : df2.parse(str2);
package com.qf;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo04 {
public static void main(String[] args) throws ParseException {
//日期格式化
Date now = new Date();
//Thu Apr 14 14:21:11 CST 2022
System.out.println(now);
//2022-04-14 14:21:11
// String format = "yyyy-MM-dd HH:mm:ss"; //2022-04-14 14:23:40
// String format = "yyyy/MM/dd"; //2022/04/14
String format = "yyyy-MM-dd";
//创建格式化工具
DateFormat df = new SimpleDateFormat(format);
//对日期进行格式化
String dateStr = df.format(now);
System.out.println(dateStr);
/*
* 把字符串对象,转化为Date对象
*
* 被转化的日期类型的字符串 形式 必须和定义格式化工具是,数据形式一致
*/
String str = "2022-09-08";
Date date = df.parse(str);
System.out.println(date);
/*
* 把当前日期转化为 2022年3月17日 12时10分5秒
* 2022年6月6日 6时6分6秒 转化为Date对象
*/
String format2 = "yyyy年MM月dd日 HH时mm分ss秒";
DateFormat df2 = new SimpleDateFormat(format2);
String dateStr2 = df2.format(now);
System.out.println(dateStr2);
String str2 = "2022年6月6日 6时6分6秒";
Date date2 = df2.parse(str2);
System.out.println(date2);
}
}
日期格式参数:
Letter | Date or Time Component | Presentation | Examples |
---|---|---|---|
G | Era designator | Text | AD |
y | Year | Year | 1996 ; 96 |
Y | Week year | Year | 2009 ; 09 |
M | Month in year (context sensitive) | Month | July ; Jul ; 07 |
L | Month in year (standalone form) | Month | July ; Jul ; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday ; Tue |
u | Day number of week (1 = Monday, …, 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
X | Time zone | ISO 8601 time zone | -08 ; -0800 ; -08:00 |
5. System
java系统对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1LgwLP4-1650638240039)(image-20220414151521118.png)]
package com.qf;
import java.util.Arrays;
import java.util.Date;
public class Demo05 {
public static void main(String[] args) {
/*
* 拷贝数组
*/
int[] arr = {1,2,3,4};
// {0,1,2,3,0,0,0,0}
int[] newArr = new int[arr.length*2];
System.arraycopy(arr, 0, newArr, 1, 3);
System.out.println(Arrays.toString(newArr));
/*
* 获取当前系统的毫秒数
* 和Date对象getTime()方法作用一样
*/
long l1 = System.currentTimeMillis();
long l2 = new Date().getTime(); //l1 == l2
System.out.println(l1);
System.out.println(l2);
//立即回收垃圾对象
System.gc();
//退出jvm 程序立马结束
System.exit(1);
System.out.println("程序结束----");
}
}
二. 集合
1. 前言
因为数组无法自动扩容,java提供一个可以保存多个数据,且可以自动扩容的工具,这种工具就叫做集合
– java把集合定义成集合
集合能够干什么,提供的功能
– 集合有各种各样的实现
实现集合定义的功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZDpLmd1-1650638240041)(image-20220414154300377.png)]
2.Collection
Collection是所有集合的父口,定义了集合这种工具应该有的功能。
public interface Collection<T> extends Iterable<E> {
//集合中有多少个元素
int size();
//是否为空,是否没有元素
boolean isEmpty();
//是否包含某个值
boolean contains(Object o);
//转化为数组
Object[] toArray();
//转化为指定数据类型的数组
<T> T[] toArray(T[] a);
//添加元素
boolean add(T e);
//删除元素
boolean remove(Object o);
//是否包含另外一个集合
boolean containsAll(Collection<?> c);
//清空
void clear();
}
package com.qf;
import java.util.ArrayList;
import java.util.Collection;
public class Demo02 {
public static void main(String[] args) {
Collection c = new ArrayList();
//添加元素
c.add(1);
c.add(1.1);
c.add("heheda");
c.add(true);
c.add('y');
int size = c.size();
System.out.println(size);
boolean empty = c.isEmpty();
System.out.println(empty);
//删除
c.remove(1);
size = c.size();
System.out.println(size);
/*
* 遍历集合
*
* 增强行for循环:一定遍历的是集合或者数组
* for(接收变量的数据 变量 : 集合/数组) {
* //使用变量操作每次接收的元素 逻辑代码
* }
*
* 1. 把c集合中第1个元素赋值给obj,执行for循环 逻辑代码
* 2. 把c集合中第2个元素赋值给obj,执行for循环 逻辑代码
* 3. 把c集合中第3个元素赋值给obj,执行for循环 逻辑代码
* 4. 把c集合中第....个元素赋值给obj,执行for循环 逻辑代码
* 5. 一直到最后一个元素赋值给obj,for循环结束
*/
for(Object obj : c) {
System.out.println(obj);
}
}
}
3. 泛型
泛型表示一种参数化的数据类型
- 数据类型必须是引用类型,不能为基本类型
- 可以定义集合保存的数据类型
- 使用泛型接收遍历的结果
package com.qf;
public class Demo03 {
public static void main(String[] args) {
/*
Test test = new Test();
Stu s = new Stu();
// test.stu = s;
Person p = new Person();
test.person = p;
*/
Test<Stu> test01 = new Test<Stu>();
Stu s = new Stu();
test01.t = s;
test01.show();
Test<Person> test02 = new Test<Person>();
Person p = new Person();
test02.t = p;
test02.show();
Test02 t01 = new Test02();
Stu show = t01.show(s);
Person pp = t01.show(p);
}
}
/*
* T:
* 1. 相当于是一个参数
* 2. 参数表示的一种数据类型
*/
class Test<T> {
/*
Stu stu;
public void show() {
System.out.println(stu);
}
Person person;
public void show() {
System.out.println(person);
}
*/
T t;
public void show() {
System.out.println(t);
}
}
class Stu {
}
class Person {
}
class Test02 {
public <T> T show(T t) {
return t;
}
}
package com.qf;
import java.util.ArrayList;
import java.util.Collection;
public class Demo03_2 {
public static void main(String[] args) {
//定义只保存字符串的集合
Collection<String> c = new ArrayList<String>();
c.add("aaa");
c.add("bbb");
//定义泛型后,可以使用该泛型的变量接收集合中的元素
for(String s : c) {
System.out.println(s);
}
/*
* 定义只能保存整数的集合
* 不能定义基本类型,只能定义基本类型的包装类
* -- 可以自动拆装箱
*/
Collection<Integer> c2 = new ArrayList<Integer>();
c2.add(1);
c2.add(2);
c2.add(3);
for(int i : c2) {
System.out.println(i);
}
//创建一个保存Stu对象的集合
Collection<Stu> c3 = new ArrayList<Stu>();
c3.add(new Stu());
c3.add(new Stu());
for(Stu s : c3) {
System.out.println(s);
}
}
}
4. List,Set
List,Set都是Collection子接口
- List : 有序可重复
- 有序,每个元素都要一个下标
- ArraysList,LinkedList,Vector
- Set : 无序不可重复
- 有序,每个元素没有下标(也是有顺序的)
- 不可重复
- HashSet,Hashtable, LinkedHashSet