Math类的概述和方法使用
package com.heima.Math;
public class Demo1_Math {
/*
* Math类包含执行数学运算的基本方法,如初等指数,对数,平方根和三角函数
* 成员方法:
* public static int abs(int a)
* public static double ceil(double a)
* public static double floor(double a)
* public static double pow(double a,double b)
* public static int max(int a,int b)
* public static double random()
* public static int round(float a),参数为double的自学
* public static double sqrt(double a)
* */
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.abs(-10));//取绝对值
System.out.println(Math.ceil(12.99));//结果都是13.0
System.out.println(Math.ceil(12.3));//ceil是 天花板的意思,同意,floor是地板的意思
System.out.println(Math.floor(12.3));//结果是12.0
System.out.println(Math.max(20, 30));//返回最大值
System.out.println(Math.pow(2, 4));//前面的数是底数,后面的数是指数,2^4
System.out.println(Math.random());//生成[0.0,1.0)之间的随机小数
System.out.println(Math.round(2.651));//四舍五入
System.out.println(Math.sqrt(8.0));//开平方,取根号
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Random类
package com.heima.Math;
import java.util.Random;
public class Demo2_Random {
public static void main(String[] args) {
Random r=new Random();
int x=r.nextInt();//在int范围之内随机生成一个数
System.out.println(x);
System.out.println(r.nextInt(100));//需要掌握,随机生成一个[0,100)之间的数字
Random r2=new Random(1000);//传一个1000的种子
int a=r2.nextInt();
int b=r2.nextInt();
System.out.println(a+" "+b);//-1244746321 1060493871,根据种子算出的结果不会变
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
System类
package com.heima.Math;
public class Demo3_System {
/*
* A:System类的概述
* system类包含一些有用的类字段和方法,它不能被实例化
* B:成员方法
* public static void gc() 运行垃圾回收器
* public statci void exit(int status)
* public static long currentTimeMillis()返回:
当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
* public static void arraycopy(Object src,int srcPos,Object dest,int destPOse,int length)
* */
public static void main(String[] args) {
//demo1();
//demo2(); 推出Java虚拟机
//demo3(); 获取当前时间的毫秒值
int[] src={11,22,33,44,55};
int[] dest=new int[8];
System.arraycopy(src, 0, dest, 0, src.length);//将数组内容拷贝
for(int i=0;i<dest.length;i++){
System.out.print(Integer.toString(dest[i])+" ");
}
}
private static void demo3() {
long start=System.currentTimeMillis();
for(long i=0;i<1000;i++){
System.out.println("d");
}
long end=System.currentTimeMillis();
System.out.println(end-start);//可以这样算出程序运行的时间,运行27毫秒
}
private static void demo2() {
System.exit(0);//非0状态是异常终止,推出jvm
System.out.println("000000");//没有打印出这句话,因为Java虚拟机已经退出了
}
private static void demo1() {
for(int i=0;i<100;i++){
new Demo();/*垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),
一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,
除非我们要实现特殊的功能
(这 里面涉及到很多东西,比如对象空间树等内容)。*/
System.gc();//垃圾回收器,相当于保洁阿姨
}
}
}
class Demo{//在一个源文件中不允许两个用public定义的类,但是在开发中不用担心,因为写在不同源文件中
public void finalize(){
System.out.println("垃圾被清扫了");
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
BigInteger类放很大的整数
package com.heima.Math;
import java.math.BigInteger;
public class Demo4_BigInteger {
/*
* A:BigInterger的概述
* 可以让超过integer范围的数进行运算
* B:构造方法
* public BigInteger(String val)
* C:成员方法
* public BinInteger add(BigInteger val)
* public BigInteger substact(BigInteger val)
* public BigInteger multiply(BigInteger val)
* public BigInteger divide(BigInteger val)
* public BigInteger[] divideAndRemainder(BigInteger val)
* */
public static void main(String[] args) {
//int和long都有长度限制
BigInteger bi1=new BigInteger("1000");
BigInteger bi2=new BigInteger("2");
System.out.println(bi1.add(bi2));//加
System.out.println(bi1.subtract(bi2));//减
System.out.println(bi1.multiply(bi2));//乘法
System.out.println(bi1.divide(bi2));//除法
BigInteger[] arr=bi1.divideAndRemainder(bi2);//取除数和余数
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
BigDecimal类
package com.heima.Math;
import java.math.BigDecimal;
public class Demo_BifDEcilmal {
//计算机内二进制表示小数时有时候会出现精度的损失,所以BigDecimal可以用来做高精度的小数运算
public static void main(String[] args) {
/*BigDecimal bi1=new BigDecimal(2.0);
BigDecimal bi2=new BigDecimal(1.1);//这种方式在开发中不推荐,因为不够jingque
System.out.println(bi1.subtract(bi2));*/
BigDecimal bi1=new BigDecimal("2.0");
BigDecimal bi2=new BigDecimal("1.1");//通过构造中传入字符串的方式,开发时推荐
System.out.println(bi1.subtract(bi2));
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。
Data类
package com.heima.Math;
import java.sql.DatabaseMetaData;
import java.util.Date;
public class Demo_Data {
/*
* Data类概述:
* data类,表示特定的瞬间,精确到毫秒
* B:构造方法:
* public Data()
* public Data(long data)
* C:成员方法
* public long getTime()
* public void setTime(long time)
* * */
public static void main(String[] args) {
//demo1();
Date d1=new Date();
d1.setTime(1000);
System.out.println(d1);
}
private static void demo1() {
Date d1=new Date();
System.out.println(d1);//Wed May 30 21:00:17 CST 2018
Date d2=new Date(0);
System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970,打印出来时间时八点而非0点,其实系统时间依然是0
//点,但是我的电脑属于东八区,所以是八点。构造方法中参数传0代表的是1970年,如果没有传参数,代表的是当前时间
System.out.println(d1.getTime());//返回的是当前时间的毫秒值,通过时间对象获取毫秒值
System.out.println(System.currentTimeMillis());//通过系统类方法获取毫秒值
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
simpleDateFormat类
package com.heima.Math;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo5_simpleDateFormat {
/*
* DateFormat类的概述
* DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的格式化方式解析出日期或者时间,是抽象类,所以使用其子类即可
* SimpleDateFormat构造方法
* public SimpleDateFormat()
* public SimpleDateFormat(String pattern)
*成员方法
* public final String format(Date date)
* public Date parse(String source)
* */
public static void main(String[] args) throws ParseException {
//demo1();
//demo2();//空参构造
//demo3();//有参构造
//将时间字符串转换成日期对象
String str="2018年08月08日08时08分08秒";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
Date d=sdf.parse(str);//将时间字符串转换成日期对象
System.out.println(d);
}
private static void demo3() {
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");//将日期以固定格式显示
System.out.println(sdf.format(d));//2018年44月31日 09:44:04
}
private static void demo2() {
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat();
System.out.println(sdf.format(d));//18-5-31 上午9:39
}
private static void demo1() {
//DateFormat df=new DateFormat();//这是一个抽象类不能实例化
DateFormat df=DateFormat.getDateInstance();//相当于父类引用指向子类对象
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
来到世界多少年demo
package com.heima.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Teat2 {
//你来到这个世界多少天
/*
* 将生日字符串和今天字符串存储在STring类型的变量中
* 定义日期格式化对象
* 将日期字符串转换成日期对象
* 通过日期对象后计算时间毫秒值
* 将两个时间毫秒值相减除以1000,在除以60,再除以60,再除以24得到天
* */
public static void main(String[] args) throws ParseException {
String birthday="1995年12月25日";
String today="2018年5月31日";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
Date d1=sdf.parse(birthday);
Date d2=sdf.parse(today);
//求出毫秒值
long time=d2.getTime()-d1.getTime();
System.out.println(time/1000/60/60/24/365);
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
calend类
package com.heima.Math;
import java.util.Calendar;
import java.util.concurrent.CancellationException;
public class Demo9_Calendar {
/*
* Calendar类的概述
* Canlendar类是一个抽象类,蹦年直接new对象,它为特定瞬间与一组诸如YEAR,MONTH,DAY,HOUR等日历字段之间的转换
* 成员方法 、
* public static Calendar getInstance()
* public int get(int field)
* */
public static void main(String[] args) {
Calendar c=Calendar.getInstance();//父类引用指向子类对象
System.out.println(c);
System.out.println(c.get(Calendar.YEAR));//通过字段获取年
System.out.println(c.get(Calendar.MONTH)+1);//通过字段获取月,但是是从0开始编号的
System.out.println(c.get(Calendar.DAY_OF_MONTH));//月中第几天
System.out.println(c.get(Calendar.DAY_OF_WEEK));//周日是第一天,周六是最后一天
System.out.println(c.get(Calendar.YEAR)+"nian"+change((c.get(Calendar.MONTH)+1))+"月"
+change(c.get(c.DAY_OF_MONTH))+"日"+getweek(c.get(Calendar.DAY_OF_WEEK)));
}
/*
* 将星期存储表中进行查表
* 1.返回值类型String
* 2.参数列表int week
* */
public static String getweek(int week){
String[] arr={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return arr[week];
}
/*如果是个位数字前面补0
* */
public static String change(int num){
if(num>9){
return ""+num;
}else{
return "0"+num;
}
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Calendar类的add和set方法
package com.heima.Math;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.CancellationException;
public class Demo10_Calendar {
/*
* Calendar类的get()和set()方法
* public void add(int field,int amount)
* public final void set(int year,int month,int date)
* */
public static void main(String[] args) {
Calendar c=Calendar.getInstance();
c.add(Calendar.YEAR, 1);//比系统年数加一,可以对指定字段进行向前加或者向后减操作
c.set(Calendar.YEAR, 2000);//修改指定字段
c.set(2010, Calendar.MONTH, Calendar.DATE);//set是重载方法
System.out.println(c.get(Calendar.YEAR));
}
}
.................。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
判断是否是闰年
package com.heima.Test;
import java.util.Calendar;
import java.util.Scanner;
public class Test {
/*
* 判断任意年份是平年还是闰年
* Calendar c =new Calendar.getInstance()
* 1.键盘录入年Scanner
* 2.创建Calendar对象、
* 3.通过set方法设置为那一年的三月1日
* 4.将日向前减去1
* 5.判断日是多少天,如果是29天返回true否则返回false
* */
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入年份,判断该年份是否是润年");
//int year=sc.nextInt();
String line=sc.nextLine();
int year=Integer.parseInt(line);
boolean b=getYear(year);
System.out.println(b);
}
public static boolean getYear(int year) {
Calendar c=Calendar.getInstance();
c.set(year, 3, 1);
c.add(Calendar.DAY_OF_MONTH, 1);
//判断是否是29天
return c.get(Calendar.DAY_OF_MONTH)==29;
}
}