系统相关

6.2.1 System类

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法

加载文件和动态链接库主要对native方法有用,对于一些特殊例如访问操作系统底层硬件设备等Java程序无法实现,必须借助C语言来完成。此时需要使用C语言为Java方法提供实现
步骤如下:

  1. Java程序中声明native修饰的方法,类似于abstract方法,只有方法签名,没有实现,编译该Java程序,生成class文件
  2. 用javah编译第一步生成的class文件,将产生一个.h文件
  3. 写一个.cpp文件实现native方法,这一步需要包含第2步产生的.h文件(这个.h文件中又包含了JDK带的jni.h文件)
  4. 将第3步的.cpp文件编译成动态链接库文件。
  5. 在Java中用System类的loadLibrary…()方法或Runtime类的loadLibrary()方法加载第4步的动态链接库文件,这样Java程序就可以调用这个native方法了。
package code;
import java.io.*;
import java.lang.System.*;
import java.util.*;

public class SystemTest{
    public static void main(String [] args)throws Exception{
        Map<String,String> env = System.getenv();
        for(String name : env.keySet()){
            System.out.println(name + "----->" + env.get(name));
        }
        System.out.println(System.getenv("JAVA_HOME"));
        Properties pro = System.getProperties();
        pro.store(new FileOutputStream("props.txt"),"System Properties");
        System.out.println(System.getProperty("os.name"));

    }
}

USERDOMAIN_ROAMINGPROFILE—–>XIAODONGV12
LOCALAPPDATA—–>C:\Users\xiaodong\AppData\Local
PROCESSOR_LEVEL—–>6
FP_NO_HOST_CHECK—–>NO
USERDOMAIN—–>XIAODONGV12
LOGONSERVER—–>\MicrosoftAccount
PROMPT—–> P <script id="MathJax-Element-2" type="math/tex">P</script>G
SESSIONNAME—–>Console
ALLUSERSPROFILE—–>C:\ProgramData
PROCESSOR_ARCHITECTURE—–>AMD64
=I:—–>I:\
PSModulePath—–>C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
SystemDrive—–>C:
ANT_HOME—–>E:\安卓JDK\apache-ant-1.9.3-bin\apache-ant-1.9.3
=ExitCode—–>00000000
=C:—–>C:\Users\xiaodong
APPDATA—–>C:\Users\xiaodong\AppData\Roaming
MOZ_PLUGIN_PATH—–>F:\WIN8安装目录\FOXIT READER\plugins\
USERNAME—–>xiaodong
TOMCAT_HOME—–>E:\J2EE\apache-tomcat-6.0.39
ProgramFiles(x86)—–>C:\Program Files (x86)
CommonProgramFiles—–>C:\Program Files\Common Files
Path—–>C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS
Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\Syste
m32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.7.0_45\bin;C:\Program Fil
es\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(
R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Manage
ment Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engi
ne Components\IPT;E:\安卓JDK\adt-bundle-windows-x86_64-20131030\sdk\platform-too
ls;E:\安卓JDK\adt-bundle-windows-x86_64-20131030\sdk\tools;E:\安卓JDK\apache-ant
-1.9.3-bin\apache-ant-1.9.3\bin;E:\J2EE\apache-tomcat-6.0.39\bin;E:\J2EE\apache-
tomcat-6.0.39\lib;C:\Program Files\Common Files\Autodesk Shared\;C:\Program File
s (x86)\Autodesk\Backburner\;C:\Program Files\Java\jdk1.8.0_31\bin
ANDROID_SDK_HOME—–>.
PATHEXT—–>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
OS—–>Windows_NT
classpath—–>.
COMPUTERNAME—–>XIAODONGV12
CATALINA_HOME—–>E:\J2EE\apache-tomcat-8.0.5
PROCESSOR_REVISION—–>3c03
CommonProgramW6432—–>C:\Program Files\Common Files
ComSpec—–>C:\WINDOWS\system32\cmd.exe
ProgramData—–>C:\ProgramData
ProgramW6432—–>C:\Program Files
HOMEPATH—–>\Users\xiaodong
SystemRoot—–>C:\WINDOWS
TEMP—–>C:\Users\xiaodong\AppData\Local\Temp
ESET_OPTIONS—–>

HOMEDRIVE—–>C: PROCESSOR_IDENTIFIER—–>Intel64 Family 6 Model 60
Stepping 3, GenuineIntel USERPROFILE—–>C:\Users\xiaodong
TMP—–>C:\Users\xiaodong\AppData\Local\Temp
CommonProgramFiles(x86)—–>C:\Program Files (x86)\Common Files
ProgramFiles—–>C:\Program Files PUBLIC—–>C:\Users\Public
NUMBER_OF_PROCESSORS—–>4 windir—–>C:\WINDOWS null Windows 8.1

该程序运行结束后还会在当前路径下生成一个props.txt文件,记录当前平台所有系统属性。

System类提供了通知系统进行垃圾回收的gc()方法,以及通知系统进行资源清理的runFinalization()方法。

System类还有两个获取当前时间的方法

  • currentTimeMillis();以毫秒为单位
  • nanoTime();以纳秒为单位
    都返回一个long型整数,实际上都返回当前时间与UTC1970年1月1日午夜的时间差,

System类还提供一个identityHashCode(Object x )方法,该方法返回指定对象的精确hashCode值。当某个类的hashCode()方法被重写后,该类实例的hashCode()方法不能唯一的标识该对象。如果两个类的identityHashCode值相同,则两个对象绝对是同一个对象。

package code;
public class IdentityHashCodeTest{
    public static void main(String [] args){
        String str1 = new String("java");
        String str2 = new String("java");
        System.out.println(str1.hashCode() + "------------" + str2.hashCode());
        System.out.println(System.identityHashCode(str1) + "--------------" +System.identityHashCode(str2));
        String str3 = "Java";
        String str4 = "Java";
        System.out.println(str3.hashCode() + "------------" + str4.hashCode());
        System.out.println(System.identityHashCode(str3) + "--------------" +System.identityHashCode(str4));
    }
}

3254818————3254818
366712642————–1829164700
2301506————2301506
2018699554————–2018699554

因为identityHashCode值是根据对象的地址计算得到的,所以任何两个对象的identityHashCode值总是不一样。

6.2.2 Runtime类

Runtime类代表了Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与运行时环境相连。可以访问Java程序运行时的环境,访问JVM的相关信息,如处理器数量等
应用程序不能自己创建,但可以通过getRuntime()方法获取

同样与System类提供gc()、runFinalization()方法来通知系统进行垃圾回收,清理系统资源,并且提供load(String filename)和loadLibrary(String libname)方法来加载文件和动态链接库

package code;
public class RuntimeTest{
    public static void main(String []args){
        Runtime rt = Runtime.getRuntime();
        System.out.println("处理器数量" + rt.availableProcessors());
        System.out.println("可用内存" + rt.freeMemory());
        System.out.println("总内存数" + rt.totalMemory());
        System.out.println("可用最大内存数" + rt.maxMemory());
    }
}

处理器数量4
可用内存60763984
总内存数62390272
可用最大内存数922746880

除此以外Runtime还可以直接单独启动一个进程来运行操作系统的命令

package code;
public class ExecTest{
    public static void main(String[] args)throws Exception{
        Runtime rt = Runtime.getRuntime();
        rt.exec("notepad.exe");
    }
}

以上程序将启动系统的“记事本”程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值