System 클래스는 jdk에서 제공하는 도구 클래스입니다. final으로 수정되며 이름에서 알 수 있듯이 상속될 수 없습니다. 시스템과 관련이 있습니다. 이 글은 주로 Power Node Java Academy에서 작성한 Java System 클래스에 대한 자세한 설명을 소개합니다. 필요하신 분들은 참고하시면 됩니다.
System 클래스는 jdk에서 제공하는 툴 클래스이므로 최종 수정이 불가능합니다. 상속됨. 이름에서 알 수 있듯이 대부분의 작업은 시스템과 관련되어 있습니다. 주요 기능은 다음과 같습니다. • out, in, err과 같은 표준 입력 및 출력 • 외부에서 정의된속성 및 환경 변수에 대한 액세스 (예: getenv()/setenv() 및 getProperties()/setProperties()
• 파일 및 클래스 라이브러리를 로드하는 메서드(예: load() 및 loadLibrary()) • 배열을 복사하는 빠른 방법: arraycopy()• gc(), runFinalization(), exit()와 같은 일부 jvm 작업, 이 부분은 소스의 Java 문서에 언급되지 않습니다. 코드를 호출하는 것이 권장되지 않기 때문일 수 있습니다. 게다가 이 메소드들은 Runtime.getRuntime()에 대한 호출일 뿐입니다. 둘 사이에는 차이점이 없습니다. 아래 그림을 직접 보시면 됩니다.
private static native void registerNatives(); static { registerNatives(); }
static 코드 블록은 기본 메서드인 RegisterNatives()를 호출합니다. 설명을 참조하세요. 정적 초기화를 통해 네이티브 메서드를 등록하면 vm이 초기화 시스템 클래스 메서드를 호출하여 초기화 작업을 완료하게 됩니다. 물론이죠. 그러면 초기화시스템클래스 메소드를 살펴보겠습니다:
private static void initializeSystemClass() { // 初始化props props = new Properties(); initProperties(props); sun.misc.VM.saveAndRemoveProperties(props); //获取系统相关的换行符 lineSeparator = props.getProperty("line.separator"); sun.misc.Version.init(); //分别创建in、out、err的实例对象,并通过setXX0()初始化,查看setXX0()方法可知,这是个native方法,将系统的标准流管理到类内的对象 FileInputStream fdIn = new FileInputStream(FileDescriptor.in); FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); setIn0(new BufferedInputStream(fdIn)); setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true)); setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true)); //加载zip包以获取java.util.zip.ZipFile这个类,以便之后加载利库使用 loadLibrary("zip"); // 设置平台相关的信号处理 Terminator.setup(); // 初始化sun.misc相关的环境变量 sun.misc.VM.initializeOSEnvironment(); // 主线程不会在同一个线程组中添加相同的线程,我们必须在这里自己实现。注释半天没弄明白,看代码就是主线程自己把自己加到了自己的线程组中...... Thread current = Thread.currentThread(); current.getThreadGroup().add(current); // 注册共享秘钥?注释没看明白,该方法就是实例化一个JavaLangAccess setJavaLangAccess(); // 子系统在初始化的时候可以调用sun.misc.VM.isBooted(),以保证在application类加载器启动前不做任何事。booted()其实就是改了个状态,使isBooted()变为true。 sun.misc.VM.booted(); }
위 내용은 Java의 System 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!