Java
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/16 21:58 UTC 版)
Javaプログラミング例
Hello World
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
- Javaプログラムでは全てのフィールドとメソッドが
class
内に記述される。 - Javaプログラムは静的メソッド
public static void main (String[] args)
から開始される。args
はプログラム開始時のコマンドライン・パラメータである。 System.out
はSystemクラスの静的フィールドoutを意味する。outはPrintStream型のインスタンスである。out.println("文字列")
はoutのprintlnメソッドを呼び出す。
Javaプラットフォーム
Javaプラットフォーム (Java Platform) は、Javaプログラムを開発または実行する為のソフトウェア群の総称である。Javaプラットフォームは対象環境に合わせて、Java実行環境およびJava開発環境の構成内容と、Javaテクノロジの追加内容を変えたエディションに編集されて公開されている。Javaテクノロジは権利元ベンダーだけでなくサードパーティー側からも提供されており、その標準化はJavaコミュニティプロセス (JCP) が管理している。Java実行環境とJava開発環境はオープンソース化されているので各企業、各団体、開発者各自が営利または非営利で様々なソフトウェアと関連技術を公開しており、巨大なITエコシステムを構築している。
エディション
2019年現在、Java権利元のオラクルは、対象環境に合わせたJavaプラットフォームの4つのエディションを公開している。エディションによってJava実行環境とJava開発キットに含まれるツール構成に違いがあり、またクラスライブラリとAPIの構成内容も異なっている。Java仮想マシンの性能にも差異がある。JDK 1.1までは単体エディションで、J2SE 1.2から3エディションに分かれた。J2SE 5.0頃から拡張テクノロジの一つであったJava Cardが昇格して4エディションとなった。
- Java Platform, Standard Edition (Java SE)
- スマートフォンやタブレット端末を含むパーソナルコンピュータ向けである。主にデスクトップアプリケーションとWEBアプリを開発または実行する。一般ユーザー用仕様と言える。
- Java Platform, Enterprise Edition (Java EE) / Jakarta EE
- サーバマシン、ワークステーション向けである。スタンダード版に加え、WEBサーバ及び多層クライアントサーバ、業務用システムを開発する為の、様々な拡張技術クラスライブラリ&APIが追加されている。業務用プロフェッショナル仕様であり大規模である。
- 2017年9月にオラクルは今後のJava EEのバージョンアップがエクリプス財団によって行われる事を発表した[23][24]。Java EEの商標は現行版のサポートを続けるオラクルが保持したので、エクリプス財団による今後のバージョンはJakarta EEの名称で公開される事になった[25]。
- Java Platform, Micro Edition (Java ME)
- 組み込みシステム、マイクロコントローラ向けである。コンピュータ資源が制限されている集積回路や電子機器に対応した特定技術仕様であり、専用のクラスライブラリ&APIも用意されている。Java仮想マシンも比較的コンパクトにまとめられている。
- Java Card
- スマートカード(ICカード)、小型メモリデバイス上で運用されるプログラムを開発するためのエディションである。現在[いつ?]ではSIMカードやATMカードなど幅広い分野に普及している。Java仮想マシンの機能は非常にコンパクトにまとめられており、幾つかのプリミティブ型も省略されている。故に特殊なプログラミングスタイルが求められる。
Java実行環境 (JRE)
Java実行環境 (Java Runtime Environment; JRE) は、Javaアプリケーションを実行するために必要なソフトウェアである。Java仮想マシン、''Java.exe''のスターターを含めた各種実行サポートツール、Javaクラスライブラリで構成される。Java実行環境の中核はJava仮想マシンである。エディション毎に仮想マシンの仕様と性能は異なっており、また実行時は複数の動作モードを持つ。仮想マシンはスターターを通して稼働されるのが普通である。様々な使用状況に対応したスターターが最初に実行されて、そこから仮想マシンが呼び出されてJavaプログラムの実行を移譲される。仮想マシンはJavaクラスライブラリを逐次読み込みながらJavaプログラムを実行する。Java実行環境のツール内容とクラスライブラリ構成は、エディション毎に違いがある。
- Javaクラスライブラリ
Javaクラスライブラリは、普遍的に呼び出される特定の機能を実装したクラスの集合体である。Javaプログラムはライブラリ内のクラスを逐次呼び出しながら処理を実行する。なお、それぞれのJavaクラスライブラリ内部からプログラマの利用に向けて外部公開されている部分を「Java API」と呼ぶ。
- 基礎ライブラリ - Java言語の基礎を扱う。
- 入出力ライブラリ - ファイル入出力など。
- コレクションライブラリ - 動的配列と動的連想配列。データ集合の操作。
- 数学ライブラリ - 各種計算を扱う。
- 国際化地域化ライブラリ - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
- ネットワークライブラリ - ソケット通信を扱う。
- GUIライブラリ - グラフィカル・ユーザーインターフェースを扱う。
- アプレットライブラリ - アプレット生成用。
- Javaビーンズライブラリ - ソフトウェアコンポーネント作成用。
- データベース接続ライブラリ - SQLを扱う。
- リモートメソッドライブラリ - 分散オブジェクトを扱う。
- セキュリティライブラリ - セキュリティポリシー、ユーザー認証と権限承認、公開鍵暗号方式など。
- Javaアプリケーションの形態
Java実行環境に用意されている特定のJavaクラスライブラリを利用する事でJavaプログラムは結果的に、以下の四種類のアプリケーション形態に派生する。
- Javaアプリケーション (application)
- パーソナルコンピュータなどのローカル環境で実行されるJavaプログラム。「Java Web Start」は任意のjnlpファイル(java network launching protocol)をダウンロードして実行できるJavaアプリの配布システムである。この類似技術としてマイクロソフトのノータッチデプロイメント、ClickOnceがある。
- Javaアプレット (applet)
- サーバからダウンロードされてWEBブラウザ上で実行されるJavaプログラム。サンドボックス機能下で厳しい動作制約が加えられている。当初はJavaの目玉技術であったが、様々な理由からさほど普及しなかった[独自研究?]。
- Java Cardプラットフォームの分野であるスマートカード(ICカード)上で動くJavaプログラムもアプレットと呼ばれており、現在ではこちらに舞台を移している。
- Javaサーブレット (servlet)
- サーバマシンで実行されるJavaプログラム。その名の通り手軽にサーバプログラムを実装出来るが、大規模サーバの構築にも適している。サーブレットはクライアントからのリクエストを逐次トランザクションして順次レスポンスする。WEBクライアントにはHTMLなどのプロトコルページ及び各種メディアをレスポンスしてWEBブラウザ上で表示させる。PerlなどによるCGIに比べ、サーバ側の負荷が低いなどのメリットがある。
- Javaサーバページ (server page)
- サーブレットをWEBサーバ用に特化したものであり、XHTML (HTML) 内に記述するJavaプログラムである。WEBクライアントからのリクエストに伴うパラメータに従い、それをサーバ側で解釈してWEBページ内容を動的に生成、変化させてレスポンスする。コードは似ているが、JavaScriptの様にブラウザ側で実行するスクリプトではない。類似の技術にActive Server Pages、PHPがある。
Java開発キット (JDK)
Java開発キット (Java Development Kit) は、Javaプログラムを開発するために必要なソフトウェアである。Java実行環境も内包している。Javaコンパイラなどの基本開発ツール、各種開発サポートツール、Java APIで構成されている。前述のエディションによって開発ツール内容とAPI構成に違いがある。Java開発キットの呼称はこれまでに何度か変更されている。
- J2SE 1.2.2_004 までは、JDK (Java Development Kit) と呼んでいた。
- J2SE 1.4 までは、Java2 SDK (Java2 Software Development Kit) と呼んでいた。
- J2SE 5.0 からは再び、JDK (Java Development Kit) と呼んだ。
- JavaSE 7 からは、エンタープライズ版とマイクロ版では Java SDK (Java Software Development Kit) と呼び、スタンダード版とカード版では JDK (Java Development Kit)と呼ぶようになった。JDKはSDKの拡張サブセット(SDKの一部分+その他)とされる。
- Java API
APIは、アプリケーション・プログラミング・インタフェースの頭字語であり、Javaクラスライブラリ内部からプログラマに向けて外部公開されているクラス、インタフェース、メソッド、フィールド、定数の集合である。プログラマはこれを用いて各種ソフトウェアの開発を行う。APIは基本的にクラスライブラリの所属に沿って、パッケージ (package) と呼ばれる名前空間で分類されて提供されている。パッケージは各ワードをピリオドで連結して階層化されている。先頭ワードのjavaは開発元提供の純正基礎版を意味する。他に純正拡張版のjavax、任意団体提供のorg、企業提供のcomがある。
- java.lang - Java言語の基礎を扱う。
- java.io - ファイル入出力など。
- java.util - 動的配列と動的連想配列。データ集合の操作。
- java.math - 各種計算を扱う。
- java.text - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
- java.net - ソケット通信を扱う。
- java.awt - グラフィカル・ユーザーインターフェイスを扱う。
- java.applet - アプレット生成用。
- java.beans - ソフトウェアコンポーネント作成用。
- java.sql - SQLを扱う。
- java.rmi - 分散オブジェクトを扱う。
- java.security - セキュリティポリシー、ユーザー認証と権限承認、公開鍵暗号方式など。
- 統合開発環境と開発支援ツール
統合開発環境 (IDE)は、JDKを中核にしてビジュアルエディターやビルドマネジャーなどの様々な開発支援機能を備えたソフトウェアである。JDKのみだと、メモ帳でプログラムを書きコマンドラインでコンパイルしコンソールでデバッグをするという極めて原始的な作業になるが、IDEを使用する事で多機能エディタコーディングとビルド過程の自動化と視覚的なデバッグが可能になる。Java開発用のIDEは様々な企業と任意団体から公開されている。
- NetBeans - (サン・マイクロシステムズ→オラクル)オープンソースIDE。NetBeans.org NetBeans.jp。
- Eclipse SDK - (IBM→Eclipse財団)オープンソースIDE。Java用IDEの共通基盤存在である。ここからWebSphere Studio、JBuilderなど様々なIDEが派生している。eclipse.org EclipseWiki。
- WebSphere Studio -(IBM)商用IDE。Eclipseに有料プラグイン機能を組み合わせたもの[26]。現在はアップデート停止。WebSphere。
- IBM Rational - (IBM) Rationalブランド商用IDE。WebSphere Studioの後継製品。
- JBuilder - (ボーランド→エンバカデロ・テクノロジーズ)商用IDE。JBuilder2007からEclipseベースになっている。JBuilder。
- Oracle JDeveloper - (オラクル)Oracle Application Serverと統合されている。2005年6月28日に無料化した。JDeveloper。
- Oracle Workshop for WebLogic - (BEAシステムズ→オラクル)WebLogicと統合されている。Oracle Workshop。
- BlueJ - (サン・マイクロシステムズ、豪ディーキン大学、英ケント大学の共同開発)フリーIDE。BlueJ。
- IntelliJ IDEA - (JetBrains) 商用IDE。Android Studioのベースになった。IntelliJ IDEA。
- JCreator - (Xinox Software) 商用IDE。JCreator。
- Xcode - (Apple)macOSに付属するIDE。
開発サポートツールは、プロジェクト管理、自動ビルド、デバッグ、モニタリングを容易にする。下記の他にも多くの支援ツールが存在する。
- Apache Ant - Javaアプリケーションのビルドツール。Apacheソフトウェア財団のプロジェクトによって開発された。コンパイル、バージョン管理システムとの連携、jar、javadoc生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。make と同種のツールであり、XMLファイルにビルドの規則を記述する。Java 以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。
- Apache Maven - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。
- Gradle - Apache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システム。
- JUnit - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。xUnitの一種である。テスト駆動開発を支援する。
Javaテクノロジの数々
Javaテクノロジは、個人を含む各種組織から様々な形態で公開されている。開発元から提示された技術は、Java Community Process (JCP) による審査を合格した後にJavaテクノロジの一つとして認証される。これを標準化 (standardization) と言う。Javaテクノロジが準拠すべき規範仕様は、JCP管理下で発行される数々のJava仕様要求 (Java Specification Request) にて定義されている。Javaテクノロジは様々な分野に導入されている。その一例を以下に列挙する。
- JNI (Java Native Interface)
- 他の言語で実装されたネイティブコードを呼び出す技術
- JMI (Java Metadata Interface)
- Javaのメタデータの作成・アクセス・検索・送受信に関する仕様
- JML (Java Modeling Language)
- 契約による設計 (DbC) を指向した形式言語をソースコードに導入する
- JMX (Java Management Extensions)
- 主に分散システムで依存性の注入によるJavaプログラムの動的な再構成技術
- JDMK (Java Dynamic Management Kit)
- JMX仕様に基づいた開発支援ソフトウェア
- JDO (Java Data Objects)
- オブジェクト永続化の仕様
- Jini
- 分散システムを構築するネットワークアーキテクチャ
- JavaSpaces
- Jiniの分散システム環境でオブジェクトの送受信と永続化などをサポートするテクノロジ
- JAIN (Java API for Integrated Networks)
- 統合通信ネットワーク用のAPI
- JSF (Java Server Faces)
- WEBクライアントにユーザーインターフェースを提供するサーバ用テクノロジ
- JXTA
- P2Pの仮想ネットワークのためのオープンプロトコル
- OSGi
- サービスの動的な管理と遠隔保守
- Java3D
- 3次元グラフィクスプログラミングのための高水準なAPI。Java 3D
- JOGL (Java OpenGL)
- OpenGLを使う3Dプログラミングのための低水準なAPI
- JAI (Java Advanced Imaging)
- 高水準な画像操作API
- LWJGL
- ゲーム開発用のAPI。OpenGL, OpenAL, OpenCLを扱える。様々なゲーム用コントローラーも扱える。
- JSML (Java Speech Markup Language)
- 音声合成システムにテキスト注釈を追加する
- Blu-ray Disc Java
- ブルーレイディスク (BD) で実行される各種コンテンツ制作用
Javaオープンソースモデル
サン・マイクロシステムズは1996年のリリース当初からJava実行環境とJava開発環境をオープンソース化しており、サードパーティーにJavaテクノロジ開発への参入をアピールしていた。ただしJavaの普及に一定のコントロールをかける為にソースコードの改変までは認めていなかった。2004年になるとIBMが業界の優位性を活かしてJavaオープンソースプロジェクトの主導権を握るようになった。Javaコミュニティプロセスを取り巻く業界の変化を悟ったサン・マイクロシステムズはIBMとの本格的な提携を承認し、2007年にJava SE 6を「OpenJDK」としてGNU一般公開ライセンスの下でリリースした[27]。OpenJDKではソースコードの改変も認められた。GNUプロジェクトは「GNU Interpreter for Java」、GNUコンパイラコレクションの「GNU Compiler for Java」、互換クラスライブラリの「GNU Classpath」を公開した。Windows用GNU Compilerは、MinGWと併せてCygwinの環境上でも実行できた。
WindowsやLinuxなどのメジャーOSでは、オラクル、IBM、Blackdown、GNUプロジェクト、Kaffe.orgなどによるJavaプラットフォームが公開されている。また、JavaソースコードをそのままWin用実行ファイルに変換する「Excelsior JET」や[28]、JarファイルをWin用実行ファイルに変換する「exewrap」「Launch4j」「NSIS」「JSmooth」なども販売ないし公開されている。
Java認定資格
オラクル[注釈 1]は複数のJava認定資格を主催している。Javaのバージョンアップに伴って資格も変更されることがある。ただし、変更前に取得した資格は変更後も有効である。認定試験に不合格だった場合、その試験日を含めて14日以内は同一試験を受験することができない。
資格名 | レベル | 対象バージョン |
---|---|---|
Java Foundations Certified Junior Associate | Junior Associate | 不明 |
Oracle Certified Java Programmer, Bronze SE 7/8[注釈 2] | Bronze | Java SE 7/8 |
Oracle Certified Java Programmer, Silver SE 8[注釈 3] | Associate | Java SE 8 |
Oracle Certified Java Programmer, Gold SE 8[注釈 4] | Professional | Java SE 8 |
Oracle Certified Professional, Java EE 7 Application Developer | Professional | Java EE 7 |
Oracle Certified Master, Java EE 6 Enterprise Architect | Master | Java EE 6 |
Oracle Certified Expert, Java EE 6 Enterprise JavaBeans Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 JavaServer Faces Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Web Services Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Java Persistence API Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Web Component Developer | Expert | Java EE 6 |
- ^ Chaudhary, Harry H. (2014年7月28日). “Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans”. 2016年5月29日閲覧。
- ^ “The Java Language Environment” (1996年5月). 2014年5月6日時点のオリジナルよりアーカイブ。2014年5月6日閲覧。
- ^ “The Java Language Specification, 2nd Edition”. 2011年8月5日時点のオリジナルよりアーカイブ。2008年2月8日閲覧。
- ^ “The A-Z of Programming Languages: Modula-3”. Computerworld.com.au. 2009年1月5日時点のオリジナルよりアーカイブ。2010年6月9日閲覧。
- ^ Patrick Naughton cites Objective-C as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's protocol) and primitive wrapper classes. [1] Java Was Strongly Influenced by Objective-C - ウェイバックマシン(2011年7月13日アーカイブ分)
- ^ “What is Java and why do I need it?” (英語). 2019年1月閲覧。
- ^ “1.2 Design Goals of the Java™ Programming Language”. オラクル (1999年1月1日). 2013年1月23日時点のオリジナルよりアーカイブ。2013年1月14日閲覧。
- ^ “Write once, run anywhere?”. Computer Weekly (2002年5月2日). 2009年7月27日閲覧。
- ^ a b Chan (2019年1月22日). “The 10 most popular programming languages, according to the 'Facebook for programmers'”. Business Insider. 2019年6月29日時点のオリジナルよりアーカイブ。2019年6月29日閲覧。
- ^ “JavaOne 2013 Review: Java Takes on the Internet of Things”. www.oracle.com. 2016年4月19日時点のオリジナルよりアーカイブ。2016年6月19日閲覧。
- ^ “Why should I uninstall older versions of Java from my system?”. オラクル. 2016年9月9日閲覧。
- ^ a b “Java Software | オラクル”. www.oracle.com. 2019年10月19日閲覧。
- ^ 広辞苑 第六版
- ^ “JAVASOFT SHIPS JAVA 1.0”. sun.com. 2007年3月10日時点のオリジナルよりアーカイブ。2008年2月5日閲覧。
- ^ Chander, Sharat. “Introducing Java SE 11”. oracle.com. 2018年9月26日時点のオリジナルよりアーカイブ。2018年9月26日閲覧。
- ^ “The Arrival of Java 15!”. Oracle (2020年9月15日). 2020年9月15日閲覧。
- ^ “オラクル、Java 17をリリース”. Oracle (2021年9月17日). 2021年9月30日閲覧。
- ^ “オラクル、Java 18を発表”. Oracle (2022年3月22日). 2022年3月23日閲覧。
- ^ “オラクル、Java 19をリリース”. Oracle (2022年9月21日). 2022年9月21日閲覧。
- ^ “オラクル、Java 20をリリース”. Oracle (2023年3月22日). 2022年3月23日閲覧。
- ^ “オラクル、Java 21のリリースとサポート・ロードマップの延長を発表”. Oracle (2023年9月19日). 2023年9月21日閲覧。
- ^ “オラクル、Java 22をリリース”. Oracle (2024年3月21日). 2024年3月23日閲覧。
- ^ “Opening Up Java EE - An Update” (英語). オラクル (2017年9月12日). 2019年3月10日閲覧。
- ^ “EE4J、EclipseファウンデーションがオープンソースJava EEを準備”. InfoQ (2017年11月16日). 2019年3月10日閲覧。
- ^ “Java EE は Jakarta EE となる”. InfoQ (2018年3月5日). 2019年3月10日閲覧。
- ^ 星 暁雄=日経BP Javaプロジェクト (2003年10月31日). “EclipseとWebSphere Studioはどう違うのか | 日経 xTECH(クロステック)”. 日経 xTECH(クロステック). Nikkei Business Publications, Inc.. 2019年11月17日閲覧。
- ^ Sun Microsystems, Inc (2007年5月8日). “Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community”. 2009年9月16日閲覧。
- ^ http://www.excelsior-usa.com/jet.html
- ^ “オラクル Java SE 認定資格パス 概要”. 2019年3月7日閲覧。
- ^ “オラクル Java EE and Web Services 認定資格パス 概要”. 2019年3月7日閲覧。
- ^ “Java Foundations Certified Junior Associate (novice-level certification)”. 2019年3月10日閲覧。
- ^ “認定試験一覧”. 2019年3月7日閲覧。
- ^ “Java資格が大幅リニューアル。Bronze/Silver/Goldが登場”. 2019年3月7日閲覧。
固有名詞の分類
- Javaのページへのリンク