<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">【基本定义】</span></span>
<span style="font-size:18px;">System:类中方法或者属性都是静态的,不能被实例化
out:标准输出,默认是控制台
in:标准输入,默认是键盘
【重点】描述系统的加载信息:
1.获取系统属性信息的方法 Properties getProperties();
2.如何在系统中定义一些特有的信息呢?
3.获取指定的信息
4.怎样在jvm使用时,加载一些自定义的信息
【分析】
一、Properties(属性):
1.其实就是Hashtable的子类,也就是map集合的子类,所以不涉及到泛型
2.可以通过map集合的方法取出该集合中的元素
3.改集合中存储的全部是字符串
二、setProperty(String key, String value):
1.设定在系统加载时,自定义的键值和内容
三、String getProperty(key);
1.取得指定的键对应的value内容
四、用java -D(wangke)=(nanren) SystemDemo1 即可
其中wangke是自定义的key,nanren是自定义的value SystemDemo1是可执行的.class文件名称
*/
import java.util.*;
class SystemDemo1
{
public static void main(String[] args)
{
//【【1】得到系统在运行时加载的具体文件内容】
System.setProperty("---keyneirong----","---valueneirong---");
Properties proper=System.getProperties();
//这其实也是遍历,相当于迭代一样的
for (Object obj:proper.keySet())
{
String value=(String)proper.get(obj);
System.out.println(obj+":::"+value);
}
/*Set set=proper.keySet();
Iterator i=set.iterator();
while (i.hasNext())
{
String key=(String)i.next();
String value=(String)proper.get(key);
System.out.println(key+":::"+value);
}*/
//【【2】如何在系统中定义一些特有的信息呢?】
//System.setProperty("keyneirong","valueneirong");
//【【3】取得指定的键对应的value内容】
String value=System.getProperty("os.name"); //例如这是获取系统的版本信息Windows XP
System.out.println(value);
//【4】怎样在jvm使用时,加载一些自定义的信息
//运行时输入:java -D(wangke)=(nanren) SystemDemo1 即可OK
}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
Runtime:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
可以通过 getRuntime 方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例
【重点】
1.该类并没有提供构造函数,所以不能创建实例(不能new)
2.可能该类中的方法全是静态的,直接调用即可!
3.但是发现有非静态的方法,那就说明该类中肯定提供了一个能获取本类的方法
4.发现得知:只能通过getRuntime方法来获取到该Runtime
5.掌握常用的一个静态方法static exec("");""里为需要执行的内容,该方法返回值是一个进程process
【特点】
该类使用了单例的设计模式来完成,确保对象的唯一性
能获取该类对象的方法是:
static Runtime getRuntime();
*/
class RuntimeDemo2
{
public static void main(String[] args) throws Exception
{
//演示获取本类对象的静态方法
Runtime r=Runtime.getRuntime();
//打开了一个系统中的扫雷游戏
//【注意】该静态方法可能去执行不存在的文件,这时候就会抛出一个IO异常,所以需要声明
//r.exec("winmine.exe");
//返回的是一个进程,可以用进程的方法去操作它,这里是打开一个记事本SystemDemo1.java文件
Process p=r.exec("notepad.exe SystemDemo1.java");
//等待6s后干掉此进程
Thread.sleep(6000);
//杀死进程
p.destroy();
}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
Date类:
在java.util.*中,属于工具类
该类主要是封装了时间的一些内容在里面
1.该类可以实例化,即是获得当前系统的时间
2.按照自定义的时间格式输出:要用到SimpleDateFormat类(自定义时间的规范化)在java.text.*;
3.以毫秒数得到当前的时间long System.currentTimeMillis(),再用date的带参数构造方式创建
*/
import java.text.*;
import java.util.*;
class DateDemo3
{
public static void main(String[] args)
{
//获得当前系统的时间
Date d=new Date();
//获取的结果:Mon Mar 23 18:34:42 CST 2015
System.out.println(d);
//设定自定义的时间格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd hh:mm:ss E");
//用SimpleDateFormat的对象调用format方法,返回一个字符串
String str=sdf.format(d);
System.out.println(str);
//用System类也能获取到当前的时间
long l=System.currentTimeMillis();
Date d1=new Date(l);
System.out.println(d1);
}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
Calendar:
日历类:
【重点】
1.
Calendar中月份和星期的获取,
应该注意角标,月份0代表的是一月……
而星期中的获取,1代表的是星期天
2.set方法:set(int field, int value)
set是给将给定的日历字段设置为给定值。
3.add方法:add(int field, int amount) (时间的偏移量)
add是根据日历的规则,为给定的日历字段添加或减去指定的时间量。
*/
import java.util.*;
class CalendarDemo1
{
public static void main(String[] args)
{
//【1】自定义获取年月日,星期的单例类
MyCalendar m=MyCalendar.getInstance();
sop(m.getYear());
sop(m.getMonth());
sop(m.getDay());
sop(m.getWeek());
//因为构造方法被私有化了,必须通过自己的静态方法才能得到自己的实例对象
/*Calendar c=Calendar.getInstance();
//获取年
int year=c.get(Calendar.YEAR);
//因为这里的日历类中的月份,0角标为其实是一月,
//即是得到月份是当前系统月份的前一个月,所以需要加1才行
int month=c.get(Calendar.MONTH);
//获取天
int day=c.get(Calendar.DAY_OF_MONTH);
//获取星期
int week=c.get(Calendar.DAY_OF_WEEK);
//分别输出即可
sop(year+"年");
sop(month+"月");
sop(day+"日");
sop(week+"日"); //这里获取到是2,星期中排序是星期天……星期六,所以是星期一
*/
//【2】set方法
Calendar cd=Calendar.getInstance();
cd.set(Calendar.YEAR,2020);
sop(cd.get(Calendar.YEAR)); //2020
cd.set(2020,3,30); //【注意】这里设置的3指的是四月份才对
sop(cd.get(Calendar.MONTH));
//【3】add方法:时间的偏移量
Calendar cd1=Calendar.getInstance();
int year=cd1.get(Calendar.YEAR);
sop(year); //2015
cd1.add(Calendar.YEAR,4);
int yearNew=cd1.get(Calendar.YEAR);
sop(yearNew); //2019
cd1.add(Calendar.YEAR,-4);
int yearNow=cd1.get(Calendar.YEAR);
sop(yearNow); //2015
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//【从上面可以得出:获取的月和星期都不是自己想要的结果:所以可以自己定义一个查表法】
//所以下面是自己写的一个比较完美的单例模式获取时间的自定义类
class MyCalendar
{
private MyCalendar()
{
}
private static MyCalendar mc=null;
//单例模式加锁判断方法
public static MyCalendar getInstance()
{
synchronized (MyCalendar.class)
{ if (mc==null)
{
if (mc==null)
{
mc=new MyCalendar();
}
}
return mc;
}
}
private String[] month={"","一月","二月","三月","四月",
"五月","六月","七月","八月",
"九月","十月","十一月","十二月"};
private String[] week={"","星期日","星期一","星期二",
"星期三","星期四","星期五","星期六"};
private Calendar c=Calendar.getInstance();
public String getYear()
{
//获取年
return c.get(Calendar.YEAR)+"年";
}
public String getMonth()
{
//获取月
int index=c.get(Calendar.MONTH);
//return month[index+1];这是获取查表法的方法
return index+1+"月";
}
public String getDay()
{
//获取日
return c.get(Calendar.DAY_OF_MONTH)+"日";
}
public String getWeek()
{
//获取星期
int index = c.get(Calendar.DAY_OF_WEEK);
return week[index];
}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
练习
1.获取任意年份二月份的天数
2.获取昨天的现在这个时刻
【分析】
1.我们知道任意年份的二月天数都不一样,所以最好是set(year,2,1);
其实这代表的是某年的3月1日,所以要得到二月的天数,只需要把1 偏移-1位就可以得到了
其实就是set方法和add方法的应用!
2.
*/
import java.util.*;
class CalendarDemo2
{
public static void main(String[] args)
{
//【1】调用获取2月份天数的方法
getFebDay(2000);
//【2】调用昨天这个时刻的方法
getYesterday();
}
//获取某年的二月份天数的方法
public static void getFebDay(int year)
{
Calendar c=Calendar.getInstance();
c.set(year,2,1);
c.add(Calendar.DAY_OF_MONTH,-1);
int day=c.get(Calendar.DAY_OF_MONTH);
sop(year+"年的2月份共有"+day+"天");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
//获取昨天这个时刻的方法
public static void getYesterday()
{
Calendar c=Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH,-1);
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
int day=c.get(Calendar.DAY_OF_MONTH);
int hour=c.get(Calendar.HOUR_OF_DAY);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.SECOND);
sop("昨天的这个时刻是:"+year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+second);
}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
在java.long.*;
Math 类包含用于执行基本数学运算的方法
其中有很多方法,但是比较常用的是一下几种方法:
【重点】
1.static double E (常量) 含义:e(即自然对数的底数)的 double 值
2.static double PI (常量) 其实就是π
3.{double,float,int,long} abs(4中类型 d); 返回d的绝对值,很简单
[演示以下]【重点】
4.static double ceil(double a) :返回大于a值的最大整数
5.static double floor(double a) : 返回小于a值的最大整数
6.static long round(double a) :把a四舍五入,返回为long
7.static double pow(double a, double b) :a的b次方,例如:pow(2,3);结果是8
8.static double random() :随机数,默认返回的是{0<= 随机数 <1}
随机数的产生在java.util.*包中有一个直接可以用的类,那就是
Random类,其中有很多方法,不再一一介绍,知道几个就行;
nextInt(int i):返回0(包括)到i(不包括)值的随机整数;
以此类推:还有nextDouble()和nextFloat()等等……
9.有一个小练习:给定一个小数,保留该小数的后两位!
*/
import java.util.*;
class MathDemo6
{
public static void main(String[] args)
{
double d=2342.676;
show(d);//演示
showTwo(d);//练习
}
public static void show(double d)
{
//返回大于double类型值的最大整数
sop(Math.ceil(d)); //2343.0
sop(Math.ceil(-d)); //-2342.0
//返回小于double类型值的最大整数
sop(Math.floor(d)); //2342.0
sop(Math.floor(-d)); //-2343.0
//把a四舍五入,返回为long
sop(Math.round(d)); //2343
sop(Math.round(-d)); //-2343
sop(Math.round(23.29));//23
sop(Math.round(23.59));//24
//【注意】随机数:默认返回的是{0<= 随机数 <1}
sop(Math.random()); //随机产生的,我这会儿是:0.33517799412879334
//例如以下是返回十组0到1(其实就是包含:有头无尾)的随机数字
for (int i=0; i<10;i++ )
{
sop(Math.random());
}
//那怎样返回1到10的随机数呢,需要有头有尾,且是int类型!
for (int i=0; i<10;i++ )
{
sop((int)(Math.random()*10)+1); //加1主要是为了包含有尾
}
//java.uitl.*中的Random随机数类,可以直接操作的,有很多方法,不用强制转换
//[重点]用Random类返回十组0到1(其实就是包含:有头无尾)的随机数字
Random r=new Random();
for (int i=0;i<10 ;i++ )
{
sop(r.nextInt(10));//要包含10就加一就OK了,这里是有头无尾式
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
/*9.有一个小练习:给定一个小数,保留该小数的后两位!
【基本思路】:先把这个数字*100,然后在四舍五入这个数字强制返回一个int类型,最后再
把这个数字除以100.00(主要是为了保留后两位)返回为double(内部会自动提升)类型即可
*/
public static void showTwo(double d)
{
double d1=d*100;
int d2=(int)Math.round(d1);
double a=d2/100.00;
sop(a); //2342.68
}
}
</span></span>
【总结】
以上这些都是比较常用的类,其中有重点的方法和注意的情况,我都写在内容中,仅供大家参考学习……个人觉得最重要的是能通过运用这些工具类,能够熟悉其java中API帮助文档的使用!