Java私塾跟我学系列――JAVA篇 第六章 常见类的使用 六、

 

六、System                                                 

1.系统属性 

    (1)系统属性(System Properties)是Java提供的另外一种运行时给程序提供参数的方法。属性(Property)是名字和值之间的映射,这里名字和值都只能是String。

(2) Java有一个类Properties描述了名字和值之间的映射。

System.getProperties方法返回系统的Properties对象。

System.getProperty(String propertyName)方法返回对应名字属性的值。

System.getProperty(String name,String value)重载方法当没有name指定的属性时,返回value指定的缺省值。

(3)每一个JVM提供了一组缺省属性,可以通过System.getProperties方法的帮助文档了解到。基本类型的包装类中包含静态方法,用于将属性值转换成对应类型的值。如Boolean.getBoolean(String); Long.getLong(String)。String参数这里是属性名字,如果属性不存在,那么返回false或null。

(4) Properties类的对象包含两个主要方法:

getProperty(String Name)和getProperty(String Name, String value)方法返回对应名字属性的值。

properNames()列举系统的一组对象名字,进而可以列举系统的属性值。

例如:

import java.util.Properties;

import java.util.Enumeration;

public class TestProperties{

  public static void main(String args[]){

    Properties props = System.getProperties();

    Enumeration prop_names = props.propertyNames();//这是个早期的集合类

    while(prop_names.hasMoreElements()){

      String prop_name = (String) prop_names.nextElement();

      String property = props.getProperty(prop_name);

      System.out.println("Property '" + prop_name + "' is '" +property+"'");

    }

  }

prop_names是Enumeration是枚举类型的对象,包含一组属性名,允许程序循环列出。 hasMoreElements方法检测是否还有其它元素, nextElement返回程序的下一个元素。

运行:java -DMyProp=theValue TestProperties

注意:严格的格式 –D后没有空格

运行结果:很多的Java系统级属性,下面列出部分,太多了,你可以把程序运行一下:

Property 'java.runtime.name' is 'Java(TM) SE Runtime Environment'

Property 'sun.boot.library.path' is 'c:\jdk1.6.0_01\jre\bin'

Property 'java.vm.version' is '1.6.0_01-b06'

Property 'java.vm.vendor' is 'Sun Microsystems Inc.'

Property 'java.vendor.url' is 'http://java.sun.com/'

。。。。。。 

2.控制台输入输出

许多应用程序要与用户进行文本I/O(输入/输出)交互,标准输入是键盘;标准输出是终端窗口。Java SDK支持控制台I/O使用三个java.lang.System类中定义的变量:

System.out是一个PrintStream对象,初始引用启动Java的终端窗口。

Syste.in是一个InputStream对象,初始指向用户键盘。

System.err是一个PrintStream对象,初始引用启动Java的终端窗口。

这三个对象都可以重新定向(如文件):System.setOut\setIn\setErr。

往标准输出写东西使用PrintStream对象的println或print方法。print方法输出参数;但println方法输出参数并追加一个换行符。

println或print方法都对原始类型进行重载,同时还重载了char[]和Object,String。参数是Object时,调用参数的toString方法。

输出例子

publicclass Test {

    publicstaticvoid main(String args[]) {

       char c[] = { 'a', 'b', 'c' };

       System.out.println(c);

    }

}

运行结果:abc 

输入例子:

import java.io.*;

publicclass Test {

    publicstaticvoid main(String args[]) {

       String s = "";

       InputStreamReader ir = new InputStreamReader(System.in);

       BufferedReader in = new BufferedReader(ir);

       System.out.println("Ctrl+z to exit");

       try {

           s = in.readLine();

           while (s != null) {

              System.out.println("Read:" + s);

              s = in.readLine();

           }

           in.close();

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

}

运行的时候从控制台输入数据,然后回车,就看到具体读入的值的输出了。

这里先看看,涉及到后面要学习的I/O的知识。

3.格式化输出printf

从JDK5.0开始,Java里面提供了C风格的格式化输出方法 —— printf,

比如输出一个加法算式,JDK5.0版本以前的写法是:

publicclass Test { 

    publicstaticvoid main(String[] args) {

       int x = 5;

       int y = 7;

       int nSum = x + y;

      System.out.println(x + " + " + y + " = " + nSum);

    }

}

运行结果:5 + 7 = 12

而在JDK5.0以后版本中可以写为:
publicclass Test { 

    publicstaticvoid main(String[] args) {

       int x = 5;

       int y = 7;

       int nSum = x + y;

       System.out.printf("%d + %d = %d\n", x, y, nSum);

    }

以上两种写法的输出结构是一样的,即“5 + 7 = 12”。

这种改变不仅仅是形式上的,printf还可以提供更为灵活、强大的输出功能,比如限定按照两位整数的形式输出,可以写为:

publicclass Test { 

    publicstaticvoid main(String[] args) {

       int x = 5;

       int y = 7;

       int nSum = x + y;

       System.out.printf("d + d = d\n", x, y, nSum);

    }

}

运行输出结果将是“05 + 07 = 12”。 

其实这个功能在Java里面并没有什么大用,具体的printf格式化字符串格式请参见JDK文档中的具体说明。 

4.属性文件

后缀为“.properties”的文件在Java中被称为属性文件,是Java中历史悠久,使用频繁的配置文件(或者叫资源文件)格式。

属性文件的基本格式为:key=value

Java提供现成的API来读取properties文件的内容,并进行解析,所以使用非常方便。运行时候只要把“.properties”文件放到classpath下就可以了。

示例如下:假设有一个test.properties如下:

#表示注释

test1=This is Java properties

#默认的properties是不认中文的,需要编码(后面会学到),所以这里用英文测试

test2=Welcome to Java World

Java读取

Java有好几种方法来读取properties文件,这里演示其中一种:

import java.io.*;

publicclass Test {

    publicstaticvoid main(String args[]) {

       try {

           String name = "test.properties";

           InputStream in = new BufferedInputStream(new FileInputStream(name));

           Properties p = new Properties();

           p.load(in);

           System.out.println("test1的值=="+p.getProperty("test1"));

           System.out.println("test2的值=="+p.getProperty("test2"));

       } catch (Exception err) {

           err.printStackTrace();

       }

    }

}

运行结果:

    test1的值==This is Java properties

test2的值==Welcome to Java World

作业                                 

1.在MyPoint 类中增加equals方法(覆盖Object的equals方法),以比较两个MyPoint对象的内容是否相等。

2.编写一个截取字符串的方法,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 

3:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。请编写一个方法来实现上述加密算法。

5.定义一个长度为10的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”,不包含就打印出“No”。

8:统计字符串中英文字母、空格、数字和其它字符的个数。

4.一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 (不使用数学公式,要求用递归)

5.输出一个字符数组中的所有字符的所有组合。比如有字符集str={A,B,C}。应输出:

A  B  C  AB  AC  BA  BC  CA  CB  ABC  ACB  BAC  BCA  CAB  CBA

6.已知两个对像String s1,String s2,已用ASC码排序好了,编写程序将两个String 合并,得到的结果。例如:s1="abc" s2="abc" 得s="aabbcc";结果也是排序的

7.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

8.企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,请编写程序,输入当月利润,求应发放奖金总数?

9.老伯伯要带鱼、狗、猫过河到对岸.,有一条船,只能坐一个人,老伯每次只能带一样动物过河,当老伯不在的时侯狗会咬猫,猫会吃鱼.,请问怎么顺序过河呢?要求:编写程序,由程序来推出过河的顺序

Java私塾跟我学系列——JAVA 网址:http://www.javass.cn 电话:010-68434236

你可能感兴趣的:(java,职场,休闲)