JAVA常用类(三)
文章目录
四. BigDecimal类
1. 思考
以下程序输出结果为?
public class Application {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);
}
}
---------------------结果------------------
0.09999999999999998
这是因为float类型和double类型存放的是近似值,当需要精度非常高的时候,就需要借助BigDecimal类了
- 位置:java.math包中
- 作用:精确计算浮点数。
- 创建方式:BigDecimal bd=new BigDecimal(“1.0”);
2. 常用方法
add()加方法
BigDec imal add (BigDecimal bd)
public class Application {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//加法
System.out.println(bd1.add(bd2));
}
}
-----------------结果------------------
1.9
subtract()减方法
BigDecimal subtract (Bi gDecimal bd)
public class Application {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//减法
System.out.println(bd1.subtract(bd2));
}
}
-----------------结果------------------
0.1
multiply()乘方法
BigDecimal multiply (BigDecimal bd)
public class Application {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//乘法
System.out.println(bd1.multiply(bd2));
}
}
-----------------结果------------------
0.90
divide()除方法
BigDec imal divide (BigDecimal bd)
divide (BigDecimal bd, int scal, RoundingMode mode)
- 参数scal :指定精确到小数点后几位。
- 参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式,取值为BigDecimal. ROUND_ HALF_ UP。
public class Application {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//除法
System.out.println(new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9")));
//但是,如果除不尽的话会报错 所以,除法可以选择保留几位小数和使用那种取余方法
//ROUND_HALF_UP 四舍五入
System.out.println(new BigDecimal("10")
.divide(new BigDecimal("3"), 3, BigDecimal.ROUND_HALF_UP));
}
}
-----------------结果------------------
1
3.333
五. Date类(认识,大多已被取代)
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
- 时间单位
1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
import java.util.Date;
public class Application {
public static void main(String[] args) {
//创建一个Date对象
Date date1= new Date();
System.out.println(date1);
System.out.println(date1.toLocaleString());
//一天前的时间
Date date2 = new Date(date1.getTime()-(60*60*24*1000));
System.out.println(date2.toLocaleString());
//after before方法
System.out.println(date1.after(date2));
System.out.println(date1.before(date2));
//compareTo 比较
System.out.println(date1.compareTo(date2));
//equals 比较是否相等
System.out.println(date1.equals(date2));
}
}
-----------------结果------------------
Fri Mar 19 15:03:14 CST 2021
2021-3-19 15:03:14
2021-3-18 15:03:14
true
false
1
六. Calendar类
1. 说明:
-
Calendar提供了获取或设置各种日历字段的方法。
-
构造方法
protected Calendar() : 由于修饰符是protected,所以无法直接创建该对象。
方法名 | 说明 |
---|---|
static Calendar getInstance() | 使用默认时区和区域获取日历 |
void set(int year,int month,int date,int hourofday,int minute,int second) | 设置日历的年、月、日、时、分、秒。 |
int get(int field) | 返回给定日历字段的值。字段比如年、月、日等 |
void setTime(Date date) | 用给定的Date设置此日历的时间。Date-Calendar |
Date getTime() | 返回一个Date表示此日历的时间。Calendar-Date |
void add(int field,int amount) | 按照日历的规则,给指定字段添加或减少时间量 |
long getTimelnMillies() | 毫秒为单位返回该日历的时间值 |
2. 常用方法
getInstance()方法
使用默认时区和区域获取日历
import java.util.Calendar;
public class Application {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println("日期时间\t"+calendar.getTime().toLocaleString());
System.out.println("毫秒数\t"+calendar.getTimeInMillis());
}
}
-----------------结果------------------
日期时间 2021-3-20 12:32:03
毫秒数 1616214723113
get()方法
返回给定日历字段的值。字段比如年、月、日等
import java.util.Calendar;
public class Application {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("日期时间\t"+calendar.getTime().toLocaleString());
//年
System.out.println("年\t"+calendar.getWeekYear());
System.out.println("年\t"+calendar.get(Calendar.YEAR));
System.out.println("年\t"+calendar.get(1));
//月 设计是从0开始到11结束,0->1月 11->12月
System.out.println("月\t"+(calendar.get(Calendar.MONDAY)+1));
System.out.println("月\t"+(calendar.get(2)+1));
//日
System.out.println("日\t"+calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("日\t"+calendar.get(Calendar.DATE));
//时间
System.out.println("小时\t"+calendar.get(Calendar.HOUR)); //12小时制
System.out.println("小时\t"+calendar.get(10)); //12小时制
System.out.println("小时\t"+calendar.get(Calendar.HOUR_OF_DAY)); //24小时制
//分钟
System.out.println("分钟\t"+calendar.get(Calendar.MINUTE));
System.out.println("分钟\t"+calendar.get(12));
//秒
System.out.println("秒\t"+calendar.get(Calendar.SECOND));
System.out.println("秒\t"+calendar.get(13));
}
}
-----------------结果------------------
日期时间 2021-3-20 12:32:03
年 2021
年 2021
年 2021
月 3
月 3
日 20
日 20
小时 0
小时 0
小时 12
分钟 32
分钟 32
秒 3
秒 3
set()方法
用给定的Date设置此日历的时间
import java.util.Calendar;
public class Application {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("日期时间\t"+calendar.getTime().toLocaleString());
//修改时间
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.DAY_OF_MONTH,5);//修改日期
System.out.println("修改后时间\t"+calendar1.getTime().toLocaleString());
}
}
-----------------结果------------------
日期时间 2021-3-20 12:32:03
修改后时间 2021-3-5 12:32:03
add()方法
按照日历的规则,给指定字段添加或减少时间量
import java.util.Calendar;
public class Application {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("日期时间\t"+calendar.getTime().toLocaleString());
//add方法修改时间
calendar1.add(Calendar.HOUR,1);
System.out.println("add+1小时后\t"+calendar1.getTime().toLocaleString());
calendar1.add(Calendar.HOUR,-5);
System.out.println("add-5小时后\t"+calendar1.getTime().toLocaleString());
}
}
-----------------结果------------------
日期时间 2021-3-20 12:32:03
add+1小时后 2021-3-5 13:32:03
add-5小时后 2021-3-5 8:32:03
getActualMaximum()方法
获取某一最大值 月/日
import java.util.Calendar;
public class Application {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("日期时间\t"+calendar.getTime().toLocaleString());
//获取某一最大值 月/日
int max=calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
int min=calendar1.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println("当前月最小日期"+min+"\t当前月最大日期"+max);
}
}
-----------------结果------------------
日期时间 2021-3-20 12:32:03
当前月最小日期1 当前月最大日期31
七. SimpleDateFormat类
- SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。
- 进行格式化(日期->文本)、解析(文本->日期)。
常用的时间模式字母:
字母 | 日期或时间 | 示例 |
---|---|---|
y | 年 | 2019 |
M | 年中月份 | 08 |
d | 月中天数 | 10 |
H | 1天中小时数(0~23) | 22 |
m | 分钟 | 16 |
s | 秒 | 59 |
S | 毫秒 | 367 |
用法:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Application {
public static void main(String[] args) throws Exception{
//创建simpleDataFormat
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd");
//创建Date
Date date = new Date();
//格式化Date
System.out.println(simpleDateFormat1.format(date));
//解析 字符串变日期
System.out.println(simpleDateFormat2.parse("2020/10/15").toLocaleString());
}
}
-----------------结果--------------------
2021/03/20 15:42:47
2020-10-15 0:00:00
八. System类
- System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。
方法名 | 说明 |
---|---|
static void arraycopy(…) | 复制数组 |
static long currentTimeMillis(); | 获取当前系统时间,返回的是毫秒值 |
static void gc(); | 建议JVM赶快启动垃圾回收器回收垃圾 |
static void exit(int status); | 退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm。 |
1. arraycopy()方法
复制数组,Arrays.copyof是调用的arraycopy()方法
public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
src:原数组 srcPos:从那个位置开始 dest:目标数组 destPos:目标数组位置 length:复制的长度
public class Application {
public static void main(String[] args) throws Exception{
//arraycopy
int[] arr={1,2,3,4,5,6,7,8,9};
int[] arr1=new int[8];
System.arraycopy(arr,1,arr1,0,5);
for (int i : arr1) {
System.out.print(i+"\t");
}
}
}
-----------------结果--------------------
2 3 4 5 6 0 0 0
2. currentTimeMillis()方法
获取当前系统时间,返回的是毫秒值
public class Application {
public static void main(String[] args) throws Exception{
long start=System.currentTimeMillis();
for (int i = -999999999; i < 999999999; i++) {
for (int j= -999999999; j < 999999999; j++) {
int result=i+j;
}
}
long end=System.currentTimeMillis();
System.out.println("用时"+(end-start));
}
}
-----------------结果--------------------
用时7
3. gc()方法
建议JVM赶快启动垃圾回收器回收垃圾
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//重写finalize()方法
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"对象被回收");
}
}
public class TeseStudent {
public static void main(String[] args) {
new Student("aaa", 20);
new Student("bbb", 19);
new Student("ccc", 18);
//回收垃圾
System.out.println("回收垃圾");
System.gc();
}
}
----------------结果-------------------
回收垃圾
ccc对象被回收
bbb对象被回收
aaa对象被回收
4. exit()方法
退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm。
public class Application {
public static void main(String[] args) {
System.exit(1);
System.out.println("程序结束");//不会执行
}
}
进程已结束,退出代码为 1