Java的简单理解(6)

时间:2021-10-15 作者:qvyue
Java的简单理解(6)
Java
5.6 System类与Runtime类
5.6.1 System类

Java不支持全局函数和全局变量,Java设计者将一些与系统相关的重要函数和变量收集到了一个System类中,System类中的所有成员都是静态的,当要应用这些变量和方法的时候,直接使用System类名做前缀就可以了。

1. exit()方法

终止当前正在运行的虚拟机,参数用作状态码,按照惯例,非0的状态码表示异常终止。事实上要退出Java程序,可以使用destory()退出一个独立运行的过程。

2. currentTimeMills方法
System.currentTimeMills()产生一个当前的毫秒数,这个毫秒就是自1970年1月1日0时起的毫秒数。

5.6.2 Runtime类

Runtime类封装了Java命令本身所启动的实例进程,也就是封装了Java虚拟机进程。一个Java虚拟机对应一个Runtime实例对象。Runtime类中的许多方法和System类中的方法重复,不能直接创建Runtime的实例对象,也就是不能通过new来创建,只能通过Runtime.getRuntime静态方法来获得Runtime实例对象的引用。

Java虚拟机本身就是Windows上的一个进程,这个进程可以启动其他的Windows程序,通过这种方式启动的Windows程序实例就称为子进程。Java虚拟机调用Runtimeexec方法可以启动这个子进程,其返回值就是代表子进程的Process对象。

Process类是一个抽象类,封装一个进程。

5.7 Date类和Carlendar类

Java语言提供了以下两个类来处理日期。

  • java.util.Date
    包装了一个long类型的数据,表示与GMT(格林威治标准时间)的1970年1月1日00:00:00这一刻所相距的毫秒数。

  • java.util.Calendar
    可以灵活地设置或读取日期中的年,月,日,时,分,秒等信息。

5.7.1 Date类

java.util包中的Date类表示特定的时间,精确到毫秒。使用Date类的无参构造函数Date()创建的对象可以获取本地当前时间。

Date();

分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。在类Date所有可以接受或返回年,月,日,小时,分钟和秒值的方法中,将使用下面的表示形式。

  • 年份y由整数y-1900表示
  • 月份由从0-11的整数表示。0是一月,1是二月等,因此11是十二月。
  • 日期(一月中的某天)按通常方式由整数1-31表示
  • 小时由从0-23的整数表示,因此从午夜到1 a.m.的时间是0点,从中午到1 p.m.的时间是12点。
  • 分钟按通常方式由0-59的整数表示。
  • 秒由0-61的整数表示,值60和61只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的Java实现中。若按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循ISO C的日期和时间约定。

3中格式输出时间

Date nowTime = new Date();
System.out.println(nowTime);

SimpleDateFormat matter1 = new SimpleDateFormat("'time':yyyy年mm月dd日E 北京时间");
System.out.println(matter1.format(nowTime));

SimpleDateFormat matter2 = new SimpleDateFormat("北京时间:yyyy年mm月dd日hh时mm分ss秒");
System.out.println(matter2.format(nowTime));

Date date1 = new Date(1000);
Date date2 = new Date(-1000);

System.out.println(matter2.format(date1));
System.out.println(matter2.format(date2));

System.out.println(new Date(System.currentTimeMillis()));

Tue Apr 17 21:54:20 CST 2018
time:2018年54月17日星期二 北京时间
北京时间:2018年54月17日09时54分20秒
北京时间:1970年00月01日08时00分01秒
北京时间:1970年59月01日07时59分59秒
Tue Apr 17 21:54:20 CST 2018
        
5.7.2 Calendar类

java.util.Calendar类是一个抽象类。它为特定瞬间与一组诸如YEARMONTHDAY_OF_MONTHHOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

抽象类不能采用new实例化,但可以使用Calendar类的static方法getInstance()初始化一个日历对象。

Calendar calendar = Calendar.getInstance();

setget方法可用来设置和读取日期的特定部分,比如年,月,日,时,分,秒等。

将日历翻到任何一个时间,参数year取负数时表示公元前。

public int get(int field);

可以获取有关年份,月份,小时,星期等信息,参数field的有效值由Calendar的静态常量指定。

calendar.get(Calendar.MONTH);

返回一个整数,如果该整数是0表示当前日历是在一月,该整数是1表示当前日历是在二月等。

public long getTimeInMillis();

返回此calendar的时间值,以毫秒为单位。

public class GregorianCalendar1 {

    public static void main(String[] args) {
        
        GregorianCalendar cal = new GregorianCalendar(); // 表示当前时间
        System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss EEEE").format(cal.getTime()));
        
        cal.clear();
        cal.set(Calendar.YEAR, 2018);
        cal.set(Calendar.MONTH, Calendar.JULY);
        cal.set(Calendar.DAY_OF_MONTH, 15);
        cal.set(Calendar.HOUR_OF_DAY, 12);
        cal.set(Calendar.MINUTE, 33);
        cal.set(Calendar.SECOND, 55);
        
        System.out.println(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss EEEE").format(cal.getTime()));
    }

}

2018-17-17 09:17:25 星期二
2018-33-15 12:33:55 星期日

