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

来源:互联网 发布:放大镜 知乎 编辑:程序博客网 时间:2024/06/06 09:46

一、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中继承关系表进行解释
这里写图片描述
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);        }
阅读全文
0 0
原创粉丝点击