Javaとは、プログラミング言語の一つである。Java VMなどの実行環境全体を指す場合もある。
当記事では前者について扱う。後者についてはJava仮想マシンを参照。
人によってはJavaScriptと混同している場合があるので注意を要する。(特に書店の店員さん)
もともとはコーヒー豆の種類であるJavaから。コンピュータを知らない人にとっては風呂釜洗浄剤だったり原人だったり島の名前だったりカレールウだったりする。缶紅茶とかゴダイゴとかが出てきたら立派なおっs(ry
1990年末から開発が始まり、サン・マイクロシステムズ(後にオラクルが吸収)によって1995年に公表されたオブジェクト指向プログラミング言語。 現在はオープンソース化されているが、ライセンスなどはオラクルが管理している。
当初は、Javaで動作する専用のハードウェアも開発し、インターネット家電機器への進出も計画されたが頓挫し、現在はJava VMを介した実行環境がメインとなっている[1]。
いろいろ挫折もあった言語だが、それでも使用プログラマの人口は1,2を争うくらいに多い。
基本的に「JavaVMさえあればどこでも動く」という移植性の高さから「Write once, run anywhere」と言われる[2]。
また、使用人口が多いため検索するだけで比較的容易に情報が入手できるという言語仕様とは関係ない強みがある。
オブジェクト指向であること、プリミティブ型があること[3]、中間言語+仮想マシン方式であること、ガベージコレクションがあること、静的な強い型付き言語であること、ドキュメンテーションコメントの書法を定義していること(JavaDoc)、などがある。
C++に見られる多くの機能を改良して吸収し言語仕様も大幅に改編、さらにC++では標準機能として持てなかった機能を大幅に追加していった。これにより高い汎用性と生産性をアピールすることになった。
過去は非常に互換性を重視しようという意図があり、その関係で長らくGenericsが要望されながら搭載が見送られてきた経緯があるが、C#の存在を意識してかJava5(1.5)を境にむしろ互換性を犠牲にしてまで様々仕様を搭載しようとする姿勢に変化している。
2000年よりも前までは「リッチ・クライアント」の分野でなんらかの機能をWebページに付加することが「アプレット(Java Applet)」が流行りかけていた。
しかし、マイクロソフトが勝手に改造した件の訴訟のゴタゴタや、ネットスケープナビゲータでJavaアプレットを表示しようとすると数分間一切操作を受け付けない状態(Java仮想マシンの起動に時間がかかった)になるため露骨に敬遠されているうちに、こちらの分野は Flash、さらに近年では所謂Ajax(Javascript)やHTML5に奪われてしまい、現在では見る影もなくなっている[4]。
主に大規模なWebサービス(サーバ側)、また会社間(B2B)システム、ECサイト(電子商取引サイト)、社内イントラシステム等、「会社の中の人向け」のシステム構築の言語として広く使われている。総じて「エンタープライズ」向けと言われることも多い。Java EEと略されるが、安定性が求められるためか同じバージョンのJava SEよりも1年以上遅れてリリースされることが多い。
最近では実行環境の監視などのノウハウが溜まっているなど、スケールアウトのしやすさから所謂「クラウド」において開発用途に使われる。
Java言語そのものは使われなくてもScalaやClojureといったJava VM上で動く言語、JRubyやJython(それぞれJava製のRuby、Pythonのインタプリタ)など開発環境の母体として、またJenkinsやApache Hadoopといった開発向けミドルウェアとして用いられている。
モバイル向けアプリの分野、特に携帯電話では他に選択肢がないという理由で機能制限つきのJavaが使われている(iアプリ、オープンアプリ、MIDPなど)
これらはまとめて「Java Micro Edition」と言われてはいるものの、「標準仕様」といったものはなく、それそれのキャリア対象に合わせた制作が必要なためコストが嵩むことが問題視されていた。
近年ではスマートフォンが主力となったことでAndroidアプリの開発用に使われている。ただし、iPhoneのほうはJava言語で開発するのは非現実的な状況なので、皮肉なことに両対応したい場合にはJava言語は使いづらく、結局前述の問題は何も解決されていない。
なおAndroidに使われている仮想マシン(DalvikVM)はJavaVMと異なるバイトコードで動くため正式には「Java」とはいえない。言語としての互換性の上ではAndroid環境は一部を除きJava Standard Editionに準拠している。このため、「Java Micro Edition」にあった「あのライブラリがない」といったことが少ないのだが、それゆえにかどうかは知らないがDalvikVMに関してJavaの権利を持っているオラクルから訴えを起こされており、現在係争中である(2015年6月にアメリカの最高裁はOracle側の主張を支持する判断をし、賠償請求が認められるかについて2015年8月現在Oracleが再提訴の準備中)。
Java SEと略される。ハードウェア性能の向上も手伝い、図形・文字描画機能の向上、GUI表現力の拡張、インストールの簡素化、などがされたため、主にクロスプラットフォームなデスクトップ・アプリケーション開発への対応において有用性を高められている。
こういった機能を有効活用した、ニコニコ内で有名なソフトウェアとしてはJavieやMikuMikuStudioが挙げられる。
C/C++系の文法である。シンタックスシュガーが少ないのが特徴でJavaの省略しない文化が表れている。他にもgetter, setterなどのお約束もあいまってコードの長さには定評がある[5]。だが、省略されていないメソッド名を眺めているだけでなんとなく使い方がわかる場合もあるので、省略しないことは必ずしも悪いことではない。
型はプリミティブ型、列挙型(Java 5から導入)、参照型に分かれ、プリミティブ型にはboolean, char, int, short, long, float, doubleがある。
演算子のユーザー定義が認められていないので、BigDecimalで込み入った四則演算をしようとするとaddやmultiplyなどのメソッドが入り乱れて大変なことになる。
Javaの統合開発環境(IDE)としてはEclipseとNetBeansがよく知られている。
EclipseはIBMが、NetBeansはサン・マイクロシステムズ(現オラクル)が開発の主体となって開発したソフトウェアで、どちらもフリーかつオープンソースである。
これらは開発の支援機能を多く備え、生産性向上にも役立つIDEとして有名である。
特にEclipseはJavaに限らずクロスプラットフォームな開発環境においては標準的なIDEとなっていることが多い。
基本的にJavaの開発時にどちらを利用するか迷ったら書籍など情報量の多いEclipseをおすすめする。
ただし、マシン環境が貧弱な場合、NetBeansのほうがより軽いため、こちらを使うほうがいいかもしれない。
よく使われるような機能はJava SE自体に標準ライブラリとして一通り揃っている。
標準以外でも、オープンソースの強力なライブラリ群があるのがJavaの特長である。Apache Software Foundationのライブラリ群などがよく知られている。定番とされているものだとApache Ant,Apache Tomcat,Apache Struts,Apache Mavenが挙げられる。
先述のように互換性を重視するため、新しい文法の導入は遅れがちであるが、1.5におけるジェネリクス以外には以下のような変更が実施・予定されている。
本当はJava7に導入される予定だったが、作業が難航しJava6の後に5年ほどあいてしまった(Javaは2年ごとに新しいリリースを出す方針になっている)ため、Java7から外されて2014年3月にJava8で導入された。
これによりラムダ式を用いて関数(メソッド)を引数や戻り値に指定できるようになり、オブジェクト指向言語Javaも晴れて関数型言語の仲間入りを果たした。
これも本当はJava7に導入される予定があったが、Project Lambdaと共にJava8へと延期され、さらにこちらだけはJava9に延期された。なお、Java9のリリースは2016年9月予定となっている(2015年8月現在)。
文法の変更と言うよりも、ビルドに際してのパッケージ依存関係などの記述方法が変わってモジュール化が促進されるとかなんとか。
オブジェクト指向言語なのにオブジェクトの規則に従わないプリミティブ型は、特にジェネリクスの導入以降、型引数にプリミティブ型を使えないことによる様々な弊害をもたらしてきた[6]。
Project ValhallaではこのJava誕生時から存在する問題に手をつけようという事のようだ。
Java10の目玉機能と噂されているが、Javaの根幹にかかわる問題だけに互換性が犠牲になる可能性が高く、難航が予想される。[7]
ちなみにValhallaは北欧神話の主神オーディンの宮殿の一つ。死んだ戦士の魂が集まる場所。果たしてプリミティブ型との戦いで散っていったIT戦士たちの魂は救済されるのか?
急上昇ワード改
最終更新:2026/01/10(土) 09:00
最終更新:2026/01/10(土) 09:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。