Lesson 1
Javaとは
Lesson 1
Chapter 1
はじめに
はじめに、この教材はJavaの基礎を学ぶためのものであり、Javaを使用してコンピュータプログラムを開発するための基本的な概念を学びます。 この教材では、Javaの概念を説明するために、具体的な例を使用して説明します。また、Javaの基本的なプログラミング演習を提供し、実践的な知識を身につけることができます。Javaを学ぶには、プログラミングの基礎知識を持っていることが望ましいですが、この教材は、Javaを初めて学ぶ人でも理解できるように、基本的な概念から説明しています。 この教材を通じて、Javaプログラミングの基礎を学び、自分でプログラムを作成する能力を身につけることを目指しています。Javaの基本的な概念を理解し、より高度なJavaプログラミングの学習に進むための基盤を築きましょう。

Lesson 1
Chapter 2
Javaとは
Javaはオブジェクト指向プログラミング言語の一つで、コンピュータプログラムを開発するために広く使用されている言語です。初心者にも学びやすい言語で、多くのコミュニティが存在し、オンラインのリソースも豊富にあります。 Javaは、サン・マイクロシステムズ(現在はオラクルによって所有されています)によって開発され、1995年に初めてリリースされました。
Javaの特徴
Javaは、オブジェクト指向プログラミング言語であり、高い移植性と安全性を備え、多くのプラットフォームで実行することができます。以下に、Javaの主な特徴をいくつか紹介します。
-
オブジェクト指向プログラミング(OOP)
オブジェクト指向プログラミングとは、プログラムを効率的に書くための手法の一つです。プログラム内の様々な機能を「オブジェクト」として扱い、それらのオブジェクトを組み合わせてプログラムを作成します。Javaはオブジェクト指向プログラミング言語の一つで、クラス、オブジェクト、継承、ポリモーフィズムなどの機能を有しています。 オブジェクト指向プログラミングを使うと、プログラムの再利用性やメンテナンス性が向上するとされています。なぜなら、オブジェクト指向プログラミング(直前の文章で前述)では、プログラムの部品を独立して作成することができ、それらを組み合わせてプログラムを作成するため、プログラムの再利用性が高まります。また、プログラムの変更や修正をする場合にも、必要な部品だけを修正することができるため、メンテナンス性が向上するとされています。
-
移植性
Javaは、プログラムを複数のプラットフォーム(Windows,MacOS,Linuxなどの環境のこと)で実行することができます。Javaコードは、コンパイルされるとJava仮想マシン(JVM)が理解できるバイトコードになり、JVMで実行されます。JVMは、Windows、Mac、Linuxなど異なるプラットフォームにインストールされるため、Javaプログラムはプラットフォームに依存せず、多くのプラットフォームで実行することができます。JVMについてはLesson1 Chapter3で解説します。
バイトコード
バイトコードとは、Javaなどのプログラミング言語で書かれたプログラムを、コンピュータが実行しやすい形式に変換したものです。
-
安全性
Javaは、セキュリティに優れたプログラミング言語です。Javaプログラムは、コンパイルされたバイトコードがJVMという仮想マシンで実行されるため、Javaプログラムは直接システムリソースにアクセスすることができません。JVMについてはLesson1 Chapter3で解説します。また、Javaは、プログラムが使うメモリを自動で管理するため、メモリリーク(使わなくなったメモリが解放されずに残ってしまうこと)が起こりにくくなっています。つまり、プログラムが正しくメモリを使い終わったら、Javaが自動的にそれを解放してくれるので、メモリ管理についての心配をする必要が少ないということです。
-
多用途性
Javaは、ウェブやスマートフォン、パソコン、大量のデータ処理や人工知能など、さまざまな分野で使われています。Javaには、多数のプログラム部品や機能が用意されているため、多くのプログラマーがJavaを使ってアプリを作っています。
-
大規模プログラムの開発
Javaは、大規模なプログラムの開発に向いています。オブジェクト指向プログラミングに対応しており、プログラムのコードを再利用することができます。また、多重スレッド処理という機能をサポートしているため、同時に複数の処理を実行できます。これにより、大規模なアプリケーションの処理速度を向上させることができます。また、プログラムをコンパイルしたり、実行可能ファイルを作成するためのツールであるビルドツールやプログラムが正しく動作するかどうかをテストするためのツールであるテストフレームワークなど、大規模なプロジェクトの開発に必要なツールやプログラムの開発を効率化するフレームワークを多数提供しており、多くのプログラマーが使用しています。例えば、Java開発用の統合開発環境(IDE)には、Eclipse、NetBeans、IntelliJ IDEAなどがあります。これらのIDEは、開発プロセスを自動化し、開発者がプログラムの品質を高めるための多数の機能を提供しています。
-
コミュニティのサポート
Javaは、オープンソースであり、多くのプログラマーがJavaプログラムの開発に参加しています。Java開発者コミュニティは非常に大きく、情報共有や相互支援が行われており、Java開発に関する情報やツールが多数提供されています。 これらの特徴により、Javaは多くのプログラマーに愛されているプログラミング言語の一つで、初心者でも比較的簡単に学ぶことができ、幅広い分野で活躍することができます。しかし、Javaには多くの機能があり、学習コストが高いと感じることもあるかもしれません。しかし、基礎から丁寧に学ぶことで、Javaの機能を活用し、高品質なアプリケーションの開発をすることができます。
コンパイラ言語とインタプリタ型言語
Javaは、コンパイラ言語とインタプリタ型言語の両方の特徴を持ったプログラミング言語です。この特徴は、Javaのプログラムの実行方法に大きな影響を与えます。 まず、コンパイラ言語とは、プログラムをコンパイル(仮想的なCPU(JVM)が理解できるバイトコードに変換すること)して実行ファイルを生成する方式のことです。Javaでは、ソースコードをJavaコンパイラによってバイトコードに変換し、その後、Java仮想マシン(JVM)上で実行することができます。バイトコードは、機械語に変換されることなく、様々なプラットフォームで実行することができるため、Javaはプラットフォームに依存しないプログラミング言語として知られています。 一方、インタプリタ型言語とは、プログラムを逐次解釈して実行する方式のことです。Javaにおいても、インタプリタが使用される場面があります。例えば、JShellというインタラクティブ(対話式、やり取り可能)なJavaシェルを使用して、Javaコードを逐次実行することができます。
Javaがコンパイラ言語とインタプリタ型言語の両方の特徴を持つことは、Javaが広く使われる理由の一つです。Javaのコンパイルと実行の方式は、高速な実行とプラットフォームの互換性を実現します。また、インタプリタ型言語としても使用できるため、Javaのコードを実行しながら直感的に操作することができます。

