13:常用类

第一  System类

一、概述:

1、System类是描述系统一些信息的类,不可以实例化,也无构造函数

2、System类中的方法和属性都是静态的

      in  :标准输入流,默认是键盘

      out:标准输出流,默认是控制台

二、方法:Properties集合的方法

1、获取系统的属性信息:

      Properties getProperties();

说明:1)此方法返回的双列集合,即键值对;因为Properties是Hahstable的子类,也就是Map集合的一个子类对象,那么通过Map方法取出该集合中的元素。

           2)该集合存储的都是字符串,不用泛型定义

2、获取指定属性信息:

      String System.getProperty(String key);(取,用set集合)

3、在系统内定义特有信息:

      void System.setProperty(String key,String value);相当于put(存)

4、如何在jvm启动时,加载一些属性信息:

      通过命令:java -D<name>=<value> 可以设置特有的系统属性信息

import java.util.Properties;import java.util.Set;class SystemDemo {	private static final String LINE_SEPARATOR = System			.getProperty("line.separator"); // 这是一启动就获取到	// System.out.println("hello"+LINE_SEPARATOR+" world");	// \r\n,window这样换行,但Java是跨平台的,这样写所有的系统都能识别。这是键的值获取键的值public class SystemDemo	// {	public static void main(String[] args) {		/*		 * 		 * System:类中的方法和属性都是静态的。		 * 		 * 常见方法:		 * 		 * long currentTimeMillis();获取当前时间的毫秒值。		 */		// long l1 = 1335664696656l;//System.currentTimeMillis();		// System.out.println(l1/1000/60/60/24);//1335664696656		// code..加个程序,显示程序运行的时间		// long l2 = System.currentTimeMillis();//距离上一个时间走了多长时间		// System.out.println(l2-l1);		// demo_1();		// 给系统设置一些属性信息。这些信息是全局,其他程序都可以使用。		// System.setProperty("myclasspath", "c:\myclass");	}	public static void demo_1() {		// 获取系统的属性信息,并存储到了Properties集合中。		/*		 * 		 * properties集合中存储都是String类型的键和值。		 * 		 * 最好使用它自己的存储和取出的方法来完成元素的操作。		 */		Properties prop = System.getProperties();		Set<String> nameSet = prop.stringPropertyNames();// 用set集合		// 遍历set集合,获取全部信息		for (String name : nameSet) {			String value = prop.getProperty(name);// getProperty返回string类型,不用强转了			System.out.println(name + "::" + value);		}	}

第二  Runtime类

一、概述:

1、每个java应用程序都有一个Runtime类实例,使应用程序能与其中运行的环境相连接,应用程序不能创建自己的Runtime类的实例,是由系统底层自己创建的。

2、该类并未提供构造函数:说明不可以new对象,那么会直接想到该类中的方法都是静态的。查阅API文档发现,该类中还有非静态方法,说明该类中肯定会提供方法获取该类对象,并且该方法是静态的,且返回值类型是该类类型。

3、由这个特点可以看出该类使用了单例设计模式。

二、方法:

1、获取本类对象:

       static Runtime getRuntime();

2、在单独的进程中执行指定字符串命令:

      Process exec(String command);  execute: 执行。 xxx.exe 

3、在Process中有一个杀掉子进程的方法,可将exec方法开启的进程杀掉

      void destroy();

import java.io.IOException;class RuntimeDemo {	public static void main(String[] args) {		// 获取本类对象		Runtime runtime = Runtime.getRuntime();		try {			// 调用对象执行命令,返回一个进程			Process p = runtime.exec("notepad.exe");			// 转义字符加路径			try {				Thread.sleep(5000); // 睡了5秒,为了看见杀			} catch (InterruptedException e) {				e.printStackTrace();			}			// 杀掉子进程			p.destroy();			// 通过程序打开文件			runtime.exec("notepad.exe  RuntimeDemo.java");		} catch (IOException e) {			e.printStackTrace();		}	}}

第三  Math类

一、概述:

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

二、方法:

1、double ceil(double d)      --->   返回大于指定数据的最小整数 2、double floor(double d)    --->   返回小于指定数据的最大整数

3、double pow(double a,double b)         --->   返回a的b次方 4、double/float round(double/float m)    --->   返回m四舍五入的值

5、double random()    --->   返回0到1的随机数,包含0不包含1

public class MathDemo {	public static void main(String[] args) {		method();		randomNum();		saveTwo(12.3456, 2, true);	}	/*	 * 练习。给定一个小数。 保留该两位小数。	 */	public static void saveTwo(double d, int scale, boolean isRound) {		double base = Math.pow(10, scale);		double num = isRound ? Math.round(d * base) / base : ((int) (d * base))				/ base;		System.out.println("num=" + num);		/*		 * double d1 = d*100; sop("d1="+d1); d1 = d1+0.5; double d2 = (int)d1;		 * sop("d2="+d2); double d3 = d2/100; sop("d3="+d3);		 */	}	/*	 * math方法演示	 */	public static void method() {		double d = Math.ceil(-16.23);// 返回大于指定数据的最小整数		System.out.println("Math.ceil:" + d);		double d1 = Math.floor(-12.99);// 返回小于给定数据的最大整数		System.out.println("Math.floor:" + d1);		long l = Math.round(-12.46);// 四舍五入		System.out.println("Math.round:" + l);		double d2 = Math.pow(2, 3);// 返回第一个参数的第二个参数次幂的值。		System.out.println("Math.pow:" + d2);	}	/*	 * 取随机数	 */	public static void randomNum() {		Random r = new Random();// 可以用math中的random方法,也可以使用Random类(变成了对象)		for (int x = 0; x < 10; x++) {			// double d = Math.random();			// double d = Math.ceil(Math.random()*10);			// double d = (int)(Math.random()*6+1); 筛子1-6			// double d = (int)(r.nextDouble()*6+1);			int d = r.nextInt(10) + 1; // 上边的这个的简写			System.out.println(d);		}	}}

第三  时间类

一、Date类

1、概述:类 Date 表示特定的瞬间,精确到毫秒。

2、转换:因为Date类获取到当前时间并以美国方式显示,所以并不是我们所需要的,也就是这样我们需要用到SimpleDateFormat类为其进行转成我们想要的类型。SimpleDateFormat接收一个模式,用于格式化。

public class DateDemo { public static void main(String[] args) throws ParseException {   methodDemo_3(); } 

  * 日期对象和毫秒值之间的转换。

  *

  * 毫秒值-->日期对象 :

  * 1,通过Date对象的构造方法  new Date(timeMillis);

  *  2,还可以通过setTime设置。

  *  因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。

  *  

  *

  * 日期对象-->毫秒值:

  * getTime方法。

  * 因为可以通过具体的数值进行运算。

  *

 public static void methodDemo_1() {  long time = System.currentTimeMillis();////	 System.out.println(time);//1335671230671  Date date = new Date();//将当前日期和时间封装成Date对象。  System.out.println(date);//Sun Apr 29 11:48:02 CST 2012  Date date2 = new Date(1335664696656l);//将指定毫秒值封装成Date对象。从上边看出走了多长时间  System.out.println(date2); }

  * 对日期对象进行格式化。

  * 将日期对象-->日期格式的字符串。(转换成本国的)

  * 使用的是DateFormat类(抽象类)中的format方法。

 public static void methodDemo_2() {  Date date = new Date();  //获取日期格式对象。具体着默认的风格。 FULL 、LONG等可以指定风格  DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);//日期 dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);//日期时间//	 System.out.println(dateFormat);

专门用于生产对象的就是工厂,如单例模式。虽然DateFormat不能new对象,

但是他可以通过getDateInstance这个方法来获取对象(实例),getDateTimeInstance获取日期的实例

  //如果风格是自定义的如何解决呢?

  dateFormat = new SimpleDateFormat("yyyy--MM--dd");//用  dateFormat的子类  String str_date = dateFormat.format(date);//dateFormat实例的format方法,它date传进去   System.out.println(str_date); }

  * 将日期格式的字符串-->日期对象。 (网上写下日期,网络把它需要转成对象进行操作)

  * 使用的是DateFormat类中的parse()方法。

  *

  * @throws ParseException ,写了不是日期格式的字符串

 public  static void methodDemo_3() throws ParseException {  String str_date = "2012年4月19日"; //写了个日期字符串  str_date = "2011---8---17";//DateFormat对象,写成2012年4月19日就需要改格式  DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);   dateFormat = new SimpleDateFormat("yyyy---MM---dd"); //解析自定义格式需要这么写    Date date = dateFormat.parse(str_date);   System.out.println(date); } } 

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

  1. public class DateDemo {      public static void main(String[] args) {          Date d = new Date();          System.out.println(d);//打印的时间不是理想中的格式,所以需要对其进行转化                    //将模型封装在simpledateformat对象中,SimpleDateFormat接收一个模式,用于格式化          SimpleDateFormat smf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");          //调用format方法让模式格式化指定的date对象          String time = smf.format(d);          System.out.println(time);                    long l = System.currentTimeMillis();          Date d1 = new Date(l);          System.out.println(d1);      } 

练习:

 * "2012-3-17"到"2012-4-6"

 * 中间有多少天?

 * 思路:

 * 两个日期相减就哦了。

 * 咋减呢?

 * 必须要有两个可以进行减法运算的数。

 * 能减可以是毫秒值。如何获取毫秒值?通过date对象。

 * 如何获取date对象呢?可以将字符串转成date对象。

 *

 * 1,将日期格式的字符串转成Date对象。

 * 2,将Date对象转成毫秒值。

 * 3,相减,在变成天数

public class DateTest {	public static void main(String[] args) throws ParseException {		String str_date1 = "2012-3-17";		String str_date2 = "2012-4-18";		test(str_date1, str_date2);	}	public static void test(String str_date1, String str_date2)			throws ParseException {		// 1,将日期字符串转成日期对象。		// 定义日期格式对象。		DateFormat dateFormat = DateFormat.getDateInstance(); // 方法1		dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 方法2,俩种都行,择其一		Date date1 = dateFormat.parse(str_date1);		Date date2 = dateFormat.parse(str_date2);		// 2,将Date对象转成毫秒值。		long time1 = date1.getTime();		long time2 = date2.getTime();		long time = Math.abs(time1 - time2); // 变成正数		int day = getDay(time);		System.out.println(day);	}	private static int getDay(long time) {		int day = (int) (time / 1000 / 60 / 60 / 24);		return day;	}}

Date & DateFormat 类

Date类在java.util包中。使用Date类的无参数构造方法创建的对象可以获取本地当前时间。

SimpleDateFormat来实现日期的格式化。

public SimpleDateFormat(String pattern);

该构造方法可以用 参数pattern 指定的格式创建一个对象,该对象调用:

public String format(Date date):方法格式化时间对象date

静态工厂方法是一种模式

首先是一个静态方法,然后通过这个方法可以返回指定的对象,而不用具体去关心这个这个对象是如何创建的。

另外一种方法


二、Calendar类(Date类因为不够国际化,被它取代了)

1、概述:

Calendar是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH等日历字段之间的转换提供了一些方法。Calendar可以对年月日等时间进行获取。并提供了相应的子段值。可参阅API文档。也不能new

2、方法:

1)获取年份:Calendar.YEAR 2)获取月份:Calendar.MONTH 3)获取日期:Calendar.DAY_OF_MONTH 4)获取星期:Calendar.DAY_OF_WEEK 5)获取小时:Calendar.HOUR_OF_DAY 6)获取分钟:Calendar.MINUTE 7)获取秒数:Calendar.SECOND

8)为给定的日历字段添加或减去指定的时间值:   --->   void add(int field,int amount);

9)获取指定的日历字段对应的时间值:                  --->   int get(int field);

10)将给定日历字段对应的时间值设置为给定值:  --->   void set(int field,int value);  设置日历字段 YEAR、MONTH和DAY_OF_MONTH的值: --->   void set(int year,int month,int date);

  1. public static void main(String[] args) {
  2.   Calendar c = Calendar.getInstance();
  3. 指定日期,偏移
  1.  } 
public static void showDate(Calendar c) {  int year = c.get(Calendar.YEAR); YEAR是静态的已有的字段,不能直接写  int month = c.get(Calendar.MONTH)+1; ,月是0-11  int day = c.get(Calendar.DAY_OF_MONTH);  int week = c.get(Calendar.DAY_OF_WEEK);  System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week)); } public static String getWeek(int i) { //改成中国的星期方法  String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  return weeks[i]; }	    public static void printCalendar(Calendar c) {          // 设置月          String[] month = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",                  "九月", "十月", "十一月", "十二月" };          // 设置月份          int indexm = c.get(Calendar.MONTH);          System.out.println(month[indexm]);            // 设置星期          String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", };          // 获取星期          int indexw = c.get(Calendar.DAY_OF_WEEK);          System.out.println(weeks[indexw]);            // 获取年          System.out.println(c.get(Calendar.YEAR) + "年");          // 月          System.out.println(c.get(Calendar.MONTH) + 1 + "月");          // 日子          System.out.println(c.get(Calendar.DAY_OF_WEEK) + "日");        }  }

练习:

  1.  * 获取任意年的二月有多少天。  
  2.  *   
  3.  * 思路:根据指定年设置一个时间就是   
  4.  * c.set(year,2,1)//某一年的3月1日。  
  5.  * c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。  
  6. public class CalendarTest {      public static void main(String[] args) {          getFebNum(2016);      }            public static void getFebNum(int year){          Calendar c = Calendar.getInstance();          System.out.println("时间:" + c.getTime());          c.set(year,2,1);//某一年的3月1日。          c.add(Calendar.DAY_OF_MONTH, -1);//3月1日,往前推一天,就是2月最后一天。          System.out.println(c.get(Calendar.DAY_OF_MONTH));      }  }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

PHP数据结构(十六) ——B树

PHP数据结构(十六)——B树 (原创内容,转载请注明来源,谢谢) 一、概述 B树在很多地方被称为“B-树”,因为B树的原英文名称为B-tre...

48811
来自专栏Kevin-ZhangCG

Java集合总结

1492
来自专栏Java帮帮-微信公众号-技术文章全总结

【Java提高二十】集合指定初始容量&asList缺陷&subList缺陷

【Java提高二十】集合指定初始容量 &asList缺陷&subList缺陷 集合指定初始容量 集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,...

3817
来自专栏专注 Java 基础分享

堆结构的优秀实现类----PriorityQueue优先队列

     之前的文章中,我们有介绍过动态数组ArrayList,双向队列LinkedList,键值对集合HashMap,树集TreeMap。他们都各自有各自的优...

2496
来自专栏desperate633

LeetCode 17. Letter Combinations of a Phone Number题目分析代码

以上的答案是按照词典编撰顺序进行输出的,不过,在做本题时,你也可以任意选择你喜欢的输出顺序。

771
来自专栏开发与安全

数据结构:双向链表实现队列与循环链表

一、双向链表(double linked list)如图26.5,是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。双向链表的基本操作与单链表基本一样,...

2478
来自专栏闪电gogogo的专栏

【数据结构(C语言版)系列一】 线性表

数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

6363
来自专栏Java3y

Java集合总结【面试题+脑图】,将知识点一网打尽!

2955
来自专栏Android知识点总结

Java容器源码攻坚战--第一战:Iterator

961
来自专栏Java技术分享

使用beanUtils操纵javabean

package com.lan.beanutils; import java.lang.reflect.InvocationTargetExcepti...

2179

扫码关注云+社区

领取腾讯云代金券