Table des matières
Classe Système non instanciable " > Classe Système non instanciable
Champ " > Champ
Méthodes couramment utilisées dans System" > Méthodes couramment utilisées dans System
arraycopy—— ArrayCopy" >arraycopy—— ArrayCopy
currentTimeMillis——renvoie le nombre de millisecondes
" >getProperty——Obtenir la propriété système
gc——运行垃圾回收器
exit——退出虚拟机
深度剖析System类源代码" > 深度剖析System类源代码
初始化
设置输入/输出/错误流
Maison Java javaDidacticiel Analyse approfondie de la classe système Java-System

Analyse approfondie de la classe système Java-System

May 07, 2017 am 09:40 AM

Tiantian a dit d'utiliser System.out.println pour la sortie, j'ai donc une petite question. Est-ce qu'il s'agit d'une variable ou d'une classe interne ? Des connaissances vastes et systématiques sont expliquées en détail dans divers sujets. Nous ne pouvons pas ignorer ces points de connaissances dispersés, sinon il serait très embarrassant de nous poser une question aussi simple lors de l'entretien et de ne pas pouvoir y répondre.

Classe Système non instanciable

Système en tant que classe système, dans le package java.lang du JDK, on ​​voit que c'est aussi un langage de base de la caractéristique Java. Le constructeur de la classe System est décoré avec private et ne peut pas être instancié. Par conséquent, les méthodes de la classe sont également des méthodes statiques modifiées statiques.

Champ

public final static InputStream in;
//标准输入流
public final static PrintStream out;
//标准输出流
public final static PrintStream err;
//标准错误流
Copier après la connexion

On peut voir que les entrées et sorties dans Système ne sont pas des classes internes, mais de véritables variables de champ . out est le champ variable modifié par le statique final de PrintStream, ce qui signifie qu'il peut appeler des méthodes de la classe PrintStream. Println est une méthode de sortie de PrintStream, nous utilisons donc généralement System.out.println() pour afficher le contenu sur la console.

Méthodes couramment utilisées dans System

arraycopy—— ArrayCopy

  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 
    }
Copier après la connexion

La méthode arraycopy a cinq paramètres, qui sont le tableau à copier, la position de départ à copier, le tableau à copier et la position de départ du tableau à copier, copié à la fin de ce tableau. Cette méthode est similaire à copyOf et copyOfRange dans les tableaux. Elle a plus de paramètres et peut être utilisée si nécessaire.

currentTimeMillis——renvoie le nombre de millisecondes

Ceci n'est pas un exemple, la méthode currentTimeMillis et la méthode getTime dans le Date classe C'est exactement la même chose. Si vous n'avez besoin que de quelques millisecondes, un tel appel est également très pratique. Cependant, il convient de noter que currentTimeMillis n'obtient pas directement le résultat de getTime. currentTimeMillis est une méthode locale qui renvoie l'heure du système d'exploitation. Étant donné que la précision minimale de l'heure de certains systèmes d'exploitation est de 10 millisecondes, cette méthode peut entraîner des écarts. .

getProperty——Obtenir la propriété système

Nous appelons cette méthode et entrons le <🎜 de la clé dans le paramètre >StringObtenir les propriétés du système.

相关值的描述
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(这是我的目录,每个人都不同)
    }
Copier après la connexion

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

gc——运行垃圾回收器

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

  public static void main(String[] args) {

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

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

    }
Copier après la connexion

实际上我们并不一定需要调用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");
        }

    }
Copier après la connexion

这段程序最后只会输出 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();
    }
Copier après la connexion

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();
    }
Copier après la connexion

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

设置输入/输出/错误流

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

    public static void setIn(InputStream in) {
        checkIO();
        setIn0(in);
    }
Copier après la connexion

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

    private static native void setIn0(InputStream in);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Interprétation de la documentation Java : Analyse de l'utilisation de la méthode currentTimeMillis() de la classe System Interprétation de la documentation Java : Analyse de l'utilisation de la méthode currentTimeMillis() de la classe System Nov 03, 2023 am 09:30 AM

Interprétation du document Java : analyse de l'utilisation de la méthode currentTimeMillis() de la classe System, des exemples de code spécifiques sont requis. En programmation Java, la classe System est une classe très importante, qui encapsule certaines propriétés et opérations liées au système. Parmi elles, la méthode currentTimeMillis est une méthode très couramment utilisée dans la classe System. Cet article expliquera la méthode en détail et fournira des exemples de code. 1. Présentation de la méthode currentTimeMillis

Erreur d'écran bleu Win10 : exception du service système Erreur d'écran bleu Win10 : exception du service système Dec 29, 2023 pm 04:04 PM

Le système Win10 est un système très facile à utiliser et très intelligent. Sa forte compatibilité peut garantir que le système ne rencontrera pratiquement aucun problème lors d'une utilisation normale. Cependant, à mesure que les gens continuent à utiliser le système Win10, le système le fera également parfois. Vous avez des problèmes. Le problème du code de terminaison d'écran bleu de démarrage de Win10 SystemServiceException. Aujourd'hui, je vais vous apporter la solution au code de terminaison d'écran bleu de démarrage de Win10 SystemServiceException. Si vous en avez besoin, veuillez le télécharger rapidement. Solution à l'écran bleu win10systemserviceexception : Méthode 1 : 1. Utilisez la touche Windows + R pour ouvrir Exécuter et entrez « contr

Quel est le système informatique ? Quel est le système informatique ? Feb 22, 2023 am 10:25 AM

Le système informatique est un processus système relativement courant. Vous verrez souvent système lors de la visualisation du processus. Ce processus signifie simplement le système informatique, cependant, si le processus system.exe apparaît sur l'ordinateur, il doit être supprimé à temps. il s'agit d'un fichier généré par un virus cheval de Troie. Il n'y a pas de suffixe exe derrière le système réel.

téléchargement du système version anglaise Windows7 téléchargement du système version anglaise Windows7 Jul 15, 2023 pm 07:45 PM

Je pense que les internautes connaissent très bien le système Windows 7. Avez-vous entendu parler du système Windows 7 en version anglaise ? Je crois que de nombreux internautes ont entendu parler du système Windows 7 en version anglaise. Cependant, certains amis recherchent la version anglaise de Windows 7. système de version à télécharger. Aujourd'hui, l'éditeur va partager l'introduction de la version originale de win7 en anglais avec tout le monde, afin que les internautes puissent comprendre la version originale de win7 en anglais. Ce qui suit est pour vous indiquer où télécharger la version anglaise du système Windows 7. Le système anglais original de win7 a été publié sur MSDN pour téléchargement par abonnement. La version officielle intégrée en anglais a été publiée pour la première fois, Windows7WithSP1, qui est l'image du CD Windows7 avec SP1 intégré. Inclut SP1 autonome pour plusieurs langues

Comment utiliser la classe Object et la classe System en Java ? Comment utiliser la classe Object et la classe System en Java ? Apr 23, 2023 pm 11:28 PM

Object est la classe de base de toutes les classes Java, le sommet de toute la structure d'héritage de classe et la classe la plus abstraite. Tout le monde utilise toString(), equals(), hashCode(), wait(), notify(), getClass() et d'autres méthodes tous les jours. Peut-être qu'ils ne réalisent pas qu'il s'agit de méthodes d'Object et ne regardent pas non plus quoi. d'autres méthodes dont dispose Object. Et réfléchissez à la raison pour laquelle ces méthodes devraient être placées dans Object. 1. Introduction à la classe JavaObject - la super classe de toutes les classes. Object est une classe spéciale dans la bibliothèque de classes Java et est également la classe parent de toutes les classes. En d’autres termes, Java permet d’attribuer n’importe quel type d’objet au type Objet

Microsoft annonce la disponibilité générale de System Center 2022 Microsoft annonce la disponibilité générale de System Center 2022 Apr 14, 2023 am 09:40 AM

Microsoft a annoncé la disponibilité de System Center 2022. La dernière version apporte System Center Operations Manager (SCOM), Virtual Machine Manager (VMM), System Center Orchestrator (SCORCH), Service Manager (SM) et Data Protection Manager.

Comment exécuter MacOS 7 et MacOS 8 dans votre navigateur aujourd'hui Comment exécuter MacOS 7 et MacOS 8 dans votre navigateur aujourd'hui Apr 18, 2023 am 11:04 AM

Remontez le temps jusqu'au Macintosh des années 1990 et exécutez des installations virtuelles complètes de System 7 et MacOS 8 dans une fenêtre de navigateur. L’un des défauts des nouvelles versions virtuelles des logiciels Mac des années 1990 est qu’elles fonctionnent à la vitesse d’un Mac des années 2020. Vous regardez un MacSE/30 ou un Quadra700, mais tout est aussi rapide qu'Apple Silicon. Vous pouvez réellement travailler dans ces systèmes d'exploitation simulés, et ils peuvent même faire glisser des documents ou des fichiers vers et hors de macOS Monterey. Mais que ce soit à des fins pratiques ou plus probablement simplement pour le plaisir, voici comment

Comment utiliser la classe Java System et la classe Arrays Comment utiliser la classe Java System et la classe Arrays May 22, 2023 pm 08:52 PM

1. Introduction au système en tant que classe système.Dans le package java.lang du JDK, on ​​peut voir qu'il s'agit également d'une fonctionnalité de base du langage Java. Le constructeur de la classe System est décoré avec private et ne peut pas être instancié. Par conséquent, les méthodes de la classe sont également des méthodes statiques modifiées par static. La classe Arrays en JAVA est une classe d'outils qui implémente des opérations sur les tableaux. Elle comprend une variété de méthodes statiques qui peuvent trier et rechercher des tableaux, comparer des tableaux, ajouter des éléments aux tableaux, copier des tableaux et convertir des tableaux en fonctions String. Ces méthodes ont des méthodes surchargées pour tous les types de base. 2. Explication détaillée des points de connaissance 1. Le concept est relativement simple introduit dans la classe System de l'API. Nous donnons la définition.

See all articles