Lesson 1
Chapter 3
JDK、JRE、JVMの違い
JDK、JRE、JVMはJavaにおいて重要な概念であり、それぞれが異なる役割を持っています。 詳細は後述するので、まずはそれぞれのおおまかな概要を把握しておきましょう。
JDK(Java Development Kit)は、Javaプログラムを開発するために必要なツールやライブラリが含まれたパッケージです。JDKには、Javaコンパイラ、Java API、Javaランタイム環境(JRE)などが含まれています。つまり、JDKはJavaプログラムを作成するために必要なすべてのツールが含まれています。
JRE(Java Runtime Environment)は、Javaプログラムを実行するために必要な環境が含まれたパッケージです。JREには、Java仮想マシン(JVM)とJavaクラスライブラリが含まれています。つまり、JREにはJavaプログラムを実行するために必要なツールが含まれています。
JVM(Java Virtual Machine)は、Javaプログラムを実行するための仮想マシンです。JavaプログラムはJVM上で実行されます。つまり、JVMは、Javaプログラムがハードウェアやオペレーティングシステムの種類に依存せずに実行されるようにする仮想マシンです。
つまり、JDKはJavaプログラムを開発するために必要なツールが含まれたパッケージであり、JREはJavaプログラムを実行するために必要な環境が含まれたパッケージであり、JVMはJavaプログラムを実行するための仮想マシンであるということが言えます。
Javaを開発したり、Javaプログラムを実行するためには、それぞれの環境を適切にインストールする必要があります。
Java API
APIは「Application Programming Interface」の略で、プログラムが外部とやりとりするための規約や仕組みを指します。Java APIは、Javaプログラムが外部とやりとりするための規約や仕組みを提供するライブラリのことです。
Javaクラスライブラリ
JavaクラスライブラリとはJavaプログラムを作成する際に便利なクラスやメソッドが含まれたライブラリのことです。
JDKとは
JDK(Java Development Kit)は、Javaプログラムを開発するためのツールセットです。JDKには、Javaコンパイラやデバッグツール、APIドキュメント、プログラム開発で使用する補助ツール、実行環境(JRE)など、Java開発に必要な機能が含まれています。
JDKをインストールすることで、Javaプログラムの開発が可能になります。JDKに含まれる主なツールには、以下のようなものがあります。
- Javaコンパイラ:Javaプログラムをコンピューターが理解できる形式(バイトコード)に変換するためのツール。
- Javadoc:プログラムの説明書(APIドキュメント)を作るためのツール。
- Javaデバッガ:Javaプログラムを修正するために使用するツール。
- Jarツール:複数のJavaファイルをまとめて一つのファイルにするツール。
JDKには、Java SE(Standard Edition)やJava EE(Enterprise Edition)などのバージョンがあります。Java SEは、デスクトップアプリケーションやWebアプリケーションの開発に必要な機能が含まれており、Java EEは、ビジネス向けのアプリケーション開発に必要な機能が追加されたバージョンです。
JDKをインストールすることで、Javaプログラムを開発するための必要なツールが揃います。ただし、Javaプログラムの実行のみが必要であればJRE(Java Runtime Environment)のみ導入が必要です。
APIドキュメント
APIドキュメントとは、プログラムを使う際に必要な機能や使い方が書かれた説明書のことです。プログラムを使う人が、どのような機能があるかや、どのように使えばいいかを確認するために必要なものです。
Oracle JDK、Oracle OpenJDKの違い
Oracle JDKとOracle OpenJDKは、Java開発キット(JDK)の提供元が異なるものです。
Oracle JDKは、Oracleが提供するJava開発キットで、商用アプリケーションを開発する場合はライセンス契約が必要です。Oracle JDKには、商用アプリケーション開発に必要なツールやサポートが含まれています。また、Oracle JDKは、Java SEの最新バージョンがリリースされるたびに、Oracleによって更新されます。
一方、Oracle OpenJDKは、Oracleがオープンソースとして提供するJava開発キットで、商用アプリケーションを開発する場合でもライセンス契約は不要です。Oracle OpenJDKには、Java開発に必要なツールが含まれていますが、商用アプリケーション開発に必要なサポートは提供されません。また、Oracle OpenJDKは、Java SEの最新バージョンがリリースされるたびに、オープンソースコミュニティによって更新されます。
一般的には、Oracle JDKは商用アプリケーション開発に必要なサポートや機能が含まれているため、商用アプリケーションを開発する場合に選択されることが多いです。一方、Oracle OpenJDKは、オープンソースコミュニティによって開発が進められるため、最新の機能や改善が早く反映されるというメリットがあります。また、オープンソースとして提供されるため、ライセンス契約の必要がなく、個人や小規模な開発プロジェクトに適しています。
OpenJDKについて
OpenJDKとは、Javaプラットフォームのオープンソースのバージョンであり、Java開発者がJava開発に必要なツールやライブラリを無料で利用できるようにするために作成されました
オープンソースコミュニティ(有志のコミュニティ)によって開発・メンテナンスされており、Java開発者がJava SEの最新バージョンを利用できるように提供されています。Oracle JDKやIBM JDKなどの商用のJavaバージョンが存在する一方で、OpenJDKは無料で利用可能であることが特徴です。
また、OpenJDKは、Javaのコミュニティによって開発されており、Javaプラットフォームの標準化に貢献しています。Java SEの仕様策定やJava開発の方向性の決定など、Javaプラットフォームに関する重要な議論がOpenJDK上で行われています。
Java開発者がOpenJDKを利用することで、Java SEの最新バージョンを利用できるだけでなく、Java開発の方向性や、Javaプラットフォームの仕様策定に参加することも可能になります。また、オープンソースであるため、自由度が高く、開発者自身が必要な機能や改良を追加できる可能性があります。
標準化
標準化とは、ある分野において一定の基準を定めることで、品質や互換性を保証し、効率的な開発や利用を可能にすることです。例えば、プログラミングにおいては、標準化されたプログラミング言語やAPIがあることで、多くの人が同じ基準でコードを書くことができます。
AdoptOpenJDK(コミュニティが提供する OpenJDK)の紹介
AdoptOpenJDKは、コミュニティによって提供されるOpenJDKの実装で、Java開発者がOpenJDKを簡単にダウンロードして利用できるようにするために作成されました。
AdoptOpenJDKは、Java開発者が必要な機能を含んだOpenJDKのバージョンを提供することが特徴であり、Oracle JDKと同様の機能を持つことが期待されます。また、AdoptOpenJDKは、Oracle JDKと比較して安定性が高く、バグ修正が迅速に行われることが多いとされています。
AdoptOpenJDKは、Windows、Linux、macOSなど、さまざまなプラットフォームで利用可能です。また、AdoptOpenJDKはオープンソースであり、Java開発者が自由に改良を加えたり、必要に応じてカスタマイズすることができます。
AdoptOpenJDKは、Java開発者がOpenJDKを手軽に利用できるため、Java開発にとって非常に重要な存在です。また、Java開発者は、AdoptOpenJDKを利用することで、Oracle JDKなどの商用のJava実装に依存する必要がなくなり、Java開発における自由度が高まることが期待できます。
JREとは
JRE(Java Runtime Environment)は、Javaプログラムを実行するために必要な実行環境を提供するソフトウェアです。JREには、「Java仮想マシン(JVM)」とJavaプログラムを開発するためによく使われる機能をまとめたライブラリ「Javaクラスライブラリ」が含まれています。
JREは、Javaプログラムを実行するために必要なすべてのファイルを含んでいます。Javaプログラムがコンパイルされ、.classファイルが生成された後、それをJREで実行します。 JREは、Javaプログラムを実行するだけであれば、JDK(Java Development Kit)よりも軽量であり、Javaプログラマー以外(使用だけを目的とする)のユーザーにとっても非常に便利です。
JREは、Javaアプリケーションを実行するために必要な環境を提供する、Javaプログラムを実行するためには必須のソフトウェアです。Javaアプリケーションを実行するために、JREをダウンロードしてインストールする必要があります。JREは、Javaの公式サイトからダウンロードできます。
JVMとは
JVM(Java Virtual Machine)は、Javaプログラムを実行するための仮想マシンです。Javaプログラムは、通常、Javaコンパイラによってコンパイルされて、Javaバイトコードと呼ばれるバイナリ形式に変換されます。JVMは、Javaバイトコードを解釈し、コンピューター上で実行可能なマシンコードに変換します。
バイナリ形式
バイナリ形式とは、コンピュータが理解できる0と1の並びで表現されたデータのことです。人間が理解できるテキスト形式とは異なり、直接コンピュータが処理することができます。
JVMには、メモリ管理、ガベージコレクション、スレッド管理、セキュリティなど、Javaプログラムを実行するために必要な機能が含まれています。
- メモリ管理:Javaプログラムの実行に必要なメモリ領域を管理する機能です。
- ガベージコレクション:Javaプログラムが使用しなくなったメモリ領域を自動的に解放する機能です。
- スレッド管理:Javaプログラム内で複数の処理を同時に実行するための機能です。
JVMは、Javaプログラムがどのプラットフォーム上でも実行可能であることを保証します。 つまり、Javaプログラムがコンパイルされたプラットフォームと異なるプラットフォームでも、同じバイトコードを使用して実行できます。
JVMは、Javaの主要な利点の1つです。Javaプログラムがプラットフォームに依存しないため、Javaプログラマーは、複数のプラットフォーム上でJavaプログラムを実行できます。その点で、JVMはJavaの移植性を向上する重要な役割を果たしています。
JVMには、HotSpot、JRockit、IBM J9など、複数の選択肢があります。それぞれの選択肢は、性能、メモリ管理、ガベージコレクション、セキュリティなどの観点から異なる特徴を持っています。そのため、Java開発者は自分のアプリケーションに最適なJVMを選択することが重要です。
