@liayun
2016-06-07T17:10:01.000000Z
字数 5066
阅读 1584
java基础
System描述系统一些信息,获取系统属性信息:Properties getProperties()
。类中的方法和属性都是静态的。
因为Properties
是HashTable
的子类,也就是Map
集合的一个子类对象,那么可以通过map
的方法取出该集合的元素。该集合中存储的都是字符串,没有泛型定义。
Properties prop = System.getProperties();
获取所有属性信息。
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);
图示说明:
该类并没有提供构造函数,说明不可以new对象,那么会直接想到该类中的方法都是静态的,但发现该类中还有非静态方法,说明该类肯定会提供方法获取本类对象,而且该方法是静态的,返回值类型是本类类型。该方法是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文件
}
}
创建Date对象,并打印。
Date d = new Date();
System.out.println(d); // 打印的时间看不懂,希望有些格式。
将模式封装到SimpleDateFormat对象中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
调用format()方法让模式格式化指定Date对象。
String time = sdf.format(d);
System.out.println("time="+time);
注意:Date类导入的包是java.util.*
,而SimpleDateFormat类导入的包是java.text.*
。
创建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);
}
}
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、获取任意年的二月有多少天。
解:
思路:
c.set(year, 2, 1);
, 某一年的3月1日。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();
}
}
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);
}
}