    private void initDate() {
        String temp = "2018-04-19";
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = format.parse(temp);
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            calendar.set(Calendar.DATE,19); // 设置该月的日期 即4月19日
            int a = calendar.get(Calendar.DAY_OF_WEEK); // 星期四,但是显示是5,因为星期日是1,星期六是7
            int b = calendar.getActualMaximum(Calendar.DATE); // 得到字段Calendar.DATE在日历中的最大值
            calendar.add(Calendar.DATE,1); // 天数增加1
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
5.8 Math与Random类
5.8.1 Math类

java.lang包中的Math类也称数学类,是一个工具类,它在解决与数学有关的一些问题时有着非常重要的作用。Math类包含许多用来进行科学计算的类方法,涉及到大多数数学函数,如sin,cos,exp,abs等,这些方法可以直接通过类名调用。Math类还提供了Math.PI和Math.E两个静态数学常量:E和PI,它们的值分别为2.7182828284590452354和3.14159265358979323846,该类是final的,不能被继承,类中的方法和属性全部是静态的,不允许在类的外部创建Math类的对象。因此只能使用Math类的方法而不能对其做任何更改。

Math.abs(12.3);                 //12.3 返回这个数的绝对值  
Math.abs(-12.3);                //12.3  
  
Math.copySign(1.23, -12.3);     //-1.23,返回第一个参数的量值和第二个参数的符号  
Math.copySign(-12.3, 1.23);     //12.3  
  
Math.signum(x);                 //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0  
Math.signum(12.3);              //1.0  
Math.signum(-12.3);             //-1.0  
Math.signum(0);                 //0.0  
  
  
//指数  
Math.exp(x);                    //e的x次幂  
Math.expm1(x);                  //e的x次幂 - 1  
  
Math.scalb(x, y);               //x*(2的y次幂)  
Math.scalb(12.3, 3);            //12.3*2³  
  
//取整  
Math.ceil(12.3);                //返回最近的且大于这个数的整数13.0  
Math.ceil(-12.3);               //-12.0  
  
Math.floor(12.3);               //返回最近的且小于这个数的整数12.0  
Math.floor(-12.3);              //-13.0  
  
//x和y平方和的二次方根  
Math.hypot(x, y);               //√(x²+y²)  
  
//返回概述的二次方根  
Math.sqrt(x);                   //√(x) x的二次方根  
Math.sqrt(9);                   //3.0  
Math.sqrt(16);                  //4.0  
  
//返回该数的立方根  
Math.cbrt(27.0);                //3   
Math.cbrt(-125.0);              //-5  
  
//对数函数  
Math.log(e);                    //1 以e为底的对数  
Math.log10(100);                //10 以10为底的对数  
Math.log1p(x);                  //Ln(x+ 1)  
  
//返回较大值和较小值  
Math.max(x, y);                 //返回x、y中较大的那个数  
Math.min(x, y);                 //返回x、y中较小的那个数  
  
//返回 x的y次幂  
Math.pow(x, y);                   
Math.pow(2, 3);                 //即2³ 即返回:8  
  
//随机返回[0,1)之间的无符号double值  
Math.random();                    
  
//返回最接近这个数的整数,如果刚好居中,则取偶数  
Math.rint(12.3);                //12.0   
Math.rint(-12.3);               //-12.0  
Math.rint(78.9);                //79.0  
Math.rint(-78.9);               //-79.0  
Math.rint(34.5);                //34.0  
Math.rint(35.5);                //36.0  
  
Math.round(12.3);               //与rint相似,返回值为long  
  
//三角函数  
Math.sin(α);                    //sin(α)的值  
Math.cos(α);                    //cos(α)的值  
Math.tan(α);                    //tan(α)的值  
  
//求角  
Math.asin(x/z);                 //返回角度值[-π/2,π/2]  arc sin(x/z)  
Math.acos(y/z);                 //返回角度值[0~π]   arc cos(y/z)  
Math.atan(y/x);                 //返回角度值[-π/2,π/2]  
Math.atan2(y-y0, x-x0);         //同上,返回经过点(x,y)与原点的的直线和经过点(x0,y0)与原点的直线之间所成的夹角  
  
Math.sinh(x);                   //双曲正弦函数sinh(x)=(exp(x) - exp(-x)) / 2.0;  
Math.cosh(x);                   //双曲余弦函数cosh(x)=(exp(x) + exp(-x)) / 2.0;  
Math.tanh(x);                   //tanh(x) = sinh(x) / cosh(x);  
  
//角度弧度互换  
Math.toDegrees(angrad);         //角度转换成弧度,返回:angrad * 180d / PI  
  
Math.toRadians(angdeg);         //弧度转换成角度,返回:angdeg / 180d * PI  
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。