黑马程序员——015——其他对象(System、Runtime、Date、Calendar、Math、Random)
来源:互联网 发布:众途软件多少钱 编辑:程序博客网 时间:2024/05/19 20:57
System
首先先从我们已经用到烂掉的对象System开始;
System:类中的方法和属性都是静态的;
—out:表示标准输出,默认就是控制台,因此我们使用System.out.println();会在控制台打印内容;
—in:表示标准输入,可以暂且认为是键盘。
方法:
—static long currentTimeMillis()
——返回以毫秒为单位的当前时间。
—static void exit(int status)
——终止当前正在运行的 Java 虚拟机。
—static void gc()
——运行垃圾回收器。
—static Properties getProperties()
——确定当前的系统属性。我们稍后的小节再详细讲解这个Properties类;
——这里只给出一个实例代码:
———————————————————————————
import java.io.*;//玩IO流一般都需要导入这个包import java.util.*;//Properties类在这个包中class Demo15_1{ public static void main(String[] args) { Properties pro = System.getProperties(); //因为pro试试hashTable的子类 也就是map集合的一个子类对象 //那么可以通过map的方法取出该集合中的元素 //该集合中存储的都是字符串 没有泛型定义 for(Object obj : pro.keySet()) { String value = (String)pro.get(obj); System.out.println(obj+"::"+value); } // 这个程序每一次启动都会获取系统的属性信息 }}
———————————————————————————
运行结果打印出了系统的很多信息,比如说:
—用户执行该程序的路径:
——user.dir::….
—是什么操作系统
——os.name::Windows XP
—编码表
——file.encoding::GBK
—等等.
———————————————————————————
使用这个方法打印出来也可以:
—Set stringPropertyNames()
——返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
—使用Object setProperty(String key, String value)
——调用 Hashtable 的方法 put。
——可以自定义设置值,在任何应用都能够用了;实例代码:
———————————————————————————
import java.io.*;//玩IO流一般都需要导入这个包import java.util.*;//Properties类在这个包中class Demo15_2{ public static void main(String[] args) { System.setProperty("mykey","myvalues"); //设置自定义键值属性 Properties pro = System.getProperties(); //因为pro是hashTable的子类 也就是map集合的一个子类对象 //那么可以通过map的方法去除该集合中的元素 //该集合中存储的都是字符串 没有泛型定义 for(Object obj : pro.keySet()) { String value = (String)pro.get(obj); System.out.println(obj+"::"+value); } // 这个程序每一次启动都会获取系统的属性信息 }}
———————————————————————————
执行结果:
应用:
—当我们写的程序需要固定读或者使用到某一个路径的时候,我们可以通过这种方式传进去;
———————————————————————————
通过System的getProperties(键)方法能够获取该键对应的值;
应用:
—win2003,win2008,Linux运行都不一样,那么就可以根据判断执行相应的命令。有些应用不支持某些系统就可以这么来做!
———————————————————————————
如果现在想获取的属性比较特殊!
—可不可以在虚拟机启动时动态加载属性值:
——cmd下输入java,查看说明我们会发现使用java 一个参数命令即可:
实例:
我们使用以下命令运行第一个实例Demo15_1的程序:
java -Dhaha=qqqqq Demo15_1
———————————————————————————
执行结果:我们能够发现也被加载进去,并且能够被获取到了。
应用:
—Tomcat服务器启动的会后,会使用以这种方式往里面加载一些东西;
———————————————————————————
———————————————————————————
Runtime
Runtime,运行时:
—每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序是不能创建自己的 Runtime 类实例的。
—查文档,发现没有构造函数(说明不可以new对象),继而想到该类中方法是静态的,而方法又不是静态的。不让建对象,却又有非静态方法。
—所以应该有方法可以获取到改类实例。
——往下找发现这个方法:
———static Runtime getRuntime()
————返回与当前 Java 应用程序相关的运行时对象。
————应用程序执行Runtime就创建了,我们只需要用这个方法就可以获取到了!
————这应该想到:设计模式,单例模式。
—方法不挨个讲,不常用,常用的
——Process exec(String command)
———在单独的进程中执行指定的字符串命令。
——实例:
———————————————————————————
Runtime r = Runtime.getRuntime();
r.exec(“c:\winmine.exe”);//由于路径是可能写错的,所以有异常需要处理,抛IO异常,这里为了方便直接抛最大的exception。
———————————————————————————
r.exec(“winmine.exe”);//c:\删了还能打开,原因:我的电脑 环境变量配置了扫雷程序所在的文件夹路径;
———————————————————————————
exec方法返回值是
—java.lang.Process类
—为抽象类public abstract class Processextends Object
——方法全是抽象的,这个类应该有子类,但是没有子类。因为底层为我们做了实现方式,用即可。
—需要注意的方法:
——abstract void destroy()
———杀掉子进程。
———实例代码:
———————————————————————————
class Demo15_3{ //这里方法直接把异常扔给虚拟机了 public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); Process p = r.exec("notepad.exe");//会抛IO异常 p.destroy(); }}
———————————————————————————
基本上的秒杀,我们看不到记事本被打开的过程,就被关掉了!
为了看到过程,我们让p.destroy();延迟执行:
———————————————————————————
class Demo15_4{ public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); Process p = r.exec("notepad.exe");//会抛IO异常 Thread.sleep(3000);//延迟3秒再杀掉进程 p.destroy(); }}
———————————————————————————
注意:这个方法只能杀现创建出来的进程,而不能杀别的进程。
我们还可以通过修改exec方法参数里面的串的格式,让记事本打开一个文本文件:
———————————————————————————
class Demo15_5{ public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); Process p = r.exec("notepad.exe Demo15_5.java");//会抛IO异常 }}
———————————————————————————
执行的结果是记事本打开,里面是文本文件“Demo15_5.java的内容”;
这里我们可以继续拓展:
—如果“notepad.exe”跟电影文件路径,打开电影文件当然也是可以,电影文件是二进制数据,所以就首先查GBK表,然后将一些乱码显示上去!
—那么我们就应该能想到如果是个播放器程序,后面跟的是电影的地址,那就打开电影了!
—— Process p = r.exec(“player.exe 电影.mp4”);
———————————————————————————
———————————————————————————
Date
Date类是在util包下,开发中我们会有需求就是要求记录什么时间执行的什么操作,时分秒都分割出来操作的比较方便,因此Date类应运而生;
—查CHM有一些过时构造方法,剩俩不过时的(我们的文档是JDK1.6版本的);
——我们看到Date类的API描述的“另请参见”位置的“DateFormat”,我们跟进去看看这个“DateFormat”;
——点DateFormat进去发现其有这个format方法:
————但是这个类却不能创建对象:
——往下看发现有个SimpleDateFormat子类;但是注意这个类是在java.text包中了;
———SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
使用如下的一些字母来进行格式化:
我们用一个实例代码演示一下:
———————————————————————————
import java.util.*;import java.text.*;class Demo15_6{ public static void main(String[] args) { //新建一个Date对象 Date d = new Date(); System.out.println(d);//打印的时间看不懂, //我们希望按照我们了解的格式进行显示 //将模式封装到SimpleDateFormat对象中 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss"); //调用format方法让模式格式化指定Date对象 String time = sdf.format(d); System.out.println("time="+time); }}
———————————————————————————
执行结果:
如果我们不光想格式化时间,我们还想要单独获取其中的年月日的话;
看下面实例代码:
———————————————————————————
import java.util.*;import java.text.*;class Demo15_7{ public static void main(String[] args) { //新建一个Date对象 Date d = new Date(); System.out.println(d);//打印的时间看不懂, //我们希望按照我们了解的格式进行显示 //将模式封装到SimpleDateFormat对象中,只显示年 SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); //调用format方法让模式格式化指定Date对象 String time = sdf.format(d); System.out.println("time="+time); }}
———————————————————————————
执行结果:
当然我们可以发现Date类(util包中的),有一个getYear方法,但是已经过时了,API的描述是:
— 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
———————————————————————————
———————————————————————————
Calendar
Calendar是一个抽象类,在Java中某一时刻的信息用非常多的东西描述着,如下图代码的执行结果:
其中我们能够看出一些信息,比如说:
—“WEEK_OF_YEAR表示”R表示一年中的第几周;
—“MONTH”表示月份,是0开始;
—“DAY_OF_WEEK”表示星期中的第几天,老外是用1表示星期天(Java是老外发明的)。
实例代码:
———————————————————————————
import java.util.*;class Demo15_8{ public static void main(String[] args) { //获取Calendar的一个实例 Calendar c = Calendar.getInstance(); //通过使用get方法传入一个常量参数获取年份 System.out.println(c.get(Calendar.YEAR)+"年"); System.out.println("这周是今年第"+c.get(Calendar.WEEK_OF_YEAR)+"周"); System.out.println(c.get(Calendar.MONTH)+1+"月"); System.out.println("今天是星期"+c.get(Calendar.DAY_OF_WEEK)); }}
———————————————————————————
执行结果:
最后一个因为老外用1表示星期日,因此2就表示星期一。而我们在写这个程序的时候是星期一;
我们可以使用“查表法”来对程序进行完善;
———————————————————————————
import java.util.*;class Demo15_9{ public static void main(String[] args) { //定义星期文字的中字符串数组(表) String[] dayArr = {"星期日","星期一","星期二", "星期三","星期四","星期五","星期六",}; //定义月份文字的中字符串数组(表) String[] monthArr = {"一","二","三", "四","五","六","七","八","九", "十","十一","十二"}; //获取Calendar的一个实例 Calendar c = Calendar.getInstance(); //通过使用get方法传入一个常量参数获取年份 System.out.println(c.get(Calendar.YEAR)+"年"); System.out.println("这周是今年第"+c.get(Calendar.WEEK_OF_YEAR)+"周"); System.out.println(monthArr[c.get(Calendar.MONTH)]+"月"); //由于星期不是从0开始,而是从1开始,因此减去1 System.out.println("今天是星期"+dayArr[c.get(Calendar.DAY_OF_WEEK)-1]); }}
———————————————————————————
执行结果:
———————————————————————————
我们可以对日期进行加减得到另一个日期,使用的方法是Calendar的add方法:
————————————————————
—abstract void add(int field, int amount)
——根据日历的规则,为给定的日历字段添加或减去指定的时间量。
————————————————————
实例代码:
———————————————————————————
import java.util.*;class Demo15_10{ public static void main(String[] args) { //定义星期文字的中字符串数组(表) String[] dayArr = {"星期日","星期一","星期二", "星期三","星期四","星期五","星期六",}; //定义月份文字的中字符串数组(表) String[] monthArr = {"一","二","三", "四","五","六","七","八","九", "十","十一","十二"}; //获取Calendar的一个实例 Calendar c = Calendar.getInstance(); //通过使用get方法传入一个常量参数获取年份 System.out.println(c.get(Calendar.YEAR)+"年"); c.add(Calendar.YEAR,4);//当前年份再加4年 //打印加了4年后的年份 System.out.println(c.get(Calendar.YEAR)+"年");//打印2019年 //通过使用get方法传入一个常量参数获取月份 System.out.println(monthArr[c.get(Calendar.MONTH)]+"月"); c.add(Calendar.MONTH,4);//当前月份再加4月 //打印加了4月后的月份 System.out.println(monthArr[c.get(Calendar.MONTH)]+"月");//打印十二月 //通过使用get方法传入一个常量参数获取当前月份的日期 System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日"); c.add(Calendar.DAY_OF_MONTH,-4);//当前月份的日期再减4天 //打印减了4天后的月份 System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日");// }}
———————————————————————————
执行结果:(写这小节的时间是2015.08.17)
———————————————————————————
练习:
—想要获取任意一年的2月有多少天;
—思路:2月根据年份是否是闰年会有变化,而3月的天数的固定31天的,因此我们可以设置一个日期3月31日,然后减一天即可,得到改天日期。实例代码:
———————————————————————————
import java.util.*;class Demo15_11{ public static void main(String[] args) { System.out.println(getFebDaysByYear(2000));//打印29 System.out.println(getFebDaysByYear(2001));//打印28 } static int getFebDaysByYear(int year) { Calendar c = Calendar.getInstance(); c.set(year,2,1);//记住月份从0开始,这里表示year年3月1日 c.add(Calendar.DAY_OF_MONTH,-1);//year年3月1日,天数减一天 return c.get(Calendar.DAY_OF_MONTH);//返回2月最后一天的日 }}
———————————————————————————
执行结果:
———————————————————————————
———————————————————————————
Math
Math:也是工具类,其中也有一堆的静态方法;
ceil方法:
—返回最小的(最接近负无穷大) double 值,该值大于等于参数,并等于某个整数。
—— 返回比参数大或等于参数(当参数是整数的时候)的最小整数;
————————————————————————————————————
floor方法:
—返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
—— 返回比参数小或等于参数(当参数是整数的时候)的最大整数;
————————————————————————————————————
round方法: 四舍五入
static long round(double a)
返回最接近参数的 long。
static int round(float a)
返回最接近参数的 int。
————————————————————————————————————
pow方法:
—static double pow(double a, double b)
返回第一个参数的第二个参数次幂的值。
————————————————————————————————————
random方法:
—static double random()
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
——Math.random();随机数;0~1,包含0 不包含1
———第一次调用该方法时,它将创建一个新的尾随数生成器;
只要是有算法算出来的就可以找到规律,这里就是伪随机的解释;
Math.random()*10;
—0~10不包含10,
Math.random()*10+1;
—1~11,不包含11;
(int)(Math.random()*10+1);
—1~10;整数
(int)(Math.random()*6+1);
—举例:筛子
—————————————————————————————
—————————————————————————————
Random
存在于java.util包中。
- 黑马程序员——015——其他对象(System、Runtime、Date、Calendar、Math、Random)
- 黑马程序员——Java语言基础:其他对象(System、Runtime、Date、Calendar、Math)
- 黑马程序员——其他对象(System、Runtime、Date、Math)
- 其他对象—System、Runtime、Date、Calendar、Math
- 黑马程序员-day18其他对象System,Runtime,Date,Calendar,Math-Random
- 黑马程序员------其他类(System、Runtime、Date、Calendar、Math-Random)
- 黑马程序员——System类,Properties类,Random类,Math类,Runtime类,Date类,Calendar类
- Java基础——其他对象(System、Runtime、Date、Calendar、Math)
- 黑马程序员——第16天下——(API)System,Runtime,Date,Calendar,Math
- 黑马程序员——Java基础——集合工具类Collecions、Arrays、其他对象System类、Runtime类、Date类、Calendar类、Math类等操作
- 黑马程序员 Java基础之System,Runtime,Date,Calendar,Math.Random对象
- 黑马程序员——JAVA基础之System,Runtime,Date,Calendar,Math
- java--jdk api中其他对象(System,Runtime,Calendar,Math,Random,Date)
- 黑马程序员_Java 其它对象(System Runtime Date Calendar Math)
- java--其他对象(System,Runtime,Date,Calendar,Math)
- 其他常用类简介(System、Runtime、Date、Calendar、Math、Random)
- 黑马程序员—— Date、Calender、Math.Random对象
- 黑马程序员——java基础学习--System类、Runtime类、date和Calendar类、Math类
- 关于c++stl
- 最小组合数字【贪心+排序】
- 新安装的wampserver怎么使用本机已有的mysql作为数据库
- ios UI开发相关转载链接汇总
- 同步代码块,同步方法,同步静态方法,同步非静态方法的区别
- 黑马程序员——015——其他对象(System、Runtime、Date、Calendar、Math、Random)
- 关于Ant脚本文件
- mt7601 Build Instructions
- C语言回车符号和换行符
- 黑马程序员--反射
- iOS 去掉导航栏的边界灰线;去掉搜索框的边界灰线和其中文本输入框的阴影
- unix下取昨日日期
- NSFileManager管理文件常用办法
- java杨辉三角