Inhaltsverzeichnis
Nicht instanziierbare Systemklasse " > Nicht instanziierbare Systemklasse
Feld " >Feld
Häufig verwendete Methoden im System" >Häufig verwendete Methoden im System
ArrayKopieren—— ArrayKopieren" >ArrayKopieren—— ArrayKopieren
currentTimeMillis——gibt die Anzahl der Millisekunden zurück
-Eigenschaft " >getProperty——Holen Sie sich die System--Eigenschaft
gc——运行垃圾回收器
exit——退出虚拟机
深度剖析System类源代码" > 深度剖析System类源代码
初始化
设置输入/输出/错误流
Heim Java javaLernprogramm Eingehende Analyse der Java-System-Systemklasse

Eingehende Analyse der Java-System-Systemklasse

May 07, 2017 am 09:40 AM

Tiantian sagte, ich solle System.out.println für die Ausgabe verwenden, also habe ich eine kleine Frage: Ist out eine Variable oder eine interne Klasse? Umfangreiches und systematisches Wissen wird in verschiedenen Themen ausführlich erläutert. Wir können diese verstreuten Wissenspunkte nicht ignorieren, sonst wird es sehr peinlich, wenn uns im Interview eine so einfache Frage gestellt wird und wir sie nicht beantworten können.

Nicht instanziierbare Systemklasse

System als Systemklasse, im java.lang-Paket von JDK ist ersichtlich, dass es sich auch um eine handelt Kernsprache der Java-Eigenschaft. Der Konstruktor der Systemklasse ist mit „Private“ versehen und darf nicht instanziiert werden. Daher sind die Methoden in der Klasse auch statische modifizierte statische Methoden.

Feld

public final static InputStream in;
//标准输入流
public final static PrintStream out;
//标准输出流
public final static PrintStream err;
//标准错误流
Nach dem Login kopieren

Es ist zu erkennen, dass es sich bei Out und In im System nicht um interne Klassen handelt, sondern um echte Feldvariablen . out ist das Variablenfeld, das durch die letzte Statik von PrintStream geändert wurde, was bedeutet, dass Methoden der PrintStream-Klasse aufgerufen werden können. Println ist eine Ausgabemethode von PrintStream, daher verwenden wir normalerweise System.out.println(), um Inhalte auf der Konsole auszugeben.

Häufig verwendete Methoden im System

ArrayKopieren—— ArrayKopieren

  public static void main(String[] args) {

        int[] arr1 = { 0, 1, 2, 3, 4 };
        int[] arr2 = { 9, 9, 9, 9, 9 };

        System.arraycopy(arr1, 2, arr2, 0, 3);

        arr1[3] = 8;

        for (int i = 0; i < 5; i++)
            System.out.print(arr2[i] + " ");
            //2 3 4 9 9 
    }
Nach dem Login kopieren

Die Arraycopy-Methode verfügt über fünf Parameter: das zu kopierende Array, die zu kopierende Startposition, das zu kopierende Array und die Startposition des zu kopierenden Arrays, an das Ende dieses Arrays kopiert. Diese Methode ähnelt copyOf und copyOfRange in Arrays. Sie verfügt über mehr Parameter und kann bei Bedarf verwendet werden.

currentTimeMillis——gibt die Anzahl der Millisekunden zurück

Dies ist kein Beispiel, die Methode currentTimeMillis und die Methode getTime im Datum Klasse Es ist genau das Gleiche. Wenn Sie nur Millisekunden benötigen, ist ein solcher Anruf auch sehr praktisch. Es ist jedoch zu beachten, dass currentTimeMillis nicht direkt das Ergebnis von getTime erhält. Da die minimale Genauigkeit der Zeit einiger Betriebssysteme 10 Millisekunden beträgt, kann es zu Problemen kommen einige Abweichungen.

getProperty——Holen Sie sich die System--Eigenschaft

Wir rufen diese Methode auf und geben den <🎜 des Schlüssels in den Parameter ein >StringRufen Sie die Eigenschaften des Systems ab.

