15.Java高级视频_IO输入与输出(第十八天)1

一  其它对象 -  System

现在来看一下一些其他类是如何使用的。

比起了解这些类的方法怎么使用,在这几节学习过程中,

更重要的是要掌握如何通过查阅API文档实现功能

1、System类的方法

通过查阅API文档可了解System类的各个方法,下面只截取一部分:

static void exit(int status) —— 终止当前正在运行的 Java 虚拟机。
static long currentTimeMillis() ——返回以毫秒为单位的当前时间。
static Properties getProperties() ——确定当前的系统属性。  
static void setIn(InputStream in) ——重新分配“标准”输入流。
static void setOut(PrintStream out) ——重新分配“标准”输出流。
static void setProperties(Properties props) ——将系统属性设置为 Properties 参数。

其中比较重要的是:getProperties()方法,可以获取系统属性

* System类中的方法和属性都是静态的;

* 属性in:标准输入,默认是键盘;

*属性out:标准输出,默认是控制台。
 

2、示例代码

import java.util.*;

class Demo {
	public static void main(String args[]) throws Exception {
		Properties prop = System.getProperties();
		// 因为Properties是Hashtable的子类,也就是Map集合的一个类的对象。
		// 那么可以通过Map的方法获取出该集合中的元素。
		// 该集合中存储都是字符串,没有泛型定义

		// 如何在系统中自定义一些特有信息呢?
		System.setProperty("mykey", "myvalue");

		// 可不可以在jvm启动时,动态加载一些属性信息呢
		// 命令行 java -Dhaha=qqqq 类

		// 获取指定属性信息
		String value2 = System.getProperty("os.name");
		System.out.println("value=" + value2);
		// 获取所有属性信息。
		for (Object obj : prop.keySet()) {
			String value = (String) prop.get(obj);
			System.out.println(obj + "::" + value);
		}
	}
}

二  其他对象 - Runtime

1、关于Runtime

  • public class Runtime extends Object
  • 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
  • “因为Java程序是跨平台的,可以借Runtime对象来使应用程序能够与其运行的环境相连接。”

2、由Runtime实例对象引发的思考

注意下面这段话的思路:

因为Runtime类没有构造函数,也就是不能直接创建对象,

那么一般来说它的方法应该是静态的,再看它有方法摘要发现也不是静态方法。

那么,它应该提供了一个方法给我获取它的对象,用来使用它的方法。

查阅找到这个方法就是getRuntime(),返回与当前 Java 应用程序相关的运行时对象。

这个方法不需要自己创建,系统运行起来就已经有Runtime的对象,只要获取来用就行了。

联想到什么?单例设计模式。

对于Runtime对象,由于Runtime类并没有提供构造函数,说明不可以new对象。

那么会直接想发到该类中的方法都是静态的。但是,该类中还有非静态方法。

说明该类肯定会提供了方法获取本类的对象。而且该方法是静态的,并且返回类型是本类类型。

该方式是 static Runtime getRuntime();

3、关于“exec”

exec,其实就是“execute”(执行)的缩写。

通过“public Process exec(String command)  throws IOException”方法了解:

import java.io.IOException;

