Java基础Day14

day14

  1. Math类
    Math.来自于java.lang包,表示数学运算的类
    Math数学的工具类中,没有提供构造方法,Math中的常量和方法,都是使用static修饰的

  2. Math中静态常量
    E : 表示自然对象 ,2.718
    PI : 圆周率 , 3.14

  3. Math中常用方法

  1. abs(int i) : 重载方法,求一个数值的绝对值
  2. ceil(double d) : 将double类型的最大整数获取到,将小数点全部进位,向上取整,返回值类型double类型
  3. floor(double d) : 将double类型的最小整数获取到,将小数点全部舍掉,向下取整,返回值是double类型
  4. max(int a, int b) : 重载方法,可以比较double,float,int,long , 表示返回两个数中的较大值
  5. min(int a ,int b) : 重载方法,可以比较double,float,int,long , 表示返回两个数中的较小值
  6. random() : 生成一个随机的小数,范围[0.0-1.0),包含0.0,不包含1.0
  7. 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));		
	
}

}

  1. System类
    System类,来自于java.lang包 ,用于描述系统资源的类
    System类中没有提供构造方法,类中常量和方法都是静态的

  2. System类中的静态常量
    in : 标准的输入流,默认关联键盘录入
    举例 : Scanner sc = new Scanner(System.in);
    out : 标准的输出流,默认将数据输出到控制台上
    System.out.println() —>System 系统类 out 是System中的常量,表示输出 println()方法,将参数的数据进行打印
    err : 标准的错误流, 是error缩写,实际作用将代码运行时异常以及一些错误信息进行输出,以红色的字体进行显示,起到提醒的作用
    运行时异常 : 指代码编译的时候,没有错误,代码在运行时,发生错误

  3. System方法

  1. gc() : 垃圾回收,但是内存和JVM有自己的内存回收机制,在合适的场景下,系统底层自己自动的进行无用对象的垃圾回收
  2. exit(int state) : 停止虚拟机,代码不再运行
  3. 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));
}

}

  1. Date类
    3.1 Date类的概述
    Date 类 ,来自于java.util包, java.util包中的类,一般都是工具类
    Date : 表示一个特定的瞬间,表示时间

3.1.1 Date的构造方法

  1. Date(): 表示创建一个日期类对象
  2. 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中的方法

  1. after(Date d) : 测试此日期是否在指定日期之后,返回值类型boolean类型
  2. before(Date d) : 测试此日期是否在指定日期之前,返回值类型boolean类型
  3. getTime() : 获取当前Date日期类对象的毫秒值, 从1970年1月1日 00:00:00开始计算
  4. 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);
}

}

  1. DateFormat类
    DateFormat 类,来自于java.text包
    DateFormat是一个抽象类,抽象类不能实例化对象,找到DateFormat的子类SimpleDateFormat
    DateFormat 功能就是能进行时间或者日期的格式化,将时间或者日期转换成想要的形式

DateFormat中有两个方法比较重要:
format(Date d) : 将一个日期对象转换成一个字符串
parse(String s) : 将字符串s转换成一个日期对象

4.1 SimpleDateFormat日期格式化
SimpleDateFormat类,来自于java.text包
与语言无关的将一个日期或是时间进行解析或者是格式化

  1. 日期格式化方法:
    format(Date d) : 将一个日期对象转换成一个字符串,返回值类型String类型
    parse(String s) : 将字符串s转换成一个日期对象,返回值类型Date类型
    注意 : 参数s需要与SimpleDateFormat构造方法中的字符串类型保持一致,否则报出
    ParseException,解析异常

  2. 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);
}
}

练习:
通过键盘录入一个自己的生日,计算今天是自己出生的第几天
分析:

  1. 自己生日----->String类型
    String ------>毫秒值
    String ----->Date(SimpleDateFormat parse )----->(Date getTime())毫秒值

  2. 将今天的日期对应的毫秒值获取到
    System.currentTimeMillis
    new Date().getTime();

  3. 最终天数,毫秒值/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);

}

}

  1. 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("闰年");
	}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值