Java笔记 - 基础类库

1. System类
System类被final修饰,不能被实例化。
重要方法:
1. public static Properties getProperties():确定当前的系统属性。
Properties是java.util包中的一个类,表示了一个持久的属性集。
实际上,Properties类是HashTable的一个子类,所以Properties也是一个集合,属性集。属性列表中每个键及其对应值都是一个字符串。
该方法可以获取到系统的属性信息,然后存储到HashTabel集合中。如果想要获取这些信息,可以使用keySet和entrySet方法。这些方法是带泛型的,Properties类是不带泛型的,因为它的键值的类型是固定的,就是String类型的。
但是最好使用Properties类自己的方法来完成元素的存储和取出操作:
存储:public Object setProperty(String key,String value)调用 Hashtable 的方法 put,设置一些自定义属性。
取出:public Set< String> stringPropertyNames()返回此属性列表中的键集。

Properties prop = System.getProperties();
Set<String> keySet = prop.stringPropertyNames();

for (String key : keySet) {
    String value = prop.getProperty(key);
    System.out.println(key+"="+value);
}

输出结果:
系统属性

2.public static String getProperty(String key)获取指定键指示的系统属性。

private static final String LINE_SEPARATOR = System.getProperty("line.separator");

public static void main(String[] args){
    System.out.println("haha"+LINE_SEPARATOR+"xixi")
}

输出结果:
haha
xixi

3.long currentTimeMillis();获取当前时间的毫秒值。 可以用来判断一段代码执行所需的时间

System.out.println("codebegin="+System.currentTimeMillis());
//code...
System.out.ptintln("codeend="+System.currentTimeMillis());

2.Runtime类
Runtime类不可以创建对象,但是可以使用静态方法public static Runtime getRuntime()来获得一个与当前 Java 应用程序相关的运行时对象实例。而且只能获取一个对象实例,说明Runtime类使用了单例设计模式。这时我们就可以使用这个实例来获取Java虚拟机的空闲内存量等信息。
public Process exec(String command):在单独的进程中执行指定的字符串命令。
该Runtime对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。

Runtime rt = Runtime.getRuntime();
Process p = rt.exec("notepad.exe");//创建一个子进程
Thread.sleep(5000);
p.destroy();//通过p来控制进程

3.Math类
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。Math类中的方法都是静态的。
常用方法:
abs():返回参数的绝对值
static double ceil(double a):返回大于参数的最小整数
static double floor(double a):返回小于参数的最小整数
round():返回四舍五入的整数
pow(a,b):返回a的b次幂
随机数

//在1到10之间随机
//第一种方法:使用Math类中的random()方法
for (int i = 0; i < 10; i++) {
    double d = Math.ceil(Math.random()*10);
    System.out.println(d);
}

//第二种方法:使用随机数生成器Random类
Random r = new Random();
for (int i = 0; i < 10; i++) {      
    double d = Math.ceil((r.nextDouble()*10));
    System.out.println(d);
}

4.Date类
毫秒值与日期对象相互转换
因为日期对象不利于我们计算和做大小比较等操作,所以将日期转换成毫秒值再做计算,当然Date类实现了Comparable接口,具备比较性,所以也提供了一些用于比较的方法。

//毫秒值-->日期对象
Date d1 = new Date(1496731768455l);
System.out.println(d1);
Date d2 = new Date();
d2.setTime(1496732248833l);
System.out.println(d2);
//日期对象-->毫秒值
System.out.println(d2.getTime());
//比较
System.out.println(d1.compareTo(d2));

输出结果:

Tue Jun 06 14:49:28 CST 2017
Tue Jun 06 14:57:28 CST 2017
1496732248833
-1

格式化日期时间格式
在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
DateFormat类是java.text包中的一个类,是抽象的,不能直接实例化。所以需要一个静态方法来获取DateFormat对象
public static final DateFormat getDateInstance(int style):获取日期格式器,该格式器具有默认语言环境的给定格式化风格。
获取到DateFormat格式器对象后,就需要使用这个格式器取格式化对象
public final String format(Date date):将一个 Date 格式化为日期/时间字符串。

Date d = new Date();

DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(df.format(d));

DateFormat df2 = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(df2.format(d));

输出结果:

2017年6月7日
上午09时28分46秒

自定义日期时间格式
DateFormat类中并没有自定义时间格式的方法,因为DateFormat类不能创建实例,只能获取实例。所以实例的格式已经被固定了,只有FULL、LONG、MEDIUM 和 SHORT四种格式可以选择。
但是我们可以new他的子类SimpleDateFormat类。它的构造方法可以自定义日期时间格式。
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。””” 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。

Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy'年'-MM'月'.dd'ri'");
System.out.println(df.format(d));

输出结果:

2017年-06月.07ri

日期格式转为日期对象
日期格式是字符串格式的,转为日期对象是通过DateFormat中的parse方法。

//解析默认日期格式
String str_date1 = "2017-6-7";
Date d1 = DateFormat.getDateInstance().parse(str_date1);
System.out.println(d1);
//解析固定日期格式
String str_date2 = "2017年6月7日";
Date d2 = DateFormat.getDateInstance(DateFormat.LONG).parse(str_date2);
System.out.println(d2);
//解析自定义日期格式
String str_date3 = "2017年-06月.07ri";
Date d3 = new SimpleDateFormat("yyyy'年'-MM'月'.dd'ri'").parse(str_date3);
System.out.println(d3);

输出结果:

Wed Jun 07 00:00:00 CST 2017
Wed Jun 07 00:00:00 CST 2017
Wed Jun 07 00:00:00 CST 2017

5.Calendar类
因为Date不利于实现国际化,所以在JDK1.1版本后就被Calendar类取代了。Calendar类也是抽象的,不能直接创建对象,但可以通过静态方法getInstance()获取到对象。
打印Calendar对象发现它类似于Map集合,内容都是键值对,所以可以通过time,YEAR,MONTH这些键就能拿到相应的值。
注意:MONTH是从0开始的,所以要加1
DAY_OF_WEEK周日是1,周六是7

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//月份从0开始,要加1
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);//星期日是1
System.out.println(year+"年"+month+"月"+day+"日"+week);

输出结果:

2017年6月7日4

Calendar对象还可以使用set方法指定日期,使用add方法加上或减去指定的时间量。

Calendar c2 = Calendar.getInstance();
c2.set(2017, 7, 10);
c2.add(Calendar.MONTH, 2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值