(81)System类、Runtime类、Date类、Calendar类、Math类、Api中继承关系解释、Random

一、System类(final)
①包含一些有用的类字段和方法,它不能被实例换。
它不能实例化的原因是:没有构造函数。
②System类中的方法和属性都是静态的
out:标准输出,默认是控制台
in:标准输入,默认是键盘
③获取系统属性信息:
public static Properties getProperties()(所有属性)
public static String getProperty(String key)(获取指定键的值)
若没有该键,则返回null
④设置系统键值对(可以添加新的,也可以重置旧值)
public static String setProperty(String key, String value)

下面对API中继承关系表进行解释
(81)System类、Runtime类、Date类、Calendar类、Math类、Api中继承关系解释、Random_第1张图片
Object类在java.lang包中
Dictionary类在Java.util包中
Hashable类在java.util包中
Properties类在java.util包中中
包名就是其限制作用的
Properties类从Hashtable类继承过来的,Hashtable类从Directionary类继承来的,Directionary类从Object类中继承来的。

import java.util.*;

public class kebianshuzu {
public static void main(String[] args) {

    Properties pro=System.getProperties();
    /*因为Properties是HashTable的子类,也就是Map集合的一个子类对象
     * 所以可以通过map的迭代器方法取出该集合中的元素。
      *该集合存储的都是字符串,没有泛型定义                                   
      */ 

    /*for(Object obj:pro.keySet()) {
        String value=(String)pro.get(obj);
        System.out.println(obj+":"+value);
    }
    Set ks=pro.keySet();
     Iterator it=ks.iterator();
     while(it.hasNext()) {
         Object obj=it.next();
         System.out.println(obj+"::"+pro.get(obj));
     }*/

    //设置指定键指定的系统属性(之前没有该键,则会填入新的元素)
    System.setProperty("MyKey", "MyValue");
    String value=pro.getProperty("MyKey");
    System.out.println(value);

    //之前就有“Java.home”,设置其值,则覆盖原来的值
    System.setProperty("java.home", "Java安装路径");
    String value1=pro.getProperty("java.home");//根据Property类的方法获取键的值
    String value1_1=System.getProperty("java.home");//根据System类提供的方法
    System.out.println(value1);
    System.out.println(value1_1);   
      }
}

二、Runtime

没有构造函数,说明不能new建立对象,可以直接想到该类中的方法都是静态的,但是此类的方法中含有非静态的(说明:这些方法必须得该类对象调用),说明这个类对象要通过方法获取,并且该方法的返回值为Runtime类型,并且该方法被静态所修饰。
public static Runtime getRuntime():返回与当前Java应用程序相关的运行时对象,说明Java应用程序启动,JVM就自动创建了对象,只要获取就可以了,没必要手动新建,也新建不了。这也是单例设计模式的应用,保证了一个该类只有一个对象。

public static void main(String[] args)throws Exception {
Runtime rt=Runtime.getRuntime();
    Process p=rt.exec("notepad.exe");
    Thread.sleep(4000);
    p.destroy();//杀死这个进程;
    }

三、Date
Date类中的方法大多都不用了,可以创建对象,也可以获取时间,不过这个时间不是日常格式,不太容易理解。
所以想要改变一下格式输出, 想找和这个类有关的,看“另请参见”有个DateFormat,这个类是个抽象的,有些非静态的操作可能不太方便,所以查看DateFormat类中“直接已知子类”:SImpleDateFormat (若年月日都要,用这个方便)
①public SimpleDateFormat(String pattern)
pattern–描述日期和时间格式的模式,这个模式写法看“日期和时间模式”

②public final String format(Date date):这个方法是抽象类DateFormat中的方法,这是个final方法,DateFormat的子类不可以重写,但可以使用,所以在SimpleDateFormat 类中并没有呈现这个方法,但是也可以使用。

若要单独获得年或者月或者日,或者其他日期时间,并对其进行操作,用Calendar类中的方法
①public int get(int field):获得指定字段的时间,例如星期几
在Calendar中的字段是大写英文的,不太容易查看,所以看Date类中的“已过时”方法,这个比较方便。
②public final void set(int year, int month, int date):设置时间
③public abstract void add(int field, int amount):对指定字段加减操作

