一、概述:
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); } }
一、概述:
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
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数(测绘软件)。
二、方法:
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 表示特定的瞬间,精确到毫秒。
练习:
* "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);
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) + "日"); } }
练习: