Math
- 概述
math是一个封装了一系列数学运算和三角函数相关的类,执行基本数学运算的方法。数学类是一个最终类,不可以重写。
注意:都是static修饰的 - 功能:
- Math.PI
- Math.E
- Math.abs(num),求绝对值
- Math.ceil(num)向上取整
- Math.floor(num) 向下取整
- Math.max(a,b)求最大值
- Math.min(a,b)求最小值
- Math.pow(a,b)求a的b次方
- Math.sqrt() 开根号
- Math.random()随机生成(0,1)
- Math.toRadians() 角度->弧度
- Math.toDegrees() 弧度->角度
Data
-
概述:表示特定的瞬间,是一个毫秒值
-
构造函数
- new Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
- new Date(long)
-
常用方法:
- getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- compareTo(date) 比较两个日期的顺序。
- after()测试此日期是否在指定日期之后。
- before(date)测试此日期是否在指定日期之前
-
SimpleDateFormat
-
概念:它是DataFormat的子类,专门用于对Date进行格式化和解析
-
常见的时间模式
y 年 M月 d 日 H 小时 m分钟 s秒 -
格式化:将Date日期以指定的格式按字符串输出format(Date)
-
解析:将已经格式化后的日期字符串解析成一个Date对象,parse(String)
注意:要解析的日期字符串的格式必须与SimpleDateFormat指定的格式,否则会发生ParseException需求:时间以XXX年XX月XX日XX时XX分XX秒输出 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒"); String time= sdf.format(new Date()); syso(time);//2019年08月05日07时15分18秒 需求:解析 String sj="2008年8月8号8时8分8秒"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd号hh时mm分ss秒"); Date date=sdf.parse(sj); syso(date);//Fri Aug 08 08:08:08 CST 2008
需求是:查看你活到现在的天数 public static void f1() throws ParseException { Scanner sc = new Scanner(System.in); System.out.println("请输入你的出生年月:2000年1月1日"); String birthday = sc.next(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); Date birthDate = sdf.parse(birthday);//将输入的日期解析 Date nowDate = new Date();//获取当前的日期对象 long birthTime = birthDate.getTime(); long nowTime = nowDate.getTime(); System.out.println((nowTime - birthTime) / 1000.0 / 3600 / 24); } ```
//计算距离国庆还有几天 String happyDay="2019年10月1日"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日"); Date happyDate=sdf.parse(happyDay); Date dates= new Date();//获取当前时间 long nowTime=dates.getTime(); long happyDateTime=happyDate.getTime(); System.out.println((happyDateTime-nowTime)/1000/3600/24);
-
Calendar
- 概念:一个操作日历字段的抽象类
对象的获取:getInstance()
Calendar类是一个抽象类,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的 对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
Calendar c=Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_YEAR));
//设置时间,底层是0-11月
c.set(Calendar.MONTH, 5);
System.out.println(c);
- 常用方法
- getTime():获取Date对象
- getTimeInMillis():获取毫秒值,同Date的gettime(),同System.currentTimeMillis()
- set(field,value):对指定的时间域设置值
- set(year,month,date,hour,minute,second);
- get(filed):获取指定时间域上的值
- add(filed,amount):为指定的时间域设置偏移值
需求是:查看你活到现在的天数 private static void t1_2() { Scanner sc = new Scanner(System.in); System.out.println("请输入年份"); int year = sc.nextInt(); System.out.println("请输入月份"); int month = sc.nextInt(); System.out.println("请输入日子"); int date = sc.nextInt(); Calendar c = Calendar.getInstance(); c.set(year, month, date); long birthTime = c.getTimeInMillis(); long nowTime = System.currentTimeMillis(); System.out.println((nowTime-birthTime) / 1000/ 3600 / 24); }
//需求:求当前时间到国庆节的天数 Scanner sc =new Scanner(System.in); System.out.println("请输入年份"); int year =sc.nextInt(); System.out.println("请输入月份"); int month =sc.nextInt(); System.out.println("请输入日"); int day =sc.nextInt(); //获取日历对象 Calendar calendar= Calendar.getInstance(); calendar.set(year, month, day); long scTime=calendar.getTimeInMillis(); long nowTime=System.currentTimeMillis(); System.out.println((scTime-nowTime)/3600/1000/24);
**基本数据类型的包装类
-
概述:
基本数据类型的创建和使用非常方法,但是我们无法通过基础数据类型调用一些功能来操作这些数据。
现在将这些基本数据类型封装成一个类,就可以在这个类中定义一些专门操作这些数据的功能
这种类就是基本数据类型的包装类 -
基本类型与包装类的对应关系
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean -
+装箱和拆箱
装箱:基本类型->包装类- 使用包装类的构造函数
new Integer(int)
new Integer(string):当字符串不是整数形式的字符串时会发生NumberFormatException异常int i = 3; Integer i1 = new Integer(i); System.out.println(i1+1);//4 Integer i2=new Integer("333"); System.out.println(i2);//333 Integer i2=new Integer("bbb"); System.out.println(i2);//NumberFormatException
- 使用包装类的静态方法
valueOf(int)
valueOf(String)int j = 4; Integer i3 = Integer.valueOf(j); System.out.println(i3);//4 Integer i4 = Integer.valueOf("444"); System.out.println(i4);///4
拆箱:包装类->基本类型
- 使用包装类的成员方法
intValue(Integer);当字符串不是整数形式的字符串时会发生NumberFormatException异常System.out.println("===========拆箱==========="); Integer i5 = new Integer(999); int k = i5.intValue(); System.out.println(k*k);//998001
- 使用包装类的构造函数
-
自动装箱和自动拆箱
jdk1.5之后,基本类型和包装类可以实现自动转换
自动装箱:它隐含了new Integer(t);
int t=3; Integer i=t;
自动拆箱:它隐含了i.intValue();
Integer i=new Integer(666); int k=i;
-
包装类的功能
- 获取指定类型的最大、最小值
Integer.MAX_VALUE - toBinaryString(int)
- toOctalString(int)
- toHexString(int)
- 获取指定类型的最大、最小值
-
基本类型/包装类与字符串的转换
- 空串的连接
- 包装类的静态tostring(数据)方法
- string的静态valueOf(数据)方法
-
string->基本类型/包装类
- 包装类的构造方法
- 包装类的静态valueOf(string)方法
- 包装类的静态parseXXX(string)方法
String s1 = Integer.toString(333); String s2 = 333 + ""; String s3 = String.valueOf(444); System.out.println("------------------------"); Integer i1 = new Integer("666"); int i2 = new Integer("666"); Integer i3 = Integer.valueOf("555"); int i4 = Integer.parseInt("999"); System.out.println(i4 + 1);
注意点:在面试的的时候有点恶心的,
System.out.println("-----------恶心心-----------");
Integer i = Integer.valueOf("-5");
System.out.println(i+5);//0
Integer i = Integer.valueOf("+5");
System.out.println(i+5);//10
Integer i = Integer.valueOf("1-5");
System.out.println(i+5);//这个是报错的
Integer i = Integer.valueOf("-5");
System.out.println(i+5);//0
Integer i = Integer.valueOf("+5");
System.out.println(i+5);//10
Integer i = Integer.valueOf("1-5");
System.out.println(i+5);//这个是报错的
自动装拆箱案例
ArrayList<Integer> list= new ArrayList<>();
//ArrayList集合无法存储基本数据类型,可以存储Integer包装类
list.add(1);//自动装箱 list.add(new Integer(1));
int j=list.git(i);//自动拆箱,list.get(i).intValue()