1.讲解其他类主要是为了锻炼查找API的能力
1.1 System:类
System:类中的方法和属性都是静态的。
out:标准输出,默认是控制台。
in:标准输入,默认是键盘。
描述系统一些信息。
获取系统属性信息:Properties getProperties();
Properties是一个双列集合,一般put 和putAll增加,而是用setProperty方法设置键和值
练习一:System类中Properties子类的应用
import java.util.*;
class SystemDemo
{
publicstatic void main(String[] args)
{
Propertiesprop = System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
//那么可以通过map的方法取出该集合中的元素。
//该集合中存储都是字符串。没有泛型定义。
//如何在系统中自定义一些特有信息呢?
System.setProperty("mykey","myvalue");
//获取指定属性信息。
Stringvalue = System.getProperty("os.name");
System.out.println("value="+value);
//可不可以在jvm启动时,动态加载一些属性信息呢?
//javv–D(key)=(value) 类名
Stringv = System.getProperty("haha");
System.out.println("v="+v);
/*
//获取所有属性信息。
for(Objectobj : prop.keySet())
{
Stringvalue = (String)prop.get(obj);
System.out.println(obj+"::"+value);
}
*/
}
}
1.2 Runtime对象
该类并没有提供构造函数。
说明不可以new对象。那么会直接想到该类中的方法都是静态的。
发现该类中还有非静态方法。
说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。
由这个特点可以看出该类使用了单例设计模式完成。
static Runtime | getRuntime() |
该方式是static Runtime getRuntime();
练习二:Runtime类的应用
class RuntimeDemo
{
publicstatic void main(String[] args) throws Exception
{
//返回与当前 Java 应用程序相关的运行时对象
Runtime r = Runtime.getRuntime();
//运行exe程序,并打开相关联文件
Processp = r.exec("notepad.exe SystemDemo.java");
Thread.sleep(4000);//线程等待4秒
p.destroy();//杀掉process创建的进程,而不能杀掉系统创建的进程,可以用c或c++写的程序调用api杀掉系统进程
}
}
1.3 Date类 (时间)
SimpleDateformat(Date子类)
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era 标志符 | AD | |
y | 年 | 1996; 96 | |
M | 年中的月份 | July; Jul; 07 | |
w | 年中的周数 | 27 | |
W | 月份中的周数 | 2 | |
D | 年中的天数 | 189 | |
d | 月份中的天数 | 10 | |
F | 月份中的星期 | 2 | |
E | 星期中的天数 | Tuesday; Tue | |
a | Am/pm 标记 | PM | |
H | 一天中的小时数(0-23) | 0 | |
k | 一天中的小时数(1-24) | 24 | |
K | am/pm 中的小时数(0-11) | 0 | |
h | am/pm 中的小时数(1-12) | 12 | |
m | 小时中的分钟数 | 30 | |
s | 分钟中的秒数 | 55 | |
S | 毫秒数 | 978 | |
z | 时区 | Pacific Standard Time; PST; GMT-08:00 | |
Z | 时区 | -0800 |
示例
以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间2001-07-04 12:08:56。
日期和时间模式 | 结果 |
"yyyy.MM.dd G 'at' HH:mm:ss z" | 2001.07.04 AD at 12:08:56 PDT |
"EEE, MMM d, ''yy" | Wed, Jul 4, '01 |
"h:mm a" | 12:08 PM |
"hh 'o''clock' a, zzzz" | 12 o'clock PM, Pacific Daylight Time |
"K:mm a, z" | 0:08 PM, PDT |
"yyyyy.MMMMM.dd GGG hh:mm aaa" | 02001.July.04 AD 12:08 PM |
"EEE, d MMM yyyy HH:mm:ss Z" | Wed, 4 Jul 2001 12:08:56 -0700 |
"yyMMddHHmmssZ" | 010704120856-0700 |
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" | 2001-07-04T12:08:56.235-0700 |
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
import java.util.*;
import java.text.*;
class DateDemo
{
publicstatic void main(String[] args)
{
Dated = new Date();
System.out.println(d);//打印的时间看不懂,希望有些格式。
//将模式封装到SimpleDateformat对象中。
SimpleDateFormatsdf = new SimpleDateFormat("yyyy年MM月dd日Ehh:mm:ss");
//调用format方法让模式格式化指定Date对象。
Stringtime = sdf.format(d);
System.out.println("time="+time);
longl = System.currentTimeMillis();
Dated1 = new Date(l);
System.out.println("d1:"+d1);
}
}
1.4 Math类和Random类的应用
import java.util.*;
class MathDemo
{
publicstatic void main(String[] args)
{
/*
Randomr = new Random();
for(intx=0; x<10; x++)
{
//intd = (int)(Math.random()*10+1);
/*nextInt(intn) 返回一个伪随机数,它是取自此随机数生成器序列的、
在 0(包括)和指定值(不包括)之间均匀分布的 int 值。*/
intd = r.nextInt(10)+1;
sop(d);
}
*/
saveTwo(12.3456,3,true);//12.34
}
publicstatic void saveTwo(double d,int scale,boolean isRound)
{
doublebase = Math.pow(10,scale);
doublenum = isRound?Math.round(d*base)/base:((int)(d*base))/base;
sop("num="+num);
}
publicstatic void show()
{
doubled = Math.ceil(16.34);//ceil返回大于指定数据的最小整数。
doubled1 = Math.floor(12.34);//floor返回小于指定数据的最大整数。
longl = Math.round(12.54);//四舍五入
sop("d="+d);
sop("d1="+d1);
sop("l="+l);
//pow(doublea, double b) 返回第一个参数的第二个参数次幂的值。
doubled2 = Math.pow(2,3);
sop("d2="+d2);
}
publicstatic void sop(Object obj)
{
System.out.println(obj);
}
}