黑马程序员--Java其他对象

来源:互联网 发布:淘宝手机端模板编辑 编辑:程序博客网 时间:2024/05/17 18:01

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流!   ----------------------

一、System类

        由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

       1、成员变量

System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

          例如:

               System.out.println(“Test”);

该行代码的作用是将字符串”Test”输出到系统的标准输出设备上,也就是显示在屏幕上。

后续在学习完IO相关的知识以后,可以使用System类中的成员方法改变标准输入流等对应的设备,例如可以将标准输出流输出的信息输出到文件内部,从而形成日志文件等。

 

       2、成员方法

       System类中提供了一些系统级的操作方法,这些方法实现的功能分别如下:

      a、arraycopy方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

该方法的作用是数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置,由于该方法是native方法,所以性能上比使用循环高效。

使用示例:

         int[] a = {1,2,3,4};

         int[] b = new int[5];

         System.arraycopy(a,1,b,3,2);

该代码的作用是将数组a中,从下标为1开始,复制到数组b从下标3开始的位置,总共复制2个。也就是将a[1]复制给b[3],将a[2]复制给b[4],这样经过复制以后数组a中的值不发生变化,而数组b中的值将变成{0,0,0,2,3}。

       b、currentTimeMillis方法

           public static long currentTimeMillis()

该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。例如:

         long l = System. currentTimeMillis();

则获得的将是一个长整型的数字,该数字就是以差值表达的当前时间。

使用该方法获得的时间不够直观,但是却很方便时间的计算。例如,计算程序运行需要的时间则可以使用如下的代码

long start = System. currentTimeMillis();         for(int i = 0;i < 100000000;i++){                   int a = 0;         }         long end = System. currentTimeMillis();         long  time = end – start;

则这里变量time的值就代表该代码中间的for循环执行需要的毫秒数,使用这种方式可以测试不同算法的程序的执行效率高低,也可以用于后期线程控制时的精确延时实现。

       c、exit方法

          public static void exit(int status)

该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

       d、gc方法

          public static void gc()

该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

        e、getProperty方法

          public static String getProperty(String key)

该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示。

属性名列表

 

属性名

属性说明

java.version

Java 运行时环境版本

java.home

Java 安装目录

os.name

操作系统的名称

os.version

操作系统的版本

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录

 

        例如:

String osName = System.getProperty(“os.name”);         String user = System.getProperty(“user.name”);         System.out.println(“当前操作系统是:” + osName);


二、RunTime类

       Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
      一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
      一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为

   中一个常用应用,就是执行其他程序。

   在安全的环境中,可以在多任务操作系统中使用Java去执行其他特别大的进程(也就是程序)。ecec()方法有几种形式命名想要运行的程序和它的输入参数。ecec()方法返回一个Process对象,可以使用这个对象控制Java程序与新运行的进程进行交互。ecec()方法本质是依赖于环境。
下面的例子是使用ecec()方法启动windows的记事本notepad。这个例子必须在Windows操作系统上运行。

class ExceDemo{      public static void main(String args[]){             Runtime r=Runtime.getRuntime();             Process p=null;             try{                    p=r.exec("notepad");                 }             catch(Excepiton e){                                    e.printStack();                                 }                 }}

ecec()还有其他几种形式,例子中演示的是最常用的一种。ecec()方法返回Process对象后,在新程序开始运行后就可以使用Process的方法了。可以用destory()方法杀死子进程。

三、Date类

       在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用

   1、使用Date类代表当前系统时间
                   Date d = new Date();
                   System.out.println(d);
使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象,显示的结果如下:
                            Sun Mar 08 16:35:58 CST 2009
在该格式中,Sun代表Sunday(周日),Mar代表March(三月),08代表8号,CST代表China Standard Time(中国标准时间,也就是北京时间(东八区))。


    2、使用Date类代表指定的时间
                    Date d1 = new Date(2009-1900,3-1,9);
                    System.out.println(d1);
使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。例如上面的示例代码代表就是2009年3月9号。
实际代表具体的年月日时分秒的日期对象,和这个类似。

  

    说到Date类,就必须说到Calendar类

 

    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

例:

