day14
-
Math类
Math.来自于java.lang包,表示数学运算的类
Math数学的工具类中,没有提供构造方法,Math中的常量和方法,都是使用static修饰的 -
Math中静态常量
E : 表示自然对象 ,2.718
PI : 圆周率 , 3.14 -
Math中常用方法
- abs(int i) : 重载方法,求一个数值的绝对值
- ceil(double d) : 将double类型的最大整数获取到,将小数点全部进位,向上取整,返回值类型double类型
- floor(double d) : 将double类型的最小整数获取到,将小数点全部舍掉,向下取整,返回值是double类型
- max(int a, int b) : 重载方法,可以比较double,float,int,long , 表示返回两个数中的较大值
- min(int a ,int b) : 重载方法,可以比较double,float,int,long , 表示返回两个数中的较小值
- random() : 生成一个随机的小数,范围[0.0-1.0),包含0.0,不包含1.0
- round(double d) : 四舍五入,看小数点的第一位,如果第一位>=5,那么就向上取整,如果小数点第一位<5,向下取整
代码
package com.zgjy.demo;
public class MathDemo {
public static void main(String[] args) {
//mathEle();
mathMethod();
}
public static void mathEle() {
// Math类中的静态常量
System.out.println(Math.E);
System.out.println(Math.PI);
}
public static void mathMethod() {
// 1. abs(int i) : double float long
System.out.println(Math.abs(-3.14));// 3.14
System.out.println(Math.abs(7));// 7
// 2. ceil(double d) : 向上取整
double d = 3.78;
System.out.println(Math.ceil(d));// 4.0
System.out.println(Math.ceil(3.0));// 3.0
System.out.println(Math.ceil(3.01));//4.0
// 3. floor(double d) : 向下取整
System.out.println(Math.floor(6.99));// 6.0
System.out.println(Math.floor(-6.99));// -7.0
// 4. max(int a ,int b)
System.out.println(Math.max(7, 78));// 78
// 5.min(double a , double b) :
System.out.println(Math.min(-3.78, -7.0));// -7.0
// 6.random() : 生成0.0-1.0之间的小数
System.out.println(Math.random());
int x = (int)(Math.random()*100 +1);
System.out.println(x);
// 7. round(double d) : 四舍五入,看小数点的第一位,如果第一位>=5,那么就向上取整
// 如果小数点第一位<5,向下取整
System.out.println(Math.round(3.45));
System.out.println(Math.round(3.55));
}
}
-
System类
System类,来自于java.lang包 ,用于描述系统资源的类
System类中没有提供构造方法,类中常量和方法都是静态的 -
System类中的静态常量
in : 标准的输入流,默认关联键盘录入
举例 : Scanner sc = new Scanner(System.in);
out : 标准的输出流,默认将数据输出到控制台上
System.out.println() —>System 系统类 out 是System中的常量,表示输出 println()方法,将参数的数据进行打印
err : 标准的错误流, 是error缩写,实际作用将代码运行时异常以及一些错误信息进行输出,以红色的字体进行显示,起到提醒的作用
运行时异常 : 指代码编译的时候,没有错误,代码在运行时,发生错误 -
System方法
- gc() : 垃圾回收,但是内存和JVM有自己的内存回收机制,在合适的场景下,系统底层自己自动的进行无用对象的垃圾回收
- exit(int state) : 停止虚拟机,代码不再运行
- currentTimeMillis() : 返回当前时间的毫秒值,返回值类型long类型,在Java中,默认的起始时间1970年1月1日00:00:00 -----> 毫秒值为0
1000毫秒 = 1秒
代码
package com.zgjy.demo;
public class SystemDemo {
public static void main(String[] args) {
// System.out.println(Integer.parseInt(“abc”));
//exit(0) : 正常停止虚拟机,代码都停止运行
System.out.println("helloworld");
//System.exit(0);
System.out.println("hello");
// 从1970年1月1日00:00:00 --- 2019年9月11日11点05的毫秒值
long l = System.currentTimeMillis();
System.out.println(l);//1568171140343
for(int i = 0 ; i< 100000 ; i ++) {
i = i + 1;
}
long l1 = System.currentTimeMillis();
System.out.println("循环运行时间"+(l1-l));
}
}
- Date类
3.1 Date类的概述
Date 类 ,来自于java.util包, java.util包中的类,一般都是工具类
Date : 表示一个特定的瞬间,表示时间
3.1.1 Date的构造方法
- Date(): 表示创建一个日期类对象
- Date(long time) : 获取到指定毫秒值time对应的日期
代码
package com.zgjy.demo;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 1. 有些过时的方法,使用的时候,方法上有一条横杠,不是错误
// 提醒你,这个方法现在使用的很少了,已经过时
Date d = new Date("2019-09-11");
// 2. Date()
Date d1 = new Date();
//Wed Sep 11 11:28:04 CST 2019
System.out.println(d1);
// 3. Date(long time) : 获取到指定毫秒值time对应的日期
Date d2 = new Date(0);
// 1970年1月1日00:00:00,英国时间,中国时间比英国时间有8个小时时差
// Thu Jan 01 08:00:00 CST 1970
System.out.println(d2);
}
}
3.1.2 Date中的方法
- after(Date d) : 测试此日期是否在指定日期之后,返回值类型boolean类型
- before(Date d) : 测试此日期是否在指定日期之前,返回值类型boolean类型
- getTime() : 获取当前Date日期类对象的毫秒值, 从1970年1月1日 00:00:00开始计算
- setTime(long time) : 将time对应的毫秒值,转换成一个日期类对象
代码
package com.zgjy.demo;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 1. 有些过时的方法,使用的时候,方法上有一条横杠,不是错误
// 提醒你,这个方法现在使用的很少了,已经过时
//Date d = new Date(“2019-09-11”);
// 2. Date()
Date d1 = new Date();
//Wed Sep 11 11:28:04 CST 2019
System.out.println(d1);
// 3. Date(long time) : 获取到指定毫秒值time对应的日期
Date d2 = new Date(0);
// 1970年1月1日00:00:00,英国时间,中国时间比英国时间有8个小时时差
System.out.println(d2);
// 4. after(Date d) : 判断d1日期是否在参数d2日期之后
boolean boo = d1.after(d2);
System.out.println(boo);// true
// 5. before(Date d):测试此日期是否在指定日期之前,返回值类型boolean类型
boolean boo1= d1.before(d2);
System.out.println(boo1);//false
// 6. getTime():获取当前Date日期类对象的毫秒值, 从1970年1月1日 00:00:00开始计算
long miao = d1.getTime();
//1568181015838
System.out.println(miao);
// 7.setTime(long time) : 将time对应的毫秒值,转换成一个日期类对象
Date dd = new Date();
dd.setTime(100000000000L);
//Sat Mar 03 17:46:40 CST 1973
System.out.println(dd);
}
}
- DateFormat类
DateFormat 类,来自于java.text包
DateFormat是一个抽象类,抽象类不能实例化对象,找到DateFormat的子类SimpleDateFormat
DateFormat 功能就是能进行时间或者日期的格式化,将时间或者日期转换成想要的形式
DateFormat中有两个方法比较重要:
format(Date d) : 将一个日期对象转换成一个字符串
parse(String s) : 将字符串s转换成一个日期对象
4.1 SimpleDateFormat日期格式化
SimpleDateFormat类,来自于java.text包
与语言无关的将一个日期或是时间进行解析或者是格式化
-
日期格式化方法:
format(Date d) : 将一个日期对象转换成一个字符串,返回值类型String类型
parse(String s) : 将字符串s转换成一个日期对象,返回值类型Date类型
注意 : 参数s需要与SimpleDateFormat构造方法中的字符串类型保持一致,否则报出
ParseException,解析异常 -
SimpleDateFormat的构造方法:
1)SimpleDateFormat() : 空参数构造方法,具有默认的日期格式化形式,19-9-11 下午2:23
2)SimpleDateFormat(String partten) : 将日期或是时间格式化成pattern的形式
日期的字符串表达方式pattern,有规律
举例 : SimpleDateFormat sdf = new SimpleDateFormat (“yyyy-MM-dd HH-mm-ss”);
代码
package com.zgjy.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//createSimple();
//createSimple1();
getDate();
}
// 空参数构造
public static void createSimple() {
// 1. SimpleDateFormat() : 空参数构造方法,默认的日期格式化类型
// 默认格式 : 19-9-11 下午2:23
SimpleDateFormat sdf = new SimpleDateFormat();
// 2. format(Date d): 将一个日期对象d转换成一个字符串
String s = sdf.format(new Date());
// 19-9-11 下午2:23
System.out.println(s);
}
// 将日期格式化成指定的字符串类型
public static void createSimple1() {
// 1. SimpleDateFormat(String partten) : 将日期或是时间格式化成pattern的形式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
// 2. format(Date d): 将一个日期对象d转换成一个字符串
String s = sdf.format(new Date());
System.out.println(s);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");
System.out.println(sdf1.format(new Date()));
}
// 将字符串转化成日期类型
public static void getDate() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”);
// 1. parse(String s) : 将字符串s转换成一个日期对象,返回值类型Date类型
// 注意 : 提供的String类型参数,需要与SimpleDateFormat构造方法中的
// 字符串类型保持一致
// 如果字符串无法转换成指定的日期类型,报出ParseException异常
Date d = sdf.parse("2019年08月12日 12时01分54秒 ");
System.out.println(d);
}
}
练习:
通过键盘录入一个自己的生日,计算今天是自己出生的第几天
分析:
-
自己生日----->String类型
String ------>毫秒值
String ----->Date(SimpleDateFormat parse )----->(Date getTime())毫秒值 -
将今天的日期对应的毫秒值获取到
System.currentTimeMillis
new Date().getTime(); -
最终天数,毫秒值/1000/60/60/24
代码
package com.zgjy.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DateTest {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
// 1. 输入一个生日
System.out.println(“请输入生日,类型必须为 2019/02/19样式:”);
String birth = sc.next();
// 2. 将String类型的生日,转换成Date类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date birthDate= sdf.parse(birth);
// 3. 将生日的Date类型,转换成毫秒值,用于计算天数
long birthTime = birthDate.getTime();
//4. 将今天的日期转换成毫秒值
long nowTime = new Date().getTime();
// 5.计算出生天数: 毫秒值/1000/60/60/24
int day = (int)((nowTime-birthTime)/1000/60/60/24);
System.out.println(day);
}
}
- Calendar类
5.1 Calendar类的介绍
Calendar类,来自java.util包,表示一个日历类
日历类,可以将一个日期中的相关数据,单独获取到,例如获取年份,天数,星期
Calendar 类是个抽象类,不能创建对象
于是Calendar中,有一个方法,getInstance() : 能获取到一个Calendar抽象类的子类对象
代码
package com.zgjy.demo;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
// 1. 创建一个Calendar对象,getInstance() 获取到一个Calendar的子类对象
// 抽象父类 cal = new 子类对象();
Calendar cal = Calendar.getInstance();// 多态的表现方式
System.out.println(cal);
}
}
Calendar类对象的打印结果如下:
注意 :
MONTH : 表示一年中的月份,美国人月份0-11月,中国1-12月,因此日历中月份美国比中国-1
DAY_OF_WEEK : 星期, 美国人星期 1-7,但是星期天为一周的第一天,中国是星期一是第一天,日历类中,比正常星期+1
5.2 Calendar类的get方法
get(int field) : 获取日历中指定的字段值,返回值int类型
说明 : get方法中的参数field,可以从Calendar的静态常量中获取
Calendar日历类中的每一个日历字段,都被设置成了Calendar类中的静态常量
代码
package com.zgjy.demo;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
// 1. 创建一个Calendar对象,getInstance() 获取到一个Calendar的子类对象
// 抽象父类 cal = new 子类对象();
/Calendar cal = Calendar.getInstance();// 多态的表现方式
System.out.println(cal);/
getMethod();
}
public static void getMethod() {
Calendar cal = Calendar.getInstance();
// get(int feild): 获取指定的日历字段值,返回值类型int类型
int year= cal.get(Calendar.YEAR);
System.out.println(year);
int month = cal.get(Calendar.MONTH)+1;
System.out.println(month);
int day = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
int week = cal.get(Calendar.DAY_OF_WEEK)-1;
System.out.println(week);
int shi = cal.get(Calendar.HOUR_OF_DAY);
System.out.println(shi);
int fen = cal.get(Calendar.MINUTE);
System.out.println(fen);
int miao = cal.get(Calendar.SECOND);
System.out.println(miao);
}
}
5.3 Calendar类中的set方法
set(int field,int value) : 将日历中的指定字段field,设置为指定的值value
set(int year, int month, int date) : 设置日历类中的年月日
set(int year, int month, int date, int hourOfDay, int minute):设置日历类中的年月日小时分钟
set(int year, int month, int date, int hourOfDay, int minute, int second) : 设置日历类中的年月日小时分钟秒
代码
package com.zgjy.demo;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
setMethod();
}
public static void setMethod() {
Calendar cal = Calendar.getInstance();
// set(int field , int value)
cal.set(Calendar.YEAR, 2005);
cal.set(Calendar.DAY_OF_MONTH, 23);
System.out.println(cal.get(Calendar.YEAR));// 2005
System.out.println(cal.get(Calendar.DAY_OF_MONTH));// 23
System.out.println("-----------");
cal.set(2007, 12, 01);// 日期超出指定范围,进位
System.out.println(cal.get(Calendar.YEAR));//2008
System.out.println(cal.get(Calendar.MONTH));//0
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//1
System.out.println("-----------");
cal.set(2011, 05, 01, 10, 12, 12);
System.out.println(cal.get(Calendar.YEAR));//2011
System.out.println(cal.get(Calendar.MONTH));//5
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//1
}
}
5.4Calendar中的add方法
add(int field, int count) : 给日历类中的指定的字段field,添加数值count
说明: 如果添加后,field超出范围,进位
代码
package com.zgjy.demo;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -2);
System.out.println(cal.get(Calendar.YEAR));// 2017
System.out.println(cal.get(Calendar.MONTH));//8
cal.add(Calendar.MONTH, 5);
System.out.println(cal.get(Calendar.YEAR));// 2018
System.out.println(cal.get(Calendar.MONTH));//1
}
}
练习:
键盘录入一个年份,通过月份判断这一年是平年还是闰年
注意 : 平年的2月28天,闰年的2月29天
分析 :
输入年份 int类型
设置一个Calendar日历类,设置年份为输入的年份,月份1,日设置为28,
在日上添加1天,看如果月份进位,平年,没有进位,闰年
代码
package com.zgjy.demo;
import java.util.Calendar;
import java.util.Scanner;
public class CalendarYear {
public static void main(String[] args) {
// 1. 创建一个Calendar类对象
Calendar cal = Calendar.getInstance();
// 2. 键盘录入一个整数,作为年份
Scanner sc = new Scanner(System.in);
System.out.println(“请输入年份:”);
int year = sc.nextInt();
// 3. 将录入的年份year以及2月28日,设置为日历数据
// 美国0-11月,数据中的1月相当于中国的2月
cal.set(year, 1, 28);
// 4. 将日期+1,为了获取到日+1是否进位,如果进位为3月,证明平年,
// 没有进位,仍然为2月,闰年
cal.add(Calendar.DAY_OF_MONTH, 1);
// 5. 获取到日历类中的月份
int month = cal.get(Calendar.MONTH);
if(month == 2) {//月份进位,平年
System.out.println("平年");
}else {//闰年
System.out.println("闰年");
}
}
}