> Java > java지도 시간 > Java의 System 클래스에 대한 자세한 설명

Java의 System 클래스에 대한 자세한 설명

Y2J
풀어 주다: 2017-05-04 09:45:26
원래의
2387명이 탐색했습니다.

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 문서에 언급되지 않습니다. 코드를 호출하는 것이 권장되지 않기 때문일 수 있습니다. 게다가 이 메소드들은 Run

time.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