数学运算类

Posted toov5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学运算类相关的知识,希望对你有一定的参考价值。

Math 

Random

上面的大家有兴趣的可以研究下,我下面主要说下system的方法,这个对于大家学习jvm有很多帮助的

 

System  lang包下的 (public final class System)   包含一些有用的字段和犯法 不能被实例化

Jvm通过gc去运行回收器 肯定是某个方法 这样才称之为某个功能  Object的 finalize()  当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。通过gc去调用。

重写 类中的finalize()方法 可以看看是否调用 ,System.gc()时候 相当于建议垃圾收集   呼唤保洁阿姨

当垃圾到一定数量时候 jvm会自动进行垃圾清理

但是你可以呼唤保洁 你可以建议垃圾清理 只要是回收某个类的对象就会调用某个类的 finalize() 方法

package com.toov5.test;

class demo {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("本对象被清理");
    }
}

public class Test11 {

    public static void main(String[] args) {

        for (int i = 0; i < 50; i++) {
            new demo();
        }

    }

}

技术图片

 

 

注意为啥在一个源文件不能出现两个public    会枪战公共资源  一般建议拥有主方法的类使用public

 

package com.toov5.test;

class demo {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("本对象被清理");
    }
}

public class Test11 {

    public static void main(String[] args) {

        for (int i = 0; i < 50; i++) {
            new demo();
            System.gc();
        }

    }

}

技术图片

 

 exit()

  public static void exit(int status)  终止当前正在运行的Java虚拟机。参数用作状态码,根据惯例,非0的状态码表示异常终止

 该方法调用Runtime类中的exit方法。该方法永远不会正常返回

 

public class Test11 {

    public static void main(String[] args) {

      System.exit(0);
      System.out.println("运行吧老铁");

    }

}

打印之前就已经退出了 所以什么都没有打印

 

还有返回long型的时间  System.currentTimeMillis()   获取当前时间的毫秒值

 

arraycopy 数组的拷贝
public class Test11 {

    public static void main(String[] args) {

        int[] src = { 1, 2, 3, 4, 5, 6, 7 };
        int[] dest = new int[7];
        // 把src里面的内容拷贝到dest里面中去
        System.arraycopy(src, 0, dest, 0, src.length);
        for (int i = 0; i < dest.length; i++) {
            System.out.println(dest[i]);
        }

    }

}
 

 

BigDecimal的使用:

数太大了直接用字符串搞定 "234245435645747568896989353453757457"

任意精度的都可以 卧槽很狂妄啊

并且这个类提供了很多可以运算的方法:

package com.toov5.test;

import java.math.BigDecimal;

public class Test11 {

    public static void main(String[] args) {
        System.out.println(2.0 - 1.1); // 不是0,9 计算机是二进制存储的 存储小数时候 不能准确表达 只能无限接近 会出现精度的损失 金融的业务很关键的
        // 方法二
        BigDecimal bDecimal1 = new BigDecimal(2.0);
        BigDecimal bDecimal2 = new BigDecimal(1.1);
        System.out.println(bDecimal1.subtract(bDecimal2)); // 也是不准确 到那时位数长了 更精确了一些 但是不够准确
        // 方法三
        BigDecimal bDecimal3 = new BigDecimal("2.0");
        BigDecimal bDecimal4 = new BigDecimal("1.1");
        System.out.println(bDecimal3.subtract(bDecimal4)); // 准确了 哈哈 可以的 传入的是字符串 要注意了
        // 方法四
        BigDecimal bigDecimal5 = BigDecimal.valueOf(2.0); // 不用new对象了 直接调用方法就好了
        BigDecimal bigDecimal6 = BigDecimal.valueOf(1.1);
        System.out.println(bigDecimal5.subtract(bigDecimal6)); // 准确了 可以这么玩儿的

    }

}

 

日期相关: 这里介绍的不是sql包下的 是util包下面的

 

  类Date表示特定的瞬间,精确到毫秒。

     构造方法摘要:

    空参构造  和有参构造就两个 其他的都过时了

    没有传递参数代表当前时间  如果是0代代表的是1970年1月1日

    

package com.toov5.test;

import java.util.Date;

public class Test11 {

    public static void main(String[] args) {
        //空参构造
        Date d1 = new Date();
        System.out.println(d1);
        
        //有参构造
        Date d2 = new Date(0);  
        System.out.println(d2);
        
        //调用api  通过时间对象获取毫秒值  
        Date date = new Date();
        System.out.println(date.getTime());
        System.out.println(System.currentTimeMillis());  //通过系统类的方法获取当前毫秒值
        

    }

}

  1970年算unix和C语言的生日

 

日期的格式化:

   SimpleDateFormat类实现日期和字符串的相互转换

###14.17_常见对象(SimpleDateFormat类实现日期和字符串的相互转换)(掌握)
* A:DateFormat类的概述
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
* B:SimpleDateFormat构造方法
* public SimpleDateFormat()
* public SimpleDateFormat(String pattern)
* C:成员方法
* public final String format(Date date)
* public Date parse(String source)