相关值的描述
java.versionJava 运行时环境版本
java.vendorJava运行时环境供应商
java.vendor.urlJava 供应商的 URL
java.homeJava 安装目录
java.vm.specification.versionJava 虚拟机规范版本
java.vm.specification.vendorJava 虚拟机规范供应商
java.vm.specification.nameJava 虚拟机规范名称
java.vm.versionJava 虚拟机实现版本
java.vm.vendorJava 虚拟机实现供应商
java.vm.nameJava 虚拟机实现名称
java.specification.versionJava 运行时环境规范版本
java.specification.vendorJava 运行时环境规范供应商
java.specification.nameJava 运行时环境规范名称
java.class.versionJava 类格式版本号
java.class.pathJava 类路径
java.library.path加载库时搜索的路径列表
java.io.tmpdir默认的临时文件路径
java.compiler要使用的 JIT 编译器的名称
java.ext.dirs一个或多个扩展目录的路径
os.name操作系统的名称
os.arch操作系统的架构
os.version操作系统的版本
file.separator文件分隔符(在 UNIX 系统中是“/”)
path.separator路径分隔符(在 UNIX 系统中是“:”)
line.separator行分隔符(在 UNIX 系统中是“/n”)
user.name用户的账户名称
user.home用户的主目录
user.dir用户的当前工作目录

在我们操作文件的时候很可能需要使用到我们的当前工作目录,可以用这个方法来获得。

  public static void main(String[] args) {
        String dirPath = System.getProperty("user.dir");
        System.out.println(dirPath);
        //输出工作目录  D:\Workspaces\MyEclipse 10\Algorithms(这是我的目录,每个人都不同)
    }
Nach dem Login kopieren

上面的表中就不再举例了,比较常用的是后几个key

gc——运行垃圾回收器

调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象失去了所有引用的对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。

  public static void main(String[] args) {

        Date d = new Date();
        d = null;

        System.gc();
        // 在调用这句gc方法时,上面已经失去了d引用的new Date()被回收

    }
Nach dem Login kopieren

实际上我们并不一定需要调用gc()方法,让编译器自己去做好了。如果调用gc方法,会在对象被回收之前调用finalize()方法,但是我们也知道finalize()方法不一定会被调用。总之java在这回收方面做的远不如c和c++。我们可以规避有关回收方面的问题。当需要了解的时候最好专门的去看JVM回收机制的文章。

exit——退出虚拟机

exit(int)方法终止当前正在运行的 Java 虚拟机,参数解释为状态码。根据惯例,非 0 的状态码表示异常终止。 而且,该方法永远不会正常返回。 这是唯一一个能够退出程序并不执行finally的情况。

  public static void main(String[] args) {

        try {
            System.out.println("this is try");
            System.exit(0);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            System.out.println("this is finally");
        }

    }
Nach dem Login kopieren

这段程序最后只会输出 this is try 这一句话,而不会输出 this is finally 。退出虚拟机会直接杀死整个程序,已经不是从代码的层面来终止程序了,所以finally不会执行。

深度剖析System类源代码

看完了表面的方法,我们来继续学习一下System的源代码。还是老样子,找个jdk包打开rt.jar找到java.lang.System类。

初始化

首先映入眼帘的就是一个静态块:

    /* register the natives via the static initializer.
     *
     * VM will invoke the initializeSystemClass method to complete
     * the initialization for this class separated from clinit.
     * Note that to use properties set by the VM, see the constraints
     * described in the initializeSystemClass method.
     */
    private static native void registerNatives();
    static {
        registerNatives();
    }
Nach dem Login kopieren

native不用看了,本机方法。这是可以猜得到的,因为System类要使用输入和输出流可能会用到和操作系统相关的一些本机方法。那么在static块中调用了registerNatives()方法,这个方法是本地方法我们看不到具体实现。但是注释说了:“VM will invoke the initializeSystemClass method to complete the initialization for this class separated from clinit”。

