-------android培训、java培训、java学习型技术博客、期待与您交流! ----------
一:System类:
Java中使用的System对象,我们经常使用的是System.out.print ,而且也仅仅知道这是一个可以在控制台打印出语句,而没有去深究它的内在实现原理。下面我就详细地介绍System对象。
1.JDK中有如下定义:.The System class contains several useful class fields and methods. It cannot be instantiated.
也就是说System对象是不能被实例化的,只能通过调用它的属性和方法来使用它。
2.System中的属性 Systme.in 是InputStream类型的,可以接受控制台输入的信息; System.out 和 System.err 都是PrintStream类型的 ,可以在控制台输出信息。
3.System.getProperties() 返回的是Properties类型的对象,而返回的信息是Java虚拟机启动过程中所要加载的环境配置信息。可以通过下面的代码获取和输出信息,由于Properties是HashTable的一个子类,因此可以通过Map方法取出该集合中的元素 :
import java.util.*;
public class SystemDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Properties prop=System.getProperties();
for(Object key:prop.keySet()){
String keyStr=(String)key;
String value=prop.getProperty(keyStr);
System.out.println(keyStr+" --- "+value);
}
}
}
使用以下代码也可以使控制台输出系统环境配置信息:
public class SystemDemo {
public static void main(String[] args) {
System.getProperties().list(System.out);
}
}
可以通过System对象在系统中自定义一些特有的信息:
System.setProperty(myKey , myValue);
另外需要注意的一点是: 所谓的 system porperty,system 指的是 JRE (runtime)system,不是指 OS。
System.setProperty("net.jxta.tls.principal", "client");
System.setProperty("net.jxta.tls.password", "password");
System.setProperty("JXTA_HOME",System.getProperty("JXTA_HOME","client"));
可以利用系统属性来加载多个驱动
下面给出一个完整的代码和注释程序:
/*
System:类中的方法和属性都是静态的static。
out:标准输出,默认是控制台
in:标准输出,默认是键盘
描述系统属性信息:Properties getProperties();
*/
import java.util.*;
class SystemDemo
{
public static void main(String[] args)
{
//双类集合
Properties prop=System.getProperties();
//因为Properties是HashMap的子类,也就是Map集合的一个子对象
//那么可以通过map方法取出该集合中的元素。
//该集合中存储的都是字符串,没有泛型定义
//如何在系统中自定义一些特有信息
System.setProperty("myKey","myValue");
//获取指定属性信息
String value=System.getProperty("os.name");
System.out.println("value=:"+value);
//可不可以在jvm启动时,动态的加载一些属性信息
String v=System.getProperty("haha");
System.out.println("v=:"+v);
/*
//获取所有属性信息
for(Object obj: prop.keySet())
{
String value =(String)prop.get(obj);
System.out.println(obj+"::"+value);
}
*/
}
}
二:Runtime类:
Java中的Runtime对象并没有提供构造函数
(1)说明该类不可使用new 来创造对象
(2) 该类的方法可能都是静态的
(3)发现该类的API中还有非静态方法
(4) 说明该类肯定提供了方法来获取本类对象,而且该方法是静态的,并返回值类型是本类类型
(5)由以上信息可以看出该类使用了单例设计模式来完成
使用Runtime对象可以打开程序可执行文件(exe文件),启动该应用程序 。下面给出完整的代码和注释:
/*
Runtime对象
该类中并没有提供构造函数,说明不可以new对象,那么会直接想到该类中的方法都是静态的
发现该类中还有非静态方法
说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并且返回值类型是本类类型
由这个特点可以看出该类使用了单例设计模式
该方法是static Runtime getRuntime();
*/
class RuntimeDemo
{
public static void main(String[] args) throws Exception
{
Runtime r=Runtime.getRuntime();
Process p=r.exec("notepad.exe");
//杀掉子进程
Thread.sleep(4000);
p.destroy();
System.out.println("Hello World!");
}
}
补充几个知识点:
(1):单例设计模式:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
(2)\是转义字符,把后面紧跟的字母转义了,所以文件的路径要用\\或者是/分割
(3)abstract抽象类不能创建对象
最新最全的的java学习视频教程:http://pro.net.itcast.cn/View-22-1458.aspx