###14.18_常见对象(你来到这个世界多少天案例)(掌握)
* A:案例演示
* 需求:算一下你来到这个世界多少天?

 

是个抽象类 不能直接new对象  有个构造: protected的空参构造

DateFormat抽象类 不能被实例化

 

SimpleDateFormat() 空参构造:

  

package com.toov5.test;

import java.sql.DataTruncation;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test11 {

    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        System.out.println(simpleDateFormat.format(date));

        // 不用默认的格式化 用自定义的
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); // 小 大 小 大 小 小
        System.out.println(simpleDateFormat2.format(date));

        // 更强大的地方 将日期字符串转为对象 这样搞成对象就可以用对象里面的各个方法 玩起来了 必须是时间字符串补能瞎写啊哈

        String string = "2008年08月08日08:08:08";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
        Date date2 = sdf.parse(string); // 将时间字符串 转为日期对象 需要抛异常 防止字符串瞎写
        System.out.println(date2);

    }

}

 

来个好玩的案例:

算算自己来到世界多少天?

   将生日字符串和今天字符串存在String类型的变量中

   定义日期和格式化对象

  将日期字符串转为日期对象

  通过日日期对昂后期时间毫秒值

  将两个时间毫秒值详见除以1000,再除以60,再除以60,再除以24得到天

 

package com.toov5.test;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test11 {

    public static void main(String[] args) throws ParseException {
        String birthday ="1983年7月3日";
        String today = "218年7月1日";
        
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        Date dateBir = simpleDateFormat.parse(birthday);
        Date dateTod = simpleDateFormat.parse(today);
        
        Long timeResult = dateBir.getTime()-dateTod.getTime();
        System.out.println(timeResult/1000/60/60/24);
    }

}

 

 

###14.19_常见对象(Calendar类的概述和获取日期的方法)(掌握)
* A:Calendar类的概述
* Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
* B:成员方法
* public static Calendar getInstance()
* public int get(int field)


###14.20_常见对象(Calendar类的add()和set()方法)(掌握)
* A:成员方法
* public void add(int field,int amount)
* public final void set(int year,int month,int date)
* B:案例演示
* Calendar类的成员方法使用

###14.21_常见对象(如何获取任意年份是平年还是闰年)(掌握)
* A:案例演示
* 需求:键盘录入任意一个年份,判断该年是闰年还是平年

 

Date类中很多方法过时了 用Calendar类中的来取代

   

package com.toov5.test;

import java.text.ParseException;
import java.util.Calendar;

public class Test11 {

    public static void main(String[] args) throws ParseException {

        Calendar instance = Calendar.getInstance(); // 父类引用指向子类对象
        System.out.println(instance);

        System.out.println(instance.get(Calendar.YEAR)); // 通过字段获取年
        System.out.println(instance.get(Calendar.MONTH)); // 通过字段获取月 但是月是从0开始的
        System.out.println(instance.get(Calendar.DAY_OF_MONTH)); // 几号 月中的第几天
        System.out.println(instance.get(Calendar.DAY_OF_WEEK)); // 周几 周日是第一个天 周六是最后一天
        // 这么玩儿就OK了
        System.out.println(instance.get(instance.YEAR) + "年" + (instance.get(Calendar.MONTH) + 1) + "月"
                + instance.get(instance.DAY_OF_MONTH) + "日" + getWeek(instance.getFirstDayOfWeek()));
        // 优化后的加0的
        System.out.println(instance.get(instance.YEAR) + "年" + getNum(instance.get(Calendar.MONTH) + 1) + "月"
                + getNum(instance.get(instance.DAY_OF_MONTH)) + "日" + getWeek(instance.getFirstDayOfWeek()));

        // 如果是个位数字补零的优化

    }

    public static String getWeek(int week) {
        String[] arr = { "", "星期一", "星期日", "星期二", "星期三", "星期四", "星期五", "星期六" };

        return arr[week];

    }

    public static String getNum(int num) {
        return num > 9 ? "" + num : "0" + num;
    }

}

 

add 和set 方法

package com.toov5.test;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Scanner;

public class Test11 {

    public static void main(String[] args) throws ParseException {
       
        Scanner sc = new Scanner(System.in); 
        System.out.println("请输入年份,判断年份是闰年还是平年:");
        String line = sc.nextLine();
        int year = Integer.parseInt(line);
        boolean result = getYear(year);
        System.out.println(result);        
    }


    public static boolean getYear(int year) {
        Calendar calendar = Calendar.getInstance();
        //设置为那一年的3月1日
        calendar.set(year, 2,1);
        //将日向前减去1
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        //判断是否29天
        return calendar.get(calendar.DAY_OF_MONTH) == 29;
    }

}

 

























以上是关于数学运算类的主要内容,如果未能解决你的问题,请参考以下文章

第50题常用的数学工具类7-高精度浮点运算

数学公式与代码的转换

Java 常用类库 之 Math 数学运算类

数学模运算类

数学运算类

Python内置函数_数学运算类