那么JVM调用的initializeSystemClass方法是怎么实现的呢?

    private static void initializeSystemClass() {

        props = new Properties();
        initProperties(props); 

        sun.misc.VM.saveAndRemoveProperties(props);

        lineSeparator = props.getProperty("line.separator");
        sun.misc.Version.init();

        FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
        FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
        FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
        setIn0(new BufferedInputStream(fdIn));
        setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
        setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));

        loadLibrary("zip");

        Terminator.setup();

        sun.misc.VM.initializeOSEnvironment();

        Thread current = Thread.currentThread();
        current.getThreadGroup().add(current);

        setJavaLangAccess();
        sun.misc.VM.booted();
    }
Nach dem Login kopieren

这个方法就在System类中,但是我们刚才没有介绍,因为是private的方法,只是用来自己做注册使用。我整理了一下源代码去掉了无用的部分。这个方法的大概意思是说:1.初始化Properties 2.初始化输入、输出、错误流 3.进行一大堆配置。

设置输入/输出/错误流

可以注意其中的几行,setIn0,setOut0,setErr0这三个方法。这三个方法是System中public方法setIn,setOut,setErr内部调用的子方法。我们用这几个方法来设置这三个流。

    public static void setIn(InputStream in) {
        checkIO();
        setIn0(in);
    }
Nach dem Login kopieren

比如这是setIn方法,我们使用这个方法来设置输入流(此方法被使用的频率不是很高)。checkIO是检查IO流是否正确,setIn0是native方法,做真正的输入流替换工作。

    private static native void setIn0(InputStream in);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEingehende Analyse der Java-System-Systemklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Interpretation der Java-Dokumentation: Nutzungsanalyse der Methode currentTimeMillis() der Klasse System Interpretation der Java-Dokumentation: Nutzungsanalyse der Methode currentTimeMillis() der Klasse System Nov 03, 2023 am 09:30 AM

Interpretation von Java-Dokumenten: Verwendungsanalyse der Methode currentTimeMillis() der Klasse System. In der Java-Programmierung ist die Klasse System eine sehr wichtige Klasse, die einige Eigenschaften und Vorgänge im Zusammenhang mit dem System kapselt. Unter diesen ist die Methode currentTimeMillis eine sehr häufig verwendete Methode in der Systemklasse. In diesem Artikel wird die Methode ausführlich erläutert und Codebeispiele bereitgestellt. 1. Überblick über die currentTimeMillis-Methode

Win10-Bluescreen-Fehler: Systemdienstausnahme Win10-Bluescreen-Fehler: Systemdienstausnahme Dec 29, 2023 pm 04:04 PM

Das Win10-System ist ein sehr benutzerfreundliches und hochintelligentes System. Aufgrund seiner starken Kompatibilität kann sichergestellt werden, dass das System im Normalbetrieb keine Probleme hat Haben Sie Probleme mit dem Boot-Bluescreen-Beendigungscode SystemServiceException? Heute bietet Ihnen der Editor die Lösung für den Win10-Boot-Bluescreen-Beendigungscode SystemServiceException. Bitte laden Sie ihn schnell herunter. Lösung für den blauen Bildschirm „win10systemserviceException“: Methode 1: 1. Öffnen Sie „Ausführen“ mit der Windows-Taste + R und geben Sie „contr

Was ist das Computersystem? Was ist das Computersystem? Feb 22, 2023 am 10:25 AM

Das Computersystem ist ein relativ häufiger Systemprozess. Wenn dieser Prozess angezeigt wird, muss er jedoch rechtzeitig gelöscht werden. Dies ist eine von einem Trojaner-Virus generierte Datei. Hinter dem realen System befindet sich kein Exe-Suffix.

Laden Sie das englische Versionssystem von Windows 7 herunter Laden Sie das englische Versionssystem von Windows 7 herunter Jul 15, 2023 pm 07:45 PM

Ich glaube, dass Internetnutzer mit dem Windows 7-System in englischer Sprache sehr vertraut sind. Ich glaube, dass viele Internetnutzer von der englischen Version von Windows 7 gehört haben Versionssystem zum Herunterladen. Heute werde ich die Einführung der Originalversion von Win7 auf Englisch mit allen teilen, damit Internetnutzer die Originalversion von Win7 auf Englisch verstehen können. Im Folgenden erfahren Sie, wo Sie die englische Version des Windows 7-Systems herunterladen können. Das ursprüngliche englische System von win7 wurde zum Abonnement-Download auf MSDN freigegeben. Die offizielle englische integrierte Version wurde erstmals veröffentlicht, Windows7WithSP1, das Windows7-CD-Image mit integriertem SP1. Enthält SP1 Standalone für mehrere Sprachen

Wie verwende ich die Objektklasse und die Systemklasse in Java? Wie verwende ich die Objektklasse und die Systemklasse in Java? Apr 23, 2023 pm 11:28 PM

Object ist die Basisklasse aller Java-Klassen, die Spitze der gesamten Klassenvererbungsstruktur und die abstrakteste Klasse. Jeder verwendet jeden Tag toString(), equal(), hashCode(), wait(), notify(), getClass() und andere Methoden. Vielleicht ist ihnen nicht klar, dass es sich um Methoden von Object handelt, und sie sehen nicht hin Welche anderen Methoden Object hat? Und überlegen Sie, warum diese Methoden in Object platziert werden sollten. 1. Einführung in die JavaObject-Klasse – die Superklasse aller Klassen. Object ist eine spezielle Klasse in der Java-Klassenbibliothek und auch die übergeordnete Klasse aller Klassen. Mit anderen Worten: Java ermöglicht die Zuordnung beliebiger Objekttypen zum Objekttyp

Microsoft gibt die allgemeine Verfügbarkeit von System Center 2022 bekannt Microsoft gibt die allgemeine Verfügbarkeit von System Center 2022 bekannt Apr 14, 2023 am 09:40 AM

Microsoft hat die Verfügbarkeit von System Center 2022 angekündigt. Die neueste Version bringt System Center Operations Manager (SCOM), Virtual Machine Manager (VMM), System Center Orchestrator (SCORCH), Service Manager (SM) und Data Protection Manager

So führen Sie noch heute MacOS 7 und MacOS 8 in Ihrem Browser aus So führen Sie noch heute MacOS 7 und MacOS 8 in Ihrem Browser aus Apr 18, 2023 am 11:04 AM

Machen Sie eine Zeitreise in die Zeit des Macintosh der 1990er Jahre und führen Sie vollständige virtuelle Installationen von System 7 und MacOS 8 in einem Browserfenster aus. Ein Fehler bei neuen virtuellen Versionen der Mac-Software aus den 1990er-Jahren besteht darin, dass sie mit der Geschwindigkeit eines Mac aus den 2020er-Jahren laufen. Sie sehen einen MacSE/30 oder Quadra700, aber alles ist so schnell wie Apple Silicon. Sie können tatsächlich in diesen simulierten Betriebssystemen arbeiten und sie können sogar Dokumente oder Dateien in macOS Monterey hinein- und herausziehen. Aber ob aus praktischen Gründen oder eher nur zum Spaß, hier erfahren Sie, wie es geht

So verwenden Sie die Java-Systemklasse und die Arrays-Klasse So verwenden Sie die Java-Systemklasse und die Arrays-Klasse May 22, 2023 pm 08:52 PM

1. Einführung in System als Systemklasse. Im java.lang-Paket von JDK ist ersichtlich, dass es sich auch um eine Kernsprache der Java-Funktion handelt. Der Konstruktor der Systemklasse ist mit Private versehen und darf nicht instanziiert werden. Daher sind die Methoden in der Klasse auch statische Methoden, die durch statische Methoden modifiziert werden. Die Arrays-Klasse in JAVA ist eine Toolklasse, die Array-Operationen implementiert. Sie enthält eine Vielzahl statischer Methoden, die Arrays sortieren und durchsuchen, Arrays vergleichen, Elemente zu Arrays hinzufügen, Arrays kopieren und Arrays in String-Funktionen konvertieren können. Diese Methoden verfügen über überladene Methoden für alle Grundtypen. 2. Detaillierte Erläuterung der Wissenspunkte 1. Das Konzept wird relativ einfach in der Systemklasse in der API eingeführt. Wir geben die Definition.

See all articles