import java.util.*;
import java.text.*;
public class DateDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Date d=new Date();
        System.out.println(d);//Thu Jul 20 13:22:33 CST 2017打印的时间看不懂

        //将模式封装到SimpleDateFormat对象中
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh:ss:mm");
        //调用format方法让模式格式化指定的Date对象
        String s=sdf.format(d);
        System.out.println(s);

        //获取月份,可以用sdf实现,但是若对年操作如加减,还需要类型转换,若含非十进制的字符,还转换不了,麻烦
        SimpleDateFormat sdf1=new SimpleDateFormat("MM");
        String s1=sdf1.format(d);

        int month=Integer.parseInt(s1);
        System.out.println(s1); 
        //Calendar
        Calendar cal=Calendar.getInstance();//返回的是GregorianCalendar,很好理解,Calendar抽象,返回此抽象类的子类   
        //System.out.println(cal);
        System.out.println(cal.get(Calendar.YEAR)+"年");
        System.out.println((cal.get(Calendar.MONTH)+1)+"月");
        System.out.println(cal.get(Calendar.DAY_OF_MONTH)+"日");
        System.out.println("星期"+cal.get(Calendar.DAY_OF_WEEK));

        System.out.println("-----------------------");

        //查表法:大写的月份数字
        //美国月份0-11,星期是星期日为第一天,1-7
        String[] s2= {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
        String[] weeks= {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//0号没元素,所以用空表示,否则还得加减

        System.out.println(cal.get(Calendar.YEAR)+"年");
        String mon=s2[cal.get(Calendar.MONTH)];
        System.out.println(mon);
        String day=weeks[cal.get(Calendar.DAY_OF_WEEK)];
        System.out.println(cal.get(Calendar.DAY_OF_MONTH)+"日");
        System.out.println(day);

        System.out.println("-----------------------");

        //设置时间
        cal.set(2015, 4, 1);
        System.out.println(cal.get(Calendar.YEAR)+"年");
        String mon1=s2[cal.get(Calendar.MONTH)];
        System.out.println(mon1);
        String day1=weeks[cal.get(Calendar.DAY_OF_WEEK)];
        System.out.println(cal.get(Calendar.DAY_OF_MONTH)+"日");
        System.out.println(day1);

        System.out.println("-----------------------");

        //指定字段加减
        cal.add(Calendar.YEAR, +2);//向后加2年
        System.out.println(cal.get(Calendar.YEAR)+"年");

        cal.add(Calendar.DAY_OF_WEEK, -1);
        String day11=weeks[cal.get(Calendar.DAY_OF_WEEK)];
        System.out.println(day11);


    }

}

练习:求任意一年的二月有多少天

//获取任意年的2月几天
    /*
     * 思路:先根据Calendar获得当前时间,
     *       然后根据set(year,2,1)//某一年的3月1日
     *       然后用add减去1天,再获得日期即可。
     */
    public static  int getFeb(int year) {
        Calendar  cal=Calendar.getInstance();

        cal.set(year,2,1);
        cal.add(Calendar.DAY_OF_MONTH, -1);
        return cal.get(Calendar.DAY_OF_MONTH);


    }

四、Math

①public static double ceil(double a):返回大于等于a的最小值。
a=16.52 返回值为:17.0
a=-15.21 返回值为:-15.0
a=16 返回值为:16.0
②public static double floor(double a):返回小于等于a的最大数
a=16.52 返回值为:16.0
a=-15.21 返回值为:-13.0
a=16 返回值为:16.0
③public static long round(double a):返回最接近a的整数(四舍五入)
a=16.52 返回值为:17
a=16.12 返回值为:16
a=16 返回值为:16
④public static double pow(double a, double b)
a—底数 b—指数 返回a^b:a的b次幂
⑤public static double random()
返回:大于等于0.0且小于1.0的伪随机double值(近似均匀分布)
<随机数类Random>

//输出1-6的整数(骰子)
        for(int i=0;i<10;i++) {
            int  m=(int)((Math.random()*6)+1);
            System.out.println(m);
        }

你可能感兴趣的:(java基础)