1. Java言語の基本概要
1.1 コンピュータプログラミング言語とは何ですか
人々はどのようにして互いにコミュニケーションをとっているのでしょうか?私たちは幼い頃から両親に話すことを教えられました。長期にわたる教育と独学を通じて、私たちは中国語を学び、自分のニーズを表現することを学びました。親は、私たちの合図を受け取ったり、要求を聞いたりすると、私たちを満足させるために最善を尽くします。
同様に、コンピュータ プログラミング言語は、私たちとコンピュータとの間の通信のための言語であり、特定の規則と文法に従ったコンピュータ言語であり、この言語を通じてコンピュータを制御することができます。
コンピュータの基礎知識を紹介する際に、コンピュータシステムの階層概念を導入しましたが、プログラミング言語は最終的にはコンピュータが直接解釈できる機械語に変換されます。
これまで、プログラミング言語は数百種類あり、主に機械語、アセンブリ言語、高級言語の 3 つの段階を経てきました。
第一世代言語 (1946-1953) - 機械語: コンピュータ回路に組み込まれた命令であり、0 と 1 で構成され、CPU が直接解釈できるデータです。機械語はコンピュータ ハードウェア上で直接動作するため、非常に効率的です。これらの機械語は一般に専門家のみが理解できます。
第二世代言語 (1954-1964) - アセンブリ言語: 複雑で読みにくい機械語を解決するために、機械語に近い低水準言語であるアセンブリ言語があります。アセンブリ命令は、機械語命令の覚えやすい記述形式です。ニーモニックは機械語命令のオペコードを置き換えるのに使用され、アドレス記号 (Symbol) またはラベル (Label) は命令またはオペランドのアドレスを置き換えるのに使用されます。これにより、言語の記憶力と認識力が大幅に向上します。ただし、アセンブリ言語には依然として機械的な考え方が強く残っており、プログラマーは依然として多くのアセンブリ命令を覚えておく必要があります。
コンピュータの発展に伴い、コンピュータプログラムの移植性への要求も高まっており、特定の機種に依存しないコンピュータ言語の必要性が急務となり、この言語で書かれたプログラムが様々なプラットフォーム上で動作することが望まれ、高級言語とも呼ばれる第3世代言語が誕生しました。高級言語の開発は 2 つの段階に分かれており、前者は構造化言語またはプロセス指向言語に属し、後者はオブジェクト指向言語に属します。
第 3 世代言語 (1980 年代以前) プロセス指向の高級言語:プロセス指向とは、問題を解決するために必要な手順を分析し、その手順に従ってアルゴリズムを実行する、プロセス中心のプログラミングの考え方です。手続き型言語プログラムの本質は、段階的に繰り返し計算することであり、それはコンピュータ実行の観点から始まります。手続き型言語は、複雑なアルゴリズムの設計には適していません。
プロセス指向の高級言語には、FORTRAN (1956 年)、ALGOL (1958 年)、GOBOL (1959 年)、PASCAL (1968 年)、C (1972 年) などがあります。
1) フォートラン (1956)
FORTRAN の正式名称は FORmula TRANslation (数式変換) で、1954 年に提案され、1956 年に正式に使用されました。IBM の 704 コンピューター用に開発されました。
2) アルゴル (1958)
ALGOLの正式名称はALGOrithmic Language(アルゴリズム言語)で、ローカル変数や再帰の概念を初めて導入した入れ子構造のプロセス指向プログラミング言語です。
3) ゴボル (1959)
GOBOLの正式名称はCommon Business-Oriented Language(Common Business-Oriented Language)で、主に経営管理(データ処理)の分野で使用されます。
4) パスカル (1968)
PASCAL は、17 世紀のフランスの有名な哲学者兼数学者であるブレーズ パスカルを記念して作成されました。1960 年代後半にスイスの Niklaus Wirth 教授によって設計され、設立されました。Pascal は、豊富なデータ型と簡潔で柔軟な演算ステートメントを備えた最も初期の構造化プログラミング言語です。
5) C (1972)
C 言語は、AT&T ベル研究所のデニス M.リッチーによって開発された最も古典的なプロセス指向言語です。B 言語 (米国のベル研究所のケン・トンプソンが、BCPL 言語に基づいて、非常にシンプルでハードウェアに近い言語を設計) の限界を克服するためにマシンに依存し、データ型に依存しません。
第 3 世代言語 (1980 年代以降) - オブジェクト指向の高級言語:オブジェクト指向プログラミング (OOP) は、データやロジックを表現するためにアクションや関数を使用するのではなく、オブジェクトを中心に構築されたプログラミング言語モデルです。オブジェクト指向の思考は人間の視点、つまりすべてがオブジェクトであるという観点から始まります。
オブジェクト指向プログラミングには、クラスとオブジェクトという 2 つの最も重要かつ基本的な概念があります。オブジェクトは属性と動作で構成されており、類似したさまざまな属性と動作を分類できます。すべてのオブジェクトはクラスで記述できますが、その逆は当てはまりません。オブジェクトの記述にすべてのクラスが使用されるわけではありません。特定のオブジェクトを記述するのに十分な情報がクラスにない場合、そのようなクラスは 抽象 クラスになります。
オブジェクト指向の高級言語には、Smalltalk (1972)、C++ (1983)、Python (1991)、Java (1995)、C# (2001)、Go (2009) などが含まれます。
1) スモールトーク (1972)
Smalltalk は、歴史上 2 番目のオブジェクト指向プログラミング言語であり、最初の真の統合開発環境 (IDE) 言語として認識されています。オブジェクト指向 クラスとオブジェクトという 2 つの概念は、Simula プログラミング言語で初めて登場しました。
2) C++ (1983)
1997 年、Benjani Stroustrupp はベル研究所にいて、主に C の改良を行っていました。1983 年まで正式に C++ と呼ばれていましたが、国際標準化機構 (ISO) が C++ 標準の最初のバージョンを発行したのは 1998 年になってからでした。
3) パイソン (1991)
1989 年にクリスマス休暇を過ごすために、Guido は Python 言語のコンパイラ/インタプリタを書き始め、1991 年に最初の Python コンパイラ (インタプリタも兼ねる) が誕生しました。C言語で実装されており、Cライブラリ(.soファイル)を呼び出すことができます。
4) ジャワ (1995)
Java は、1991 年に SUN の James Gosling と彼のチームによって開発されたプログラミング言語です。当初は Oak (オークの木) という名前でしたが、1995 年に SUN が正式にその名前を Java に変更しました。
5) C# (2001)
C#の正式名称はCシャープで、1998年にDelphiの言語設計者であるヘイルスベルグ氏がマイクロソフトの開発チームを率い、.Net Framework環境をベースに、C++の基本的な考え方を踏襲して開発した言語で、2001年に正式にリリースされました。
6)Go(2009年)
Go は、Golang としても知られ、Google のチーフ ソフトウェア エンジニアである Rob Pike が、Robert Griesemer (Java HotSpot コンパイラおよび Google ブラウザ JavaScript の V8 エンジン参加者) および Ken Thompson (B 言語および C 言語のデザイナー) と協力して設計および開発したもので、2009 年 11 月にオープンソース化された言語です。
1.1.1. Java プログラミング言語の定義
英語の公式定義:
Java™ プログラミング言語は、汎用、同時実行、厳密に型指定されたクラスベースのオブジェクト指向言語です。通常、Java 仮想マシン仕様で定義されているバイトコード命令セットとバイナリ形式にコンパイルされます。
Java™ プログラミング言語は、汎用、同時実行、厳密に型指定されたクラスベースのオブジェクト指向言語です。通常、Java 仮想マシン仕様で定義されているバイトコード命令セットとバイナリ形式にコンパイルされます。
1.2、Java言語開発の歴史
年 | イベント |
---|---|
1991年 | 美国SUN公司は、消火器製品(PDA、パソコン、電子機器など)で使用できるアプリケーションプログラムを開発しましたが、現在最も人気のあるプログラムはCとC++であり、C++は非常に高価で複雑であるため、消火器製品での使用が可能です。いくつかの影響力があり、最終的には Sun 社 (マキシス・ハイシスリン) の C++ ベースの小グループで、プラットフォームとは関係のない新しい言葉「Oak」が発表されました。Oak の名前は、Gosling 社の外部に由来するものですJames Gosling 。 |
1995年 | Oak はグラフィックス カード メーカーの登録商標であり、Java は濃厚なコーヒーで有名なインドネシアの「ジャワ島(注:ジャワの音訳)」の英語名であるため、1995 年 1 月にオークは Java に改名されました。Java の公式商標が濃いコーヒーであるのはそのためです。 |
1996年 | JDK1.0 バージョンは 1996 年初めにリリースされました。このバージョンには、オペレーティング環境 (つまり、Java ランタイム環境、JRE) と開発環境 (つまり、Java 開発キット、IDK) の 2 つの部分が含まれています。動作環境には、コア API (Java コア クラス ライブラリ)、統合 API、ユーザー インターフェイス API、パブリッシング テクノロジ、Java 仮想マシン (Java 仮想マシン、JVM) の 5 つの部分が含まれ、開発環境には Java プログラムをコンパイルするためのコンパイラ (Javac コマンド) が含まれます。 |
1998年 | 1998 年 12 月 4 日、jdk はマイルストーンとなるバージョン 1.2 を迎え、JDK1.2 とともに JSP/SERVLET、EJB などの仕様がリリースされ、Java は J2EE、J2SE、J2ME の 3 つのバージョンに分割されました。Java SE: (Java Platform, Standard Edition) は、Java プログラムを作成および実行するための最も基本的な環境を提供します。これは Java テクノロジーの中核であり基礎です。コレクション クラス、ファイル操作、I/O ストリーム、スレッド、シリアル化、および GUI フォーム プログラミングの学習に集中できます。Java EE: (Java Platform, Enterprise Edition) は、サーバーベースの分散エンタープライズ アプリケーションの開発および運用環境を提供します。jsp、サーブレット、jdbc、ejb、ssh などのフレームワークの学習に集中できます。J2ME (Java Platform、Java2 Micro Edition): 組み込みアプリケーションの開発およびランタイム環境を提供します。携帯電話プログラムや PDA プログラムなど。 |
1999年 | 1994 年 4 月 27 日、HotSpot 仮想マシンがリリースされました。 |
2000 ~ 2002 年 | 2000 年に JDK1.3 がリリースされ、2002 年に JDK1.4 がリリースされ、JDK の歴史の中で比較的成熟したバージョンとなり、正規表現、新しい XML パーサー、例外チェーン、NIO、ログ API のサポートが追加されました。 |
2004年 | 2004 年 9 月 30 日、jdk1.5 がリリースされました。このバージョンでは、Java 構文の使いやすさが大幅に向上したため、SUN は JDK1.5 を JDK5.0 に変更し、自動ボックス化およびボックス化解除、列挙、変数パラメーター (Varargs)、ジェネリックス (Generic)、For-Each ループなどの機能を追加しました。 |
2006年 | 2006 年 11 月 3 日に、jdk6.0 がリリースされました。このバージョンでは、JAXB2 を使用してオブジェクトと XML の間のマッピングが実現され、JDBC は JDBC4.0、コンパイラ API、および一般的なアノテーションのサポートにアップグレードされました。2009 年に Oracle (oracle) が SUN を買収しました。 |
2011年 | 2011 年 7 月 28 日に、djk7.0 がリリースされました。このバージョンでは、バイナリ整数、文字列をサポートする switch ステートメント、複数の例外キャプチャ、リソースを自動的に閉じる try ステートメントなどの新機能が導入されました。 |
2014 年 | 2014 年 3 月 18 日に、jdk8.0 がリリースされました。このバージョンでは、新しいインターフェイスのデフォルト メソッドが追加され、新しい Lambda 式、関数型インターフェイス、コレクションのストリーム操作が導入され、IO\NIO が改善されました。 |
2017年 | 2017 年 9 月 22 日に、jdk9.0 がリリースされました。 |
2018年 | 2018 年 3 月 20 日に jdk10 がリリースされ、同年 9 月 25 日に jdk11 がリリースされました。 |
2019年 | 2019 年 3 月 19 日に jdk12 がリリースされ、同年 9 月 17 日に jdk13 がリリースされました。 |
2020年 | 2020 年 3 月 17 日に jdk14 がリリースされ、同年 9 月 15 日に jdk15 がリリースされました。 |
2021年 | 2021 年 3 月 16 日に jdk12 がリリースされ、同年 9 月 14 日に jdk17 がリリースされました。 |
2022年 | 2022 年 3 月 22 日に jdk18 がリリースされ、同年 9 月 20 日に jdk19 がリリースされました。 |
1.3. Java言語の特徴
Java は総合言語として最高のオブジェクト指向言語の 1 つであり、C++ 言語のさまざまな利点を吸収するだけでなく、C++ では理解しにくいポインタなどの概念を放棄しています。Java には、単純さ、オブジェクト指向、クロスプラットフォーム (移植性)、信頼性、セキュリティ、ダイナミクス、およびマルチスレッドのサポートという特徴があります。
-
シンプルさ
Java 言語は C++ 言語の利点を継承し、C++ の理解できないポインタを放棄し、多重継承を置き換えるインターフェイスを使用します。多重継承とポインタはプログラムをより複雑にします。同時に、Java はメモリ管理を容易にする自動ガベージ コレクション メカニズムも設計します。Java は豊富なクラス ライブラリ、API ドキュメント、およびサードパーティ ツール ライブラリも提供します。
-
オブジェクト指向
オブジェクト指向は Java 言語の基礎であり、プロパティやメソッドを含むオブジェクトを基本単位とします。オブジェクトの状態は属性によって表現され、オブジェクトの動作はメソッドによって表現されます。Java はオブジェクト指向の機能を最大限に発揮しています。Java は「すべてがオブジェクトである」ことを提唱しています。すべてのオブジェクトはクラスによって記述され、プロパティとメソッドをクラスの外に個別に記述することはできません。
-
クロスプラットフォーム (移植性)
コンピュータの高級プログラミング言語は、プログラムの実行方法に応じてコンパイル言語とインタープリタ言語に分類できます。
コンパイル型: 特別なコンパイラを使用して、クエリ コードをコンピュータが一度に特定のオペレーティング システムで認識できる機械命令に変換します。C と C++ は両方ともコンパイル言語です。
解釈タイプ: 特別なインタプリタを使用して、ソース プログラム コードを 1 つずつプラットフォーム固有の機械語命令に解釈し、同時翻訳と同様に実行ステートメントを解釈します。ASP と PHP はインタプリタ型言語です。
また、Java は「一度書けばどこでも実行できる」 (一度書けばどこでも実行できる) として知られており、これは SUN が Java プログラミング言語のクロスプラットフォーム特性を示すために使用したスローガンでもあります。
コンパイル言語の効率を向上させるために、1996 年の JDK1.0 バージョンにはコンパイル言語とインタプリタ言語の長所を組み合わせたジャストインタイム (JIT) コンパイラが搭載されたジャストインタイム コンパイル技術が開発され、その代表的な製品が Java です。
Java はコンパイルおよびインタープリタ型の言語であり、まず、汎用の Java コンパイラを使用して Java ソース プログラムをプラットフォームに依存しないバイトコード ファイル (.calss ファイル) にコンパイルし、次に JVM (Java 仮想マシン) がそのバイトコード ファイルを 1 つずつ解釈して実行します (ローカル マシン コードとして解釈されます)。
-
信頼性
Java は、コンパイル中および実行時にプログラム エラーをチェックし、Java の信頼性を高める例外処理メカニズムを提供する、厳密に型指定された言語です。
-
安全性
Java プログラム コードはバイトコード検証に合格する必要があり、C++ 言語のポインタとメモリ解放操作は破棄され、自動ガベージ コレクション メカニズムが提供されるため、ユーザーによるメモリ上での不正な操作が効果的に防止されます。
Java はオブジェクト指向の仕様を厳密に遵守し、データ実装の詳細をカプセル化し、インターフェイスのみをユーザーに公開します。
-
動的
Java はクロスプラットフォームを実装しており、コンパイル期間とランタイムに分かれており、Java にはリフレクション メカニズムが用意されているため、ランタイム情報を取得し、必要なクラス情報を動的に調整またはロードできます。
-
マルチスレッドのサポート
Java 言語は、複数のスレッドの同時実行をサポートし、複数のスレッド間の同期メカニズムを提供して、異なるスレッドがデータを正しく共有できるようにします。これにより、プログラムの実行効率が大幅に向上します。
2.JDKをダウンロードしてインストールします
2.1. JDKのダウンロード
1) 公式ウェブサイトにアクセスします
JDK 公式 Web サイトOracle | Cloud Applications and Cloud Platformに入り、Products->Java を選択し、右上隅の Download Java を選択します。最新バージョンをダウンロードする場合は、このページで問題ありません。
2) ダウンロードする必要があるバージョンを見つけて入力します。
ここではJDK8をダウンロードし、Javaアーカイブ(Javaアーカイブ)を選択する必要があります。
3) バージョンを選択します
Java8 を見つけます。ここには 2 つあります。1 つは Java SE8 (8u211 以降) - Java SE8u211 以降のバージョン、もう 1 つは Java SE8 (8u202 以前) - Java SE8u202 以前のバージョンです。
ここではJava SE8(8u211 以降)を選択します。
次に、クリックして特定のバージョンを表示し、入力すると、1 つのバージョンで複数のシステムに Java SE Development Kit 8u341 (jdk) と Java SE Runtime Environment 8u341 (jre) が提供されることがわかりました。ここでjdkをダウンロードします。
注: ログインしていない場合は、ログイン ページにリダイレクトされ、Oracle アカウントを登録する必要があります。
2.2. JDKのインストール
1) JDK のデフォルトのインストール場所は C:\Program Files です。もちろん、インストール用に他のドライブ文字を選択することもできます。
2) 次に、jre をインストールするように求められます。
最初のステップで jdk をインストールするとき、jdk ディレクトリには実際には jre が含まれています。ここでは jre ディレクトリを選択し、2 セットの jre をインストールする必要があります。2 番目の jre は一般ユーザー用であり、jdk の jre は開発者用です。
2.3、jreとjdkの関係
jre と jdk の関係については、公式画像を使用して次のように示します。
注: 公式の JDK8 API ドキュメントのダウンロード アドレスは、Java Development Kit 8 Documentationです。
2.3.1、JREとは何ですか
JREとは英語でJava RuntimeEnvironmentの略で、Javaアプリケーションを実行するための最低限の要件を提供するJava実行環境のことです。これは主に、Java 仮想マシン (JVM)、Java プラットフォームのコア クラス、およびいくつかのサポート ファイルで構成されます。
公式英語説明:
JRE は、 Java プログラミング言語で記述されたアプレットやアプリケーションを実行するために必要なライブラリ、Java 仮想マシン、およびその他のコンポーネントを提供します。このランタイム環境はアプリケーションとともに再配布して、アプリケーションを自立させることができます。
JRE は、Java プログラミング言語で記述されたアプレットやアプリケーションを実行するために必要なライブラリ、Java 仮想マシン、およびその他のコンポーネントを提供します。このランタイム環境はアプリケーションとともに再配布できるため、自己完結型になります。
2.3.1.1、JREの構成
1) 導入・導入技術
2) ユーザー インターフェイス ライブラリ - ユーザー インターフェイス ライブラリ
Swing (グラフィカル ユーザー インターフェイス) | java2d (2D グラフィックスおよびイメージング) | AWT (抽象ウィンドウ ツールキット) | アクセシビリティ (アクセシブルな Java アプリケーションと支援テクノロジ) |
---|---|---|---|
ドラッグアンドドロップ | 入力方式 | Image I/O(图像I/O) | プリントサービス |
音 | Java FX (JDK 7 上位バージョンの後に導入された新しいインターフェイス ライブラリ) |
3) Integration Libraries - 統合ライブラリ
IDL (インターフェース定義言語) | JDBC (Java データベース接続) | JNDI (Java ネーミングおよびディレクトリ インターフェイス) | RMI (リモートメソッド呼び出し) |
---|---|---|---|
RMI-IIOP (インターネット ORB 間プロトコルのリモート メソッド呼び出し) | Scripting(脚本) |
4) その他の基本ライブラリ - その他の基本ライブラリ
Bean (JAVA 再利用可能なコンポーネント) | セキュリティ(セキュリティAPI) | 連載 | 拡張機構 |
---|---|---|---|
JMX (Java 管理拡張機能) | XML JAXP (XML 処理用 Java) | ネットワーキング | オーバーライドメカニズム |
JNI (Java ネイティブ インターフェイス) | 日時 | 入出力 | 国際化 |
5) lang と util ベース ライブラリ - lang と util ベース ライブラリ
ラングとユーティリティ | 算数 | Collections(集合) | 参照オブジェクト |
---|---|---|---|
正規表現 | ロギング | 管理 | 計装() |
同時実行ユーティリティ | Reflection(反射) | バージョン管理 | 設定 API (設定 API) |
JAR (Java アーカイブ) | ジップ(圧縮) |
6) Java HotSpot クライアントおよびサーバー VM - Java HosSpot クライアントおよびサーバー仮想マシン
仮想マシン VM とは何ですか?
仮想マシン (Virtual Machine) は、仮想コンピュータのことであり、仮想コンピュータの一連の命令を実行するために使用されるソフトウェアであり、一般に、仮想マシンはシステム仮想マシンとプログラム仮想マシンに分類できます。
システム仮想マシン: 物理コンピュータ ハードウェアの完全なシミュレーション (シミュレーション) であり、完全なオペレーティング システムを実行できるソフトウェア プラットフォームを提供します。たとえば、VMware はシステム仮想マシンです。
プログラム仮想マシン: コンピュータ プログラムを実行するために設計された仮想マシン。たとえば、ここで学習する Java 仮想マシンはプログラム仮想マシンに属します。
不同的操作系统它们的指令集都有差异,而通过JVM(Java虚拟机)在操作系统上制定一套数据结构和操作指令,JVM负责装载字节码到内存中,并把它翻译为对应平台的机器指令,以实现供硬件和操作系统的独立性。
JVM也有多种实现,比如:Oracle的JVM、IBM的JVM等,其中使用最广泛的还是Oracle的HotSpot JVM。
为什么叫HotSpot虚拟机?
HotSpot翻译过来是“热点”,正是因为它内部实现了热点代码探测功能,通过执行计数器找出使用频率较高的代码,然后通过JIT(即时编译)将这部分代码直接翻译为机器码,并保存下来,以提高执行效率。
Java平台标准版提供了Java虚拟机(VM)的两种实现:
-
Java HotSpot Client VM
客户端VM是通常用于客户端应用程序的平台的实现。对客户机VM进行了调整,以减少启动时间和内存占用。在启动应用程序时,可以使用-client命令行选项调用它。
-
Java HotSpot Server VM
服务器虚拟机是一种为最大程序执行速度而设计的实现,以牺牲启动时间和内存为代价。在启动应用程序时,可以使用-server命令行选项调用它。
简单的说:JRE = JVM+Java Library(Java标准类库)
2.3.2、什么是JDK
JDK,是英文Java Development Kit的缩写,即Java开发工具包,是用于开发Java应用程序和Applet程序的开发环境。
官方英文解释:
The JDK includes the JRE plus command-line development tools such as compilers and debuggers that are necessary or useful for developing applets and applications.
JDK包括JRE和命令行开发工具,如编译器和调试器,这些工具对于开发小程序和应用程序是必要的或有用的。
2.3.2.1、JDK的组成
1)Tools & Tool APIs-工具和工具API
名称 | 描述 |
---|---|
java | 运行编译后的Java程序 |
javac | 编译器,用于将Java源程序转成字节码 |
javadoc | 文档生成器 |
jar | 打包工具 |
javap | Java反汇编器 |
jdeps | Java类依赖分析器 |
Scripting | 可用于运行与Java平台交互的脚本 |
Security | 设置安全策略 |
Monitoring | 监视JVM性能统计信息 |
JConsole | 用于监视Java虚拟机的JMX兼容图形工具 |
VisaualVM | 可视化界面,用于查看Java应用程序在Java虚拟机(JVM)上运行时的详细信息,以及对这些应用程序进行故障诊断和分析。 |
JMC | JDK任务控制(JMC)是一套用于管理、监视、分析和排除Java应用程序故障的高级工具。JMC能够对代码性能、内存和延迟等方面进行高效和详细的数据分析,而不会引入通常与分析和监视工具相关的性能开销。 |
JFR | JFR的全称为Java Flight Recorder,用来记录Java应用程序在运行时的数据信息和各种发生的事件。 |
JPDA | 平台调试器架构 |
JVM TI | JVM工具接口,提供了一种检查状态和控制在Java虚拟机(JVM)中运行的应用程序执行的方法 |
IDL | 是一种分布式对象技术,可用来在Java语言中定义、实现和访问CORBA对象。 |
RMI | 远程方法调用 |
Java DB | 这是一个纯 Java 实现、开源的数据库管理系统 |
Deployment | 用于在web上部署java应用程序和小程序的实用程序 |
Internationalization | 创建可本地化的应用程序 |
Web Services | Java Web服务工具 |
Troubleshooting | 可用于特定的故障排除任务 |
上面一些Tools可以在JDK的bin目录下找到,并且还有一些其他的工具:
比如:Javah.exe可调用java过程的c过程,JDK8中已经被javac -h取代,并且在JDK10中移除了Javah.exe。
简单的说:JDK = JRE+Development Tool(Java 开发工具)
注:如果只需要运行java程序/Applet程序(是一种特殊的java程序,本身不能单独运行,需要嵌入在html中,借助浏览器/appletviewer解释执行),下载安装jre环境即可。如果要自行开发,需要下载jdk,djk中附带有jre环境。
JDK目录下的src.zip文件:是java提供的API类的源代码压缩文件。
3、JDK环境变量设置
3.1、什么是环境变量
在学习dos命令的时候,我们打开截图工具:snippingtool,使用win+R,再输入snippingtool即可,但并非所有可执行程序都能通过这种方式打开。
我们看到Snippingtool.exe在C:\windows\System32目录下,而QQ在C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe目录下。 他们有什么区别吗?我们看下环境变量:
C:\windows\System32,在系统环境变量中,当我们使用命令行运行一个命令的时候,操作系统会自动搜索当前目录以及PATH变量中的路径。
DOS命令分为内部命令和外部命令,内部命令是集成在COMMAND.COM中的,是计算机启动后就常驻内存的命令,在任何命令下都可以使用的;而外部命令是一个可以单独执行的文件,外部命令需要保证命令文件在当前目录中,如果我们同样希望在任何命令下可以执行一个外部命令,我们就可以把这个路径加到环境变量中。
环境变量:是为执行计算机指令提供的一个环境,一个让系统自动检索的路径。
3.2、环境变量设置
前面我们安装好了jdk,并且介绍了什么是环境变量,为了方便我们开发及使用JDK-Tools,我们给他设置一下环境变量。
1)步骤一
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,比如:“C:\Program Files\Java\jdk1.8.0_341”了
2)步骤二
在系统变量里点击新建变量名填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME\lib\tools.jar ”。注意不要忘记前面的点和中间的分号。
注:在window中“ .”指的是当前路径,linux中也是,也就是说从当前目录开始查找class文件(CLASSPATH:告诉jvm要使用或者执行的class放在什么路径上)。
dt.jar是关于运行环境的类库,主要是swing包
tools.jar是关于一些工具类的类库
rt.jar包含了jdk的基础类库
3)步骤三
在系统变量里找到Path变量,这是系统自带的,不用新建。后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分号。
注:%JAVA_HOME% 即取JAVA_HOME=....的这个值,不写就是JAVA_HOME字符串了。设置了Path,可以在任何路径下都可以识别java/javac命令
4)步骤四
当我们在cmd中运行java和javac目录都正常时,我们的环境变量就配置完成了。
java -version 查看Java运行环境的版本;
javac -version 查看Java程序编译的版本;
4、第一个java程序
4.1、java和javac命令简介
4.1.1、java-运行java程序命令工具
【命令功能:】 java命令启动java应用程序。它通过启动Java运行时环境(JRE)、加载指定的类并调用该类的main()方法来执行java程序。
【命令格式:】 java [-options] classname [args...] 用于执行java类
或 java [-options] -jar jarfile [args...] 用于执行jar文件【常用选项:】
-server 选择 "server" VM,默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>用 ; 分隔的目录,JAR档案和ZIP档案列表,用于搜索类文件。
-verbose:[class|gc|jni] 启用详细输出
-version 输出产品版本并退出
-showversion 输出产品版本并继续
-esa | -enablesystemassertions 启用系统断言
-dsa | -disablesystemassertions 禁用系统断言
-javaagent:<jarpath>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath> 使用指定的图像显示启动屏幕当然还有很多非标准选项、运行时选项、JIT编译选项等等:
-Xmnsize 设置JVM年轻代堆的初始大小和最大大小
-Xmssize 设置JVM堆的最小大小和初始大小
-Xmxsize 设置JVM最大允许分配的堆内存大小【使用技巧:javaw命令与java相同,只是javaw没有关联的控制台窗口。如果不希望出现命令提示窗口,请使用javaw。然而,如果启动失败,javaw启动器将显示一个包含错误信息的对话框。】
4.1.2、javac-编译命令工具
【命令功能:】 Java编程语言编译器,读取用Java编程语言编写的源文件,并将它们编译成字节码文件。
【命令格式:】javac <options> <source files>
【常用选项:】
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的
搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<filename> ファイルからオプションとファイル名を読み取ります
4.2. 最初の Java プログラム - hello world の出力
1) テスト.java
まず、D:\testJava ディレクトリに新しい Test.java ファイルを作成し、そのファイルに次のように書き込みます。
public class Test{
public static void main(String[] args){
System.out.println("hello world!");
}
}
テストは、1 つ以上のクラスで構成されるクラス、つまり Java プログラムです。プログラムには main() メインエントリメソッドが 1 つだけあります。
2) パッケージ名を持つ Java クラス
package com.cn;
public class TestPackage{
public static void main(String[] args){
System.out.println("hello world!");
}
}