Java代码Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。   cal.add(Calendar.DAY_OF_MONTH, -1);//取当前日期的前一天.   cal.add(Calendar.DAY_OF_MONTH, +1);//取当前日期的后一天.   //通过格式化输出日期   java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");   System.out.println("Today is:"+format.format(Calendar.getInstance().getTime()));   System.out.println("yesterday is:"+format.format(cal.getTime()));  得到2007-12-25日期:Java代码Calendar calendar = new GregorianCalendar(2007, 11, 25,0,0,0);    Date date = calendar.getTime();   System.out.println("2007 Christmas is:"+format.format(date));  java月份是从0-11,月份设置时要减1.GregorianCalendar构造方法参数依次为:年,月-1,日,时,分,秒.取日期的部分:Java代码int year =calendar.get(Calendar.YEAR);    int month=calendar.get(Calendar.MONTH)+1;int day =calendar.get(Calendar.DAY_OF_MONTH);   int hour =calendar.get(Calendar.HOUR_OF_DAY);   int minute =calendar.get(Calendar.MINUTE);   int seconds =calendar.get(Calendar.SECOND);  取月份要加1.判断当前月份的最大天数:Java代码Calendar cal = Calendar.getInstance();   int day=cal.getActualMaximum(Calendar.DAY_OF_MONTH);   System.out.println(day);


四、Math和Random

    1.Math

常用值与函数:

Math.PI 记录的圆周率
Math.E 记录e的常量
Math中还有一些类似的常量,都是一些工程数学常用量。

Math.abs 求绝对值
Math.sin 正弦函数 Math.asin 反正弦函数
Math.cos 余弦函数 Math.acos 反余弦函数 
Math.ceil 得到不小于某数的最大整数
Math.floor 得到不大于某数的最大整数 
Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常
Math.exp 求e的任意次方
Math.log10 以10为底的对数
Math.log 自然对数
Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)
Math.round 同上,返回int型或者long型(上一个函数返回double型)
Math.random 返回0,1之间的一个随机数

用法实例:
double s=Math.sqrt(7);
double x=Math.pow(2,3) //计算2的3次方 

    2.Random

2.1、Random类使用示例

         Random类包含两个构造方法,下面依次进行介绍:

         a、public Random()

该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。

 

         b、public Random(long seed)

该构造方法可以通过制定一个种子数进行创建。

示例代码:

Random r = new Random();

Random r1 = new Random(10);

再次强调:种子数只是随机算法的起源数字,和生成的随机数字的区间无关。

 

2.2、Random类使用示例

使用Random类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字。以下生成随机数的代码均使用以下Random对象r进行生成:

Random r = new Random();

a、生成[0,1.0)区间的小数

                   double d1 = r.nextDouble();

直接使用nextDouble方法获得。

 

b、生成[0,5.0)区间的小数

double d2 = r.nextDouble() * 5;

因为nextDouble方法生成的数字区间是[0,1.0),将该区间扩大5倍即是要求的区间。

同理,生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。

 

c、生成[1,2.5)区间的小数

       double d3 = r.nextDouble() * 1.5 + 1;

生成[1,2.5)区间的随机小数,则只需要首先生成[0,1.5)区间的随机数字,然后将生成的随机数区间加1即可。

同理,生成任意非从0开始的小数区间[d1,d2)范围的随机数字(其中d1不等于0),则只需要首先生成[0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上d1即可。

 

d、生成任意整数

int n1 = r.nextInt();

直接使用nextInt方法即可。

 

e、生成[0,10)区间的整数

int n2 = r.nextInt(10);

n2 = Math.abs(r.nextInt() % 10);

以上两行代码均可生成[0,10)区间的整数。

第一种实现使用Random类中的nextInt(int n)方法直接实现。

第二种实现中,首先调用nextInt()方法生成一个任意的int数字,该数字和10取余以后生成的数字区间为(-10,10),然后再对该区间求绝对值,则得到的区间就是[0,10)了。

同理,生成任意[0,n)区间的随机整数,都可以使用如下代码:

int n2 = r.nextInt(n);

n2 = Math.abs(r.nextInt() % n);

 

f、生成[0,10]区间的整数

int n3 = r.nextInt(11);

n3 = Math.abs(r.nextInt() % 11);

相对于整数区间,[0,10]区间和[0,11)区间等价,所以即生成[0,11)区间的整数

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!   ----------------------
 


 

0 0
原创粉丝点击