常用API(二)

System

System类用于描述系统一些信息,该类中的方法和属性都是静态的。

  • out:标准输出流,默认对应的设备是显示器。
  • in:标准输入流,默认的设备是键盘。

因为Properties是HashTable的子类,也就是Map集合的一个子类对象,那么可以通过Map的方法取出该集合的元素。该集合中存储的都是字符串,没有泛型定义。以下代码用于获取系统属性信息:

Properties prop = System.getProperties(); // 获取到的系统信息都存储到了Properties键值集合当中了。
  • 获取所有属性信息。

    for(Object obj : prop.keySet()) {
        String value = (String)prop.get(obj);
        System.out.println(obj + "::" + value);
    }
  • 获取指定属性信息。

    String value = System.getProperty("os.name");
    System.out.println("value="+value);
  • 如何在系统中自定义一些特有信息呢?

    System.setProperty("mykey", "myvalue");
  • 可不可以在JVM启动时,动态加载一些属性信息呢?

    String v = System.getProperty("haha");
    System.out.println("v="+v);

    图示说明:
    这里写图片描述
    这里写图片描述

Runtime

该类并没有提供构造函数,说明不可以new对象,那么会直接想到该类中的方法都是静态的,但发现该类中还有非静态方法,说明该类肯定会提供方法获取本类对象,而且该方法是静态的,返回值类型是本类类型。查阅API,可知该方法是static Runtime getRuntime(),由这个特点可以看出该类使用了单例设计模式
下面我给出一个该类的演示案例,以供大家参考。

class RuntimeDemo {
    public static void main(String[] args) throws Exception {
        Runtime r = Runtime.getRuntime();
        // Process p = r.exec("D:\\软件\\QQ\\Bin\\QQScLauncher.exe"); // 传的命令的路径可能是错误的,所以可能会抛出异常
        // Thread.sleep(4000); // 等待4s后才杀掉进程,不然就是秒杀
        // p.destroy(); // 杀掉进程

        Process p = r.exec("notepad.exe SystemDemo.java"); // 用记事本程序打开SystemDemo.java文件
    }
}

Math

该类的一些常用方法列出如下:

  • ceil():返回大于指定数据的最小整数。

    double d = Math.ceil(-16.34); 
    System.out.println("d="+d); // -16.0
  • floor():返回小于指定数据的最大整数。

    double d1 = Math.floor(12.34); 
    System.out.println("d1="+d1); // 12.0
  • round():四舍五入。

    long l = Math.round(12.54);
    System.out.println("l="+l); // 13 
  • pow():mⁿ。

    double d2 = Math.pow(2, 3);
    System.out.println("d2="+d2); // 8
  • random():返回带正号的double值,该值大于等于0.0且小于1.0。
    例,生成1~10的伪随机数。

    for (int x = 0; x < 10; x++) {
        int d = (int)(Math.random()*10+1);
        System.out.println(d);
    }

    当然,也可使用Random类的nextInt(int)方法。

    Random r = new Random();
    for (int x = 0; x < 10; x++) {
        int d = r.nextInt(10)+1;
        System.out.println(d);
    }

练习:给定一个小数,保留该小数的后两位。
解:

import java.text.DecimalFormat;

public class MathTest {
    public static void main(String[] args) {
        System.out.println(getNumber(0.9));
    }

    public static String getNumber(double num) {
        DecimalFormat df = new DecimalFormat("#0.00");//模式不能写成"#.00"
        return df.format(num);
    }
}

Date

首先创建Date对象,并打印。

Date d = new Date();
System.out.println(d); // 打印的时间看不懂,希望有些格式。

这时可发现打印的时间看不懂,想要把日期按照我们的习惯格式化一下,咋办呢?可将模式封装到SimpleDateFormat对象中,如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");

然后调用format()方法让模式格式化指定的Date对象。

String time = sdf.format(d);
System.out.println("time="+time);

注意:Date类导入的包是java.util.*,而SimpleDateFormat类导入的包是java.text.*

Calendar

创建Calendar对象,并打印。

import java.util.*;
import java.text.*;

class CalendarDemo {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();

        sop(c.get(Calendar.YEAR)+"年");
        sop((c.get(Calendar.MONTH)+1)+"月");
        sop(c.get(Calendar.DAY_OF_MONTH)+"日");
        sop("星期"+c.get(Calendar.DAY_OF_WEEK));
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

也可用类似制表法的方法来优化:

import java.util.*;
import java.text.*;
class CalendarDemo {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        String[] mons = {"一月", "二月", "三月", "四月",
                         "五月", "六月", "七月", "八月",
                         "九月", "十月", "十一月", "十二月"};
        String[] weeks = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};

        int index = c.get(Calendar.MONTH);
        int index1 = c.get(Calendar.DAY_OF_WEEK);

        sop(c.get(Calendar.YEAR)+"年");
        sop(mons[index]);
        sop(c.get(Calendar.DAY_OF_MONTH)+"日");
        sop(weeks[index1]);
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}

Calendar类中有两个比较常用的方法,我列出如下:

  • add()方法——根据日历的规则,为给定的日历字段添加或减去指定的时间量:public abstract void add(int field, int amount)
  • set()方法——设置日历字段YEAR、MONTH和DAY_OF_MONTH的值。保留其他日历字段以前的值:public final void set(int year, int month, int date)

    class CalendarDemo {
        public static void main(String[] args) {
            Calendar c = Calendar.getInstance();
            // c.set(2016, 7, 23);
    
            c.add(Calendar.DAY_OF_MONTH, -18);
    
            printCalendar(c);
        }
        public static void printCalendar(Calendar c) {
            String[] mons = {"一月", "二月", "三月", "四月",
            "五月", "六月", "七月", "八月",
            "九月", "十月", "十一月", "十二月"};
            String[] weeks = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    
            int index = c.get(Calendar.MONTH);
            int index1 = c.get(Calendar.DAY_OF_WEEK);
    
            sop(c.get(Calendar.YEAR)+"年");
            sop(mons[index]);
            sop(c.get(Calendar.DAY_OF_MONTH)+"日");
            sop(weeks[index1]);
        }
        public static void sop(Object obj) {
            System.out.println(obj);
        }
    }

练习1、获取任意年的二月有多少天。
解:
思路:

  1. 根据指定年设置一个时间就是c.set(year, 2, 1);, 某一年的3月1日。
  2. c.add(Calendar.DAY_OF_MONTH, -1);, 3月1日,往前推一天,就是2月最后一天。
import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        System.out.println("二月有" + getDays(2016) + "天");
    }

    public static int getDays(int year) {
        Calendar c = Calendar.getInstance();
        c.set(year, 2, 1);
        c.add(Calendar.DAY_OF_MONTH, -1);
        return c.get(Calendar.DAY_OF_MONTH);
    }
}

练习2、获取昨天的现在这个时刻。
解:

import java.util.Calendar;

public class CalendarTest1 {

    public static void main(String[] args) {
        System.out.println(getYesterdayTime());
    }
    public static String getYesterdayTime() {
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DAY_OF_MONTH, -1);
        return printCalendar(c);
    }
    public static String printCalendar(Calendar c) {
        String[] months = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };

        String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

        int index = c.get(Calendar.MONTH);
        int index1 = c.get(Calendar.DAY_OF_WEEK);

        StringBuilder sb = new StringBuilder();
        sb.append(c.get(Calendar.YEAR)).append("年");
        sb.append(months[index]);
        sb.append(c.get(Calendar.DAY_OF_MONTH)).append("日");
        sb.append(weeks[index1]).append("  ");
        sb.append(c.get(Calendar.HOUR)).append("时");
        sb.append(c.get(Calendar.MINUTE)).append("分");
        sb.append(c.get(Calendar.SECOND)).append("秒");
        sb.append(c.get(Calendar.MILLISECOND)).append("毫秒");

        return sb.toString();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值