public class Demo {
    public static void main(String[] args) {

        Runtime r = Runtime.getRuntime();
        
        try {
            r.exec("c:\\winmine.exe"); //这里指运行所写路径有的程序
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

上面的程序,可以打开C盘中的winmine.exe程序。

注意,如果上面不写路径,例如 r.exec("winmine.exe"); ,

就会在环境变量有的路径中逐一找有没有这个winmine.exe程序。

此外,还能打开记事本文档,例如:  r.exec("notepad.exe Test.txt");

4、关于“Process”

再看另一个类 - Process

Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。

import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException,
            InterruptedException {

        Runtime r = Runtime.getRuntime();

        Process p = r.exec("c:\\winmine.exe");
        Thread.sleep(4000);
        p.destroy(); // 杀掉进程,如果不等待,一下子就被杀掉了

    }
}

只能杀掉自己在程序中启动的程序,不能杀掉像系统程序那种。

三  其他对象 - Date类

注意是Util包的Date类,不是sql包的。

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

注意下面的思路:

System.out.println(new Date());输出的时间看不懂,

我们希望它可以有一些封装好格式的类,一般API文档中,

一个类会有“另请参见:”这一行,提示与当前类相关联的类。

由此,我们找到下面的关系:

java.lang.Object
    |---- java.text.Format
          |---- java.text.DateFormat
                |---- java.text.SimpleDateFormat

注意:SimpleDateFormat是java.text文本包的,要 import java.text.*;

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

class Demo {
    public static void main(String args[]) throws Exception {
        Date d = new Date();
        System.out.println(d);
        // 输出“Tue Dec 16 09:44:30 CST 2014”,看不懂,所以希望有些格式
        // 将模式封装到 SimpleDateFormate对象中
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        // 调用 format方法让模式格式化指定的date对象
        String time = sdf.format(d);
        System.out.println(time);
    }
}

四  其他对象 - Calendar类

按照上面SimpleDateFormat的方法,如果我们只取年份,

也要写好几条语句才行,有没有像getYear()这样简单的方法呢?

可以通过Calendar类来获取年、月、日信息,Calendar是日历的意思。

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等

日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

并且,还能获取时区等各种信息。

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

class Demo {
    public static void main(String args[]) throws Exception {
        Calendar c = Calendar.getInstance();
        c.set(2012, 2, 23); // 指定时间
        c.add(Calendar.MONTH, 4);// 增加时间
        c.add(Calendar.MONTH, -4);// 往前推时间,不仅仅是减一年
        String[] mons = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十",
                "十一", "十二" };
        String[] weeks = { "日", "一", "二", "三", "四", "五", "六" };
        sop(c.get(Calendar.YEAR) + "年" + mons[c.get(Calendar.MONTH)] + "月"
                + c.get(Calendar.DAY_OF_MONTH) + "日 星期"
                + weeks[c.get(Calendar.DAY_OF_WEEK) - 1]);
        // 输出 : 2012年三月23日 星期五

        sop2(c.get(Calendar.YEAR) + "年");
        sop2(c.get(Calendar.MONTH) + "月");
        sop2(c.get(Calendar.DAY_OF_MONTH) + "日");
        // 输出 : 2012年2月23日
    }

    public static void sop(Object obj) {
        System.out.println(obj.toString());
    }

    public static void sop2(Object obj) {
        System.out.print(obj.toString());
    }
}

两个练习:

  1. 获取任意年的二月有多少天。(思路:根据指定年设置3月1日,然后天数往前推一天,就是二月最后一天了)

  2. 获取昨天的现在这个时刻。 (思路:天数减1)

五  其他对象 Math - Random

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

要熟练下面这些常见运算的方法:

static double ceil(double a)   返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
static double floor(double a)   返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
static long round(double a)   返回最接近参数的 long。
static double pow(double a, double b)   返回第一个参数的第二个参数次幂的值。
static double random()   返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
 

import java.util.Random;

class Demo {
    public static void main(String args[]) throws Exception {
        
        sop("===============================================");
        for (int x = 0; x < 10; x++) {
            int d = (int) (Math.random() * 10 + 1);
            sop(d);
        }
        sop("===============================================");
          Random r = new Random();
        for (int x = 0; x < 10; x++) {
            int d = r.nextInt(10)+1;
            sop(d);
        }
        sop("===============================================");
        show();

    }

    public static void show() {
        double d = Math.ceil(16.34); // d=17.0
        double d1 = Math.floor(12.34); // d1=12.0
        long l = Math.round(12.54);//l=13
        sop("d=" + d);
        sop("d1=" + d1);
        sop("l=" + l);

        double d2 = Math.pow(2, 3);//d2=8.0
        sop("d2=" + d2);
    }

    public static void sop(Object obj) {
        System.out.println(obj.toString());
    }
}

//由于第18天的视频后半段是开始讲IO流的,因此将博文分开两篇,以便区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值