45.黑马程序员-其他对象

来源:互联网 发布:linux snmpwalk 安装 编辑:程序博客网 时间:2024/04/29 06:38

------- android培训、java培训、期待与您交流! ----------

 一、System
     1.System概述
  • System:描述系统 一些 信息。类中的方法和属性都是静态的.
  • out:标准输出,默认是控制台。
  • in:标准输入,默认是键盘。
  • 获取系统信息:Properties getProperties(),是Hashtable的子类,也就是Map集合的之类对象。
  • 可以使用Map的方法取出该集合中的元素,并且返回的是双列集合。该集合中存储的都是字符串,没有泛型定义。
  • 举例: Properties prop = System.getProperties();
    2.方法
  • 获取所有信息
    • for(Object obj : prop.keySet())
    • {
      • String value = (String)prop.get(obj);
      • System.out.println(obj+"::"+value);
    • }
  • 获取指定属性信息,比如获取操作系统名。
    • String value = System.getProperty("os.name");
    • Sop("value="+value);
  • 在系统中自定义一些特有信息
    • System.setProperty("mykey","myvalue");
  • 在JVM启动时,动态加载一些属性信息,
    • String v = System.property("haha");
    • Systrm.out.println("v="+v);
    二、类Runtime
    1.类Runtime概述
  • 这个类使Java应用程序和所运行的系统环境相连接,每个Java应用程序都有一个Runtime类实例。可以通过getRuntime方法获取当前运行时。但是应用程序不能创建Runtime实例。
  • 类Runtime不能创建实例,但是方法也不是static的,获取Runtime对象是通过一个方法(单例):static Runtime getRuntime(),这个方法返回与当前Java应用程序相关的运行时对象。
    2.Runtime中的方法
  • 打开一个程序
    •  Processexec(String command) 
                在单独的进程中执行指定的字符串命令。
    • 例1-Runtime r = Runtime .getRuntime();  r.exec("c:\\winmine.exe");打开扫雷程序 。
    • 例2- Runtime r = Runtime .getRuntime();  r.exec("c:\\notepad.exe systemDemo.java");用记事本打开 systemDemo.java文件。
    三、类Date
    1.类Date概述
  • 类Date在java.util包中, 是一个个日期类,对日期和时间进行了描述。
  • 类Date表示特定的瞬间,精确到毫秒。
    2.方法
  • 构造方法有两个:Date()、Date(long date)。
  • 类Date中的方法太少,可以在API中“另请参见”里面找相关类。比如DateFormat是个抽象类,可以使用它的子类SimpleDateFormat中的方法。
  • SimpleDateFormat 类 
    • 日期格式化类
    • 构造方法: SimpleDateFormat (String patten)//用给定的模式和默认语言环境的日期格式符号构造。 
    • patten 这个模式
    • 举例 
      • 1.Date d = new Date(); //创建一个Date对象。
      • 2.SimpleDateFormat sdf = new  SimpleDateFormat(yyyy年MM月dd日) ;//将模式封装到SimpleDateFormat对象中。
      • 3.String time = sdf.format(d);//调用format方法 让模式 格式化这个Date对象。
  • Calendar类(转)
    • 日历类
  • Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEARMONTHDAY_OF_MONTHHOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

    在书上看到一个挺好玩的代码,通过这个代码浅浅的研究了下java中的Calendar类

    输出的结果是:

    PS:为了学习和理解方便,我将时间调回2011年,因为2012年刚好1月1号刚好是周日。

    字段操作:

    三种:set(),add(),roll();

    set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段 f 是立即更改的,但是直到下次调用 get()getTime()getTimeInMillis()add()  roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。使用 set() 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f) 没必要通过调用 set 方法返回 value 集合。具体细节是通过具体的日历类确定的。

     

    示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用set(Calendar.MONTH, Calendar.SEPTEMBER) 将该日期设置为 1999 年 9 月 31 日。如果随后调用 getTime(),那么这是解析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH, 30) 会将该日期设置为 1999 年 9 月 30 日,因为在调用 set() 之后没有发生重新计算。

     

      个人建议先跳过规则看下示例,然后再回过来理解。

    add(f, delta)  delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta),但要带以下两个调整:

      Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

      Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

    此外,与 set() 不同,add() 强迫日历系统立即重新计算日历的毫秒数和所有字段。

     

    示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用add(Calendar.MONTH, 13) 将日历设置为 2000 年 9 月 30 日。Add 规则 1  MONTH 字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 GregorianCalendar 中,DAY_OF_MONTH 不可能是 9 月 31 日,所以 add 规则 2  DAY_OF_MONTH 设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 DAY_OF_WEEK,因为在GregorianCalendar 中的月份发生变化时,该值也需要发生变化。

     

    以下是代码,书上的代码及注释+我自己的理解和调试观察。

    import java.text.DateFormatSymbols;import java.util.*;/** * @version 1.4 2007-04-07 * @author Cay Horstmann */public class CalendarTest{   public static void main(String[] args)   {      // construct d as current date      //GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。       //用来表示默认地区。默认时区的当前时间。      GregorianCalendar d = new GregorianCalendar();     int today = d.get(Calendar.DAY_OF_MONTH);     int month = d.get(Calendar.MONTH);//0为第一个月            //以下一段代码是测试,类里面的一些方法,测试娱乐。      /*      * int hour = d.get(Calendar.HOUR_OF_DAY);//0~23      * int minute = d.get(Calendar.MINUTE);    //0~59      * int second = d.get(Calendar.SECOND);    //0~59      * System.out.println(month+1+"月"+today+"日"+hour+"时"+minute+"分"+second+"秒");      */      // set d to start date of the month      d.set(Calendar.DAY_OF_MONTH, 1);      //Sunday==1; 1<=weekday<=7;      int weekday = d.get(Calendar.DAY_OF_WEEK);      //因为是周六,所以weekday == 7;      //System.out.println(weekday);      // get first day of week (Sunday in the U.S.)      int firstDayOfWeek = d.getFirstDayOfWeek();      //firstDayOfWeek==1;      // determine the required indentation for the first line      int indent = 0;      //一周的第一天是否是月的第一天,如果不是,则追溯到上个月找到这个周的第一天所在的时间。      while (weekday != firstDayOfWeek)      {         indent++;         d.add(Calendar.DAY_OF_MONTH, -1);         weekday = d.get(Calendar.DAY_OF_WEEK);         //int temp=d.get(Calendar.DAY_OF_MONTH);         //System.out.println(temp);      }     /*      * DateFormatSymbols 是用于压缩本地化的日期_时间格式化数据,如月份名称、星期名称和时区数据的公有类。        *       * public String[] getShortWeekdays()      * 获得短型工作日字符串。 例如:"Sun", "Mon" 等。       * 返回值:短型工作日字符串。       */       // print weekday names      String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();      /*       * 以下循环操作类似于这个,但是前面一系列操作用于确定第一天是从周几开始(因地区而异)。所以不用我下面这两行程序        * for(int i=1; i<=7; i++)           *       System.out.printf("%s", weekdayNames[i]);       *       * 此时:weekday == firstDayOfWeek       * 但地下循环为先执行后判断,即从周的选定的第一天 开始循环7次        */      do      {         System.out.printf("%4s", weekdayNames[weekday]);         d.add(Calendar.DAY_OF_MONTH, 1);         weekday = d.get(Calendar.DAY_OF_WEEK);      }while (weekday != firstDayOfWeek);      System.out.println();      //月的1号一般不是从周的第一天开始。比如:周的第一天是周日,而2011年的第一天是周六,空出前6天的位置。      for (int i = 1; i <= indent; i++)         System.out.print("    ");      d.set(Calendar.DAY_OF_MONTH, 1);      do      {         // print day         int day = d.get(Calendar.DAY_OF_MONTH);         System.out.printf("%3d", day);         // mark current day with *         if (day == today) System.out.print("*");         else System.out.print(" ");         // advance d to the next day         d.add(Calendar.DAY_OF_MONTH, 1);         weekday = d.get(Calendar.DAY_OF_WEEK);         // start a new line at the start of the week         if (weekday == firstDayOfWeek) System.out.println();      }while (d.get(Calendar.MONTH) == month);      // the loop exits when d is day 1 of the next month      // print final end of line if necessary      if (weekday != firstDayOfWeek) System.out.println();   }}

     
    作者:FreeAquar
    出处:http://www.cnblogs.com/FreeAquar/
    四、查表法
由于调用Calendar.MONTH和Calendar.DAY_OF_WEEK返回的值不是我们希望看到的,例如1月表示为0月。这时候需要用查表法自定义。
查表法步骤:
1、新建一个Calendar对象。
Calendar c = Calendar.getInstance();
2、自定义一个数组,元素为月份。
String [] mons = {“1月”,“2月”,“3月”,“4月”,
“5月”,“6月”,“7月”,“8月”,
“9月”,“10月”,“11月”,“12月”};
3、获得Calendar.MONTH返回值,并查表输出。
int index = c.get(Calendar.MONTH);
Sop(mos[index]);

    五.Math类
包含用于执行初等数学运算的方法,如初等指数、对数、平方根、三角函数。
是个工具类,字段、方法都是静态的。

    六.方法
abs:绝对值。
ceil:
  • static doubleceil(double a) 
              返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
  • 举例:Math.ceil(16.3)返回值是17, Math.ceil(-16.3)返回值是-16.
floor
  • static doublefloor(double a) 
              返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
  • 举例:Math. floor(16.3) 的返回值是16, Math. floor(-16.3) 的返回值是-17.
round
  • 四舍五入。
pow
  • static doublepow(double a, double b) 
              返回第一个参数的第二个参数次幂的值。
  • a是底数,b是指数,举例a的b次方。
random
  • static doublerandom() 
              返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
  • 随机数,返回0.0到1.0之间的double随机数。
  • 使用:一般使用类型强转,乘除加减运算得出需要的随机数。




原创粉丝点击