Tiantian は出力に System.out.println を使用することについて話しているので、少し質問があります。out は 変数 ですか? それとも内部クラスですか?膨大で体系的な知識がさまざまなトピックで詳しく説明されており、これらの点在する知識を無視することはできません。そうしないと、面接中にそのような単純な質問をされて答えられない場合、非常に恥ずかしいことになります。
インスタンス化不可能な System クラス
System は、JDK の java.lang パッケージでは、Java のコア言語機能でもあることがわかります。 System クラスのコンストラクターは private で修飾されており、インスタンス化は許可されていません。したがって、クラス内のメソッドも static 変更された static メソッドになります。
フィールド public final static InputStream in;
//标准输入流
public final static PrintStream out;
//标准输出流
public final static PrintStream err;
//标准错误流 ログイン後にコピー
outとin inSystemは内部クラスではなく、本物のフィールド変数 であることがわかります。 out は、PrintStream の最終的な静的変数によって変更される変数フィールドです。つまり、PrintStream クラスのメソッドを呼び出すことができます。 Println は PrintStream の出力メソッドであるため、コンソールにコンテンツを出力するには通常 System.out.println() を使用します。
System 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
} ログイン後にコピー
arraycopyメソッドには、コピーされる配列、コピーされる開始位置の5つのパラメータがあります。 、および copy メソッド。この配列の開始位置にコピーし、この配列の終了位置にコピーします。このメソッドは、配列の copyOf および copyOfRange に似ており、より多くのパラメーターがあり、必要に応じて使用できます。
currentTimeMillis ——はミリ秒数を返します ミリ秒だけが必要な場合、currentTimeMillisメソッドはDate クラスのgetTimeメソッドとまったく同じです。通話もとても便利です。ただし、currentTimeMillis は getTime の結果を直接取得しないことに注意してください。 currentTimeMillis はオペレーティング システムの時刻を返すローカル メソッドであるため、オペレーティング システムの時刻の最小精度は 10 ミリ秒であるため、このメソッドでは多少の誤差が生じる可能性があります。 。
getProperty ——システムのproperty を取得します。このメソッドを呼び出し、パラメータにキーの文字列 を入力して、システムのプロパティを取得します。
Key 関連する値の説明 java.version Java実行環境のバージョン java.vendor Java実行環境ベンダー java。ベンダーのURL Java ベンダー URL java.home Java installation directory java.vm.specation.version Java 仮想マシン仕様バージョン java.vm.specation bendor Java virtualマシン仕様ベンダー java.vm.specation.name Java 仮想マシン仕様名 java.vm.version Java 仮想マシン実装バージョン java.vm .vendor Java virtualマシン実装ベンダー java.vm.name Java 仮想マシン実装名 java.specation.version Java 実行環境仕様 version java.specation .vendor Java 実行環境仕様ベンダー java.specation.name Java実行環境仕様名 java.class .version Javaクラスフォーマットのバージョン番号 java.class.path Javaクラスパス java.library.path ライブラリをロードするときに検索するパスのリスト java.io.tmpdirデフォルトの一時ファイルパス java.compiler JITの名前使用するコンパイラ java.ext.dirs1つ以上の拡張ディレクトリへのパス 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(这是我的目录,每个人都不同)
} ログイン後にコピー
上面的表中就不再举例了,比较常用的是后几个key 。
gc ——运行垃圾回收器 调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象 或失去了所有引用 的对象 ,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。
public static void main(String[] args) {
Date d = new Date();
d = null;
System.gc();
// 在调用这句gc方法时,上面已经失去了d引用的new Date()被回收
} ログイン後にコピー
实际上我们并不一定需要调用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");
}
} ログイン後にコピー
这段程序最后只会输出 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();
} ログイン後にコピー
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();
} ログイン後にコピー
这个方法就在System类中,但是我们刚才没有介绍,因为是private的方法,只是用来自己做注册使用。我整理了一下源代码去掉了无用的部分。这个方法的大概意思是说:1.初始化Properties 2.初始化输入、输出、错误流 3.进行一大堆配置。
设置输入/输出/错误流 可以注意其中的几行,setIn0,setOut0,setErr0这三个方法。这三个方法是System中public方法setIn,setOut,setErr内部调用的子方法。我们用这几个方法来设置这三个流。
public static void setIn(InputStream in) {
checkIO();
setIn0(in);
} ログイン後にコピー
比如这是setIn方法,我们使用这个方法来设置输入流(此方法被使用的频率不是很高)。checkIO是检查IO流是否正确,setIn0是native方法,做真正的输入流替换工作。
private static native void setIn0(InputStream in); ログイン後にコピー
以上がJava-System システム クラスの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java ドキュメントの解釈: System クラスの currentTimeMillis() メソッドの使用分析
Nov 03, 2023 am 09:30 AM
Java ドキュメントの解釈: System クラスの currentTimeMillis() メソッドの使用状況分析、特定のコード例が必要 Java プログラミングでは、System クラスはシステムに関連するいくつかのプロパティと操作をカプセル化する非常に重要なクラスです。その中でも、System クラスでよく使われるメソッドである currentTimeMillis メソッドについて、コード例を示しながら詳しく説明します。 1. currentTimeMillisメソッドの概要
Win10 ブルー スクリーン エラー: システム サービス例外
Dec 29, 2023 pm 04:04 PM
win10 システムは非常に使いやすく、高度なインテリジェントなシステムであり、互換性が高いため、通常の使用では基本的に問題はありませんが、win10 システムを使用し続けると、システムが不安定になることがあります。 Win10 起動時にブルー スクリーン終了コード SystemServiceException が発生する問題 今日は、Win10 起動時にブルー スクリーン終了コード SystemServiceException が発生する問題の解決策を紹介します。必要な場合は、すぐにダウンロードしてください。 win10systemserviceException ブルー スクリーンの解決策: 方法 1: 1. Windows キー + R を使用してファイル名を指定して実行を開き、「contr」と入力します。
コンピュータシステムとは何ですか?
Feb 22, 2023 am 10:25 AM
コンピュータ システムは比較的一般的なシステム プロセスです。プロセスを表示すると、システムが表示されることがよくあります。このプロセスは単にコンピュータ システムを意味します。ただし、system.exe プロセスがコンピュータ上に表示された場合は、適時に削除する必要があります。これはトロイの木馬ウイルスによって生成されたファイルであり、実際のシステムの背後には exe サフィックスはありません。
Windows7 英語版システムのダウンロード
Jul 15, 2023 pm 07:45 PM
ネットユーザーは Windows 7 システムによく精通していると思いますが、Windows 7 英語版システムについて聞いたことがありますか? 多くのネットユーザーは Windows 7 英語版システムについて聞いたことがあると思いますが、Windows 7 英語版システムを探している友人もいます。ダウンロードするバージョン システム. 今日は、ネチズンが英語で win7 のオリジナル バージョンを理解できるように、編集者が英語での win7 のオリジナル バージョンの紹介を皆さんと共有するつもりです。以下は、英語版の Windows 7 システムをダウンロードする場所を示しています。 win7 のオリジナルの英語システムは、サブスクリプション ダウンロード用に MSDN にリリースされました。正式な英語統合バージョンは、統合 SP1 を含む Windows7 CD イメージである Windows7WithSP1 として最初にリリースされました。複数の言語に対応するスタンドアロン SP1 が含まれています
JavaでObjectクラスとSystemクラスを使用するにはどうすればよいですか?
Apr 23, 2023 pm 11:28 PM
オブジェクトはすべての Java クラスの基本クラスであり、クラス継承構造全体の最上位であり、最も抽象的なクラスです。誰もが毎日、toString()、equals()、hashCode()、wait()、notify()、getClass() などのメソッドを使用していますが、おそらくそれらが Object のメソッドであることを認識しておらず、見向きもしません。 Object には他にどのようなメソッドがあるのか、そしてなぜこれらのメソッドを Object に配置する必要があるのかを考えてみましょう。 1. JavaObject クラスの概要 - すべてのクラスのスーパー クラス Object は Java クラス ライブラリの特別なクラスであり、すべてのクラスの親クラスでもあります。言い換えれば、Java では、任意のタイプのオブジェクトを Object タイプに割り当てることができます。
Microsoft、System Center 2022 の一般提供を発表
Apr 14, 2023 am 09:40 AM
Microsoft は、System Center 2022 の提供を発表しました。最新バージョンでは、System Center Operations Manager (SCOM)、Virtual Machine Manager (VMM)、System Center Orchestrator (SCORCH)、Service Manager (SM)、および Data Protection Manager が提供されます。
今すぐブラウザで MacOS 7 と MacOS 8 を実行する方法
Apr 18, 2023 am 11:04 AM
1990 年代の Macintosh にタイムスリップし、ブラウザ ウィンドウで System 7 と MacOS 8 の完全な仮想インストールを実行します。 1990 年代の Mac ソフトウェアの新しい仮想バージョンの欠点の 1 つは、2020 年代の Mac の速度で動作することです。あなたは MacSE/30 または Quadra700 を見ていますが、すべてが Apple Silicon と同じくらい高速です。これらのシミュレートされたオペレーティング システムで実際に作業することができ、ドキュメントやファイルを macOS Monterey の内外にドラッグすることもできます。ただし、実用的な目的であっても、純粋に楽しむためであっても、次の方法で行うことができます。
Java SystemクラスとArraysクラスの使い方
May 22, 2023 pm 08:52 PM
1. システム クラスとしての System の概要 JDK の java.lang パッケージでは、これが Java のコア言語機能でもあることがわかります。 System クラスのコンストラクターは private で修飾されており、インスタンス化は許可されていません。したがって、クラス内のメソッドも static によって変更された static メソッドです。 JAVA の Arrays クラスは、配列操作を実装するツール クラスであり、配列の並べ替えと検索、配列の比較、配列への要素の追加、配列のコピー、配列の String 関数への変換を実装できるさまざまな静的メソッドが含まれています。これらのメソッドには、すべての基本型のオーバーロードされたメソッドが含まれています。 2. 知識ポイントの詳細説明 1. API の System クラスに導入された比較的単純な概念であり、定義を与えます。
See all articles