Javaとは、プログラミング言語の一つである。Java VMなどの実行環境全体を指す場合もある。
人によってはJavaScriptと混同している場合があるので注意を要する。(特に書店の店員さん)
もともとはコーヒー豆の種類であるJavaから。コンピュータを知らない人にとっては風呂釜洗浄剤だったり原人だったり島の名前だったりカレールウだったりする。缶紅茶とかゴダイゴとかが出てきたら立派なおっs(ry
1990年代に サン・マイクロシステムズ(現:オラクル)が設計した物が元になっている、プログラム言語の一つ。オブジェクト指向型言語である。
当初は、Javaで動作する専用のハードウェアも開発し、インターネット家電機器への進出も計画されたが頓挫し、現在はJava VMを介した実行環境がメインとなっている[1]。
基本的に「JavaVMさえあればどこでも動く」という移植性の高さから「Write once, run anywhere」と言われる[2]。
オブジェクト指向であること、プリミティブ型があること[3]、中間言語+仮想マシン方式であること、ガベージコレクションがあること、静的な強い型付き言語であること、ドキュメンテーションコメントの書法を定義していること(JavaDoc)、などがある。
C++に見られる多くの機能を改良して吸収し言語仕様も大幅に改編、さらにC++では標準機能として持てなかった機能を大幅に追加していった。これにより高い汎用性と生産性をアピールすることになった。
過去は非常に互換性を重視しようという意図があり、その関係で長らくGenericsが要望されながら搭載が見送られてきた経緯があるが、C#の存在を意識してかJava5(1.5)を境にむしろ互換性を犠牲にしてまで様々仕様を搭載しようとする姿勢に変化している。
Javaバイトコードとして定義(コンパイル)された命令セットを実行する仮想マシン。
バイトコードそのものはJava言語を前提としているものの厳密にJava言語専用というものではないため、他言語でもバイトコードに変換すればJava仮想マシンで動作させることができる。
実際にScalaやClojureといった言語を始め様々な言語でバイトコードに変換するコンパイラが存在する。
10年ほど前までは「リッチ・クライアント」の分野でなんらかの機能をWebページに付加することが「アプレット(Java Applet)」が流行りかけていた。
しかし、マイクロソフトが勝手に改造した件の訴訟のゴタゴタや、ネットスケープナビゲータでJavaアプレットを表示しようとすると数分間一切操作を受け付けない状態になるため露骨に敬遠されているうちに、こちらの分野は Flash、さらに近年では所謂AjaxやHTML5に奪われてしまい、現在では見る影もなくなっている[4]。
またGoogleはJava言語(ただしライブラリの互換性はほとんどなし)からJavaScriptに変換するGWTを公開しているが、これもあまり普及してるとは言い難い状況である。
主に大規模なWebサービス(サーバ側)、また会社間(B2B)システム、ECサイト(電子商取引サイト)、社内イントラシステム等、「会社の中の人向け」のシステム構築の言語として広く使われている。総じて「エンタープライズ」向けと言われることも多い。安定性が求められるためか同じバージョンの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が再提訴の準備中)。
ハードウェア性能の向上も手伝い、図形・文字描画機能の向上、GUI表現力の拡張、インストールの簡素化、などがされたため、主にクロスプラットフォームなデスクトップ・アプリケーション開発への対応において有用性を高められている。
こういった機能を有効活用した、ニコニコ内で有名なソフトウェアとしてはJavieやMikuMikuStudioが挙げられる。
C/C++系の文法である。シンタックスシュガーが少ないのが特徴でJavaの省略しない文化が表れている。他にもgetter, setterなどのお約束もあいまってコードの長さには定評がある。プログラミング言語のコードの長さを比較するときに同じ内容をJavaで書いた行数の何分の1になるかで比較することが珍しくない。
型はプリミティブ型、列挙型(Java 5から導入)、参照型に分かれ、プリミティブ型にはboolean, char, int, short, long, float, doubleがある。
演算子のユーザー定義が認められていないので、BigDecimalで込み入った四則演算をしようとすると大変なことになる。
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月現在)。
文法の変更と言うよりも、ビルドに際してのパッケージ依存関係などの記述方法が変わってモジュール化が促進されるとかなんとか。
オブジェクト指向言語なのにオブジェクトの規則に従わないプリミティブ型は、ジェネリクスの導入以降様々な弊害をもたらしてきた。
たとえばStream<T>のTにintやdoubleを入れることができないため、IntStream, DoubleStreamといった型を個別に定義しなければならなくなっている。ラッパークラスを用いてStream<Integer>とすることもできるが、パフォーマンスが犠牲になる。Stream<T>だけで済めばいいが、Optional<T>など汎用性が高い型が定義されるたびにオブジェクトとプリミティブで場合分けが必要になる。
Project ValhallaではこのJava誕生時から存在する問題に手をつけようという事のようだ。
Java10の目玉機能と噂されているが、Java誕生時から存在する問題だけに互換性が犠牲になる可能性が高く、難航が予想される。[5]
ちなみにValhallaは北欧神話の主神オーディンの宮殿の一つ。死んだ戦士の魂が集まる場所。果たしてプリミティブ型との戦いで散っていったIT戦士たちの魂は救済されるのか?
急上昇ワード改
最終更新:2026/01/10(土) 09:00
最終更新:2026/01/10(土) 09:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。