単語記事: Java

編集

http://dic.nicovideo.jp/oekaki/25489.png

Javaとは、プログラミング言語の一つである。Java VMなどの実行環境全体をす場合もある。
当記事では前者について扱う。後者についてはJava仮想マシンを参照。

人によってはJavaScriptと混同している場合があるので注意を要する。(特に書店の店員さん)

もともとはコーヒー豆の種類であるJavaから。コンピュータを知らない人にとっては風呂釜洗浄剤だったり原人だったりの名前だったりカレールウだったりする。缶紅茶とかゴダイゴとかが出てきたら立なおっs(ry

概要

1990年末から開発が始まり、サン・マイクロシステムズ(後にオラクルが吸収)によって1995年表されたオブジェクト指向プログラミング言語現在オープンソース化されているが、ライセンスなどはオラクルが管理している。

当初は、Javaで動作する専用のハードウェアも開発し、インターネット電機器への進出も計画されたが頓挫し、現在Java VMを介した実行環境メインとなっている。

他にもいろいろ挫折のあった言だが、それでも使用プログラマの人口は1,2を争うくらいに多い。また、使用人口が多いため検索するだけで較的容易に情報が入手できるという言仕様とは関係ない強みがある。

用途

携帯電話(いわゆるガラケー)の開発言として、2010年あたりからは、Androidスマホの開発言として注を集めているが、地味サーバー用途などの利用も多い。

普通デスクトップアプリ開発もできるが、実行にJavaインストールや起動が必要になる。プレット? ああ、そういうのもあったっけ。

Java仮想マシンを参照。

特徴

過去は非常に互換性を重視しようという意図があり、その関係で長らくGenericsが要望されながら搭載が見送られてきた経緯があるが、C#の存在を意識してかJava5(1.5)をにむしろ互換性を犠牲にしてまで様々仕様を搭載しようとする姿勢に変化している。

文法外の特色としては中間言仮想マシン方式であること、ガベージコレクションがあること、ドキュメンテーションコメントの書法を定義していること(JavaDoc)、などがある。

中間言語(バイトコード)方式

Javaは直接機械語コンパイルされず、中間言(バイトコード)にコンパイルされ、バイトコードJava仮想マシンが各ハードウェア機械語(ネイティブコード)に変換して実行するという方式をとる。

基本的に「Java仮想マシンさえあればどこでも動く」という移植性の高さから「Write once, run anywhere」と言われる[1]

ハードウェア依存しない反面、デバイスドライバなどハードウェア依存した処理には弱く、C言語との組み合わせが必須となる。もっとも、使用人口が多いおかげで、だったハードウェアには何らかのサードパーティライブラリが存在してC言語を使わずに何とかなることも多い。

文法

オブジェクト指向。強い静的型付け

C++に見られる多くの機良して吸収し言仕様も大幅に編、さらにC++では標準機として持てなかった機を大幅に追加していった。これにより高い汎用性と生産性をアピールすることになった。

シンタックスシュガーが少ないのが特徴でJava省略しない文化が表れている。他にもgetter, setterなどのお約束もあいまってコードの長さには定評がある[2]。だが、省略できるということは省略された部分を補うために覚えておくことが増えるということでもあり、学習コストコード可読性の観点から省略しないほうが有利な場合もある。また、省略されていないメソッド名を眺めているだけでなんとなく使い方がわかる場合もあるので、省略しないことは必ずしも悪いことではない。

演算子のユーザー定義が認められていないので、BigDecimal(精密十進演算)などで込み入った四則演算をしようとするとaddやmultiplyなどのメソッドが入り乱れて大変なことになる。演算子のユーザー定義を認めた結果ソースコードよくわからない記号だらけになった言もあるので、これも悪いことばかりとはいいきれない。

はプリミティ、列挙Java 5から導入)、オブジェクト(参照)に分かれ、プリミティにはboolean, char, int, short, long, float, doubleがある。オブジェクト指向であるにもかかわらずオブジェクトの性質を持たないプリミティがあることは、パフォーマンス面でC言語C++に対抗するため必要なことであったとはいえ、Javaオブジェクト指向として不全であるといわれる原因にもなっている[3]。修正の予定もないことはない(後述のProject Valhalla)が、実現するのはくても2020年以降のことになると思われる。

標準ライブラリ

よく使われるような機Java SE自体に標準ライブラリとして一通っている。

ブラウザでリッチクライアントを実現することが初期の開発理由の一つにあったためか、プログラミング言語としてはしく発表当初からGUIライブラリが標準ライブラリに含まれている。もっとも、「標準」自体はAWT、Swing(Java 2〜)、JavaFX(Java 8〜)と2回の交代を経験している。

一方で複素数などは標準ライブラリに含まれておらず、前述の演算子のユーザー定義禁止の問題もあわせて、数学科学分野の計算に向いているとは言いがたい面もある。

開発

統合開発環境

Java統合開発環境(IDE)としてはEclipseNetBeansがよく知られている。

EclipseIBMが、NetBeansはサン・マイクロシステムズ(現オラクル)が開発の体となって開発したソフトウェアで、どちらもフリーかつオープンソースである。
これらは開発の支援を多く備え、生産性向上にも役立つIDEとして有名である。

特にEclipseJavaに限らずクロスラットフォームな開発環境においては標準的なIDEとなっていることが多い。

基本的にJavaの開発時にどちらを利用するか迷ったら書籍など情報量の多いEclipseをおすすめする。
ただし、マシン環境が貧弱な場合、NetBeansのほうがより軽いため、こちらを使うほうがいいかもしれない。

他には有償のものとしてIntelliJ IDEAがある。

開発支援ツール・ライブラリ等

標準以外でも、オープンソースの強ライブラリ群があるのがJavaの特長である。Apache Software Foundationのライブラリ群などがよく知られている。定番とされているものだとApache Ant,Apache Tomcat,Apache Struts,Apache Mavenが挙げられる。

バージョン

先述のように互換性を重視するため、新しい文法の導入は遅れがちであるが、1.5におけるジェネリクス以外には以下のような変更が実施・予定されている。

Project Lambda(Java8)

本当はJava7に導入される予定だったが、作業が難航しJava6の後に5年ほどあいてしまった(Javaは2年ごとに新しいリリースを出す方針になっている)ため、Java7から外されて2014年3月Java8で導入された。

これによりラムダ式を用いて関数(メソッド)を引数や戻り値に定できるようになり、オブジェクト指向Java晴れ関数型言語仲間入りを果たした。

Project Jigsaw(Java9)

これも本当はJava7に導入される予定があったが、Project Lambdaと共にJava8へと延期され、さらにこちらだけはJava9に延期された。なお、Java9のリリース2016年9月予定だったが、2015年12月に延期が発表され2017年3月となり、2016年10月に再延期されて2017年7月27日予定となっている(2016年10月現在)。

文法の変更と言うよりも、ビルドに際してのパッケージ依存関係などの記述方法が変わってモジュール化が促進されるとかなんとか

Project Valhalla(Java10?)

オブジェクト指向なのにオブジェクトの規則に従わないプリミティは、特にジェネリクスの導入以降、引数にプリミティを使えないことによる様々な弊をもたらしてきた[4]

Project ValhallaではこのJava生時から存在する問題に手をつけようという事のようだ。

Java10の玉機と噂されているが、Javaの根幹にかかわる問題だけに互換性が犠牲になる可性が高く、難航が予想される。[5]

ちなみにValhallaは北欧神話オーディンの宮殿の一つ。死んだ戦士の魂が集まる場所。果たしてプリミティとの戦いで散っていったIT戦士たちの魂は救済されるのか?

関連動画

関連商品

関連コミュニティ

関連項目

脚注

  1. *実際にはそれぞれの環境によって異なることも多々あるために"Write once, debug everywhere"と揶揄されることも多い
  2. *プログラミング言語コードの長さを較するときに同じ内容をJavaで書いた行数の何分の1になるかで較することがしくない。
  3. *あれ?全てがオブジェクトなんじゃないの?プリミティは違うの?とか言ってはいけない。何でラッパーとかいる の?Stringはプリミ ティブ?え?違う?  でもイミュータブルなので、プリミティブ的に扱っておk。って、どっち?メソッドあるからオブジェクト??意味わからないです。
     ・・・とか言う会話を新卒と交わし、本気でエリックガンマ手紙を出そうとした2年を見たことのある人間が、少なくとも日本には一人いる。
  4. *たとえばStream<T>のTにintdoubleを入れることができないため、IntStream, DoubleStreamといったを個別に定義しなければならなくなっている。ラッパークラスを用いてStream<Integer>とすることもできるが、パフォーマンスが犠牲になる。Stream<T>だけで済めばいいが、Optional<T>など汎用性が高いが定義されるたびにオブジェクトとプリミティブで場合分けが必要になる。
  5. *たとえばList<E>ではオーバーロードにより、remove(E object)はListにobjectが含まれていればそれを除外し、remove(int i)はListのi番の要素を除外する。ところがList<int>を認めてしまうとどちらと解釈するのかわからなくなってしまう。

【スポンサーリンク】

携帯版URL:
http://dic.nicomoba.jp/k/a/java
ページ番号: 194512 リビジョン番号: 2421399
読み:ジャバ
初版作成日: 08/06/03 01:23 ◆ 最終更新日: 16/10/26 19:18
編集内容についての説明/コメント: java9再延期について
記事編集 / 編集履歴を閲覧

この記事の掲示板に最近描かれたお絵カキコ


JavaTEA

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

Javaについて語るスレ

88 : ななしのよっしん :2015/08/19(水) 09:40:57 ID: 1fCfGro1I4
Project Valhalla って本当に実装されるの?
89 : ななしのよっしん :2015/10/06(火) 02:19:55 ID: 2nsfqwUphN
最近セキュリティアップデート更新頻度が異常な気がする。
しょっちゅうダイアログを見るからちゃんとインストールしたのかどうか分からなくなってきた。
90 : ななしのよっしん :2015/11/08(日) 15:42:51 ID: Co7PvxdsgX
>>89
そのあたりはFlashも同様だな。企業一社に管理させるにはJavaは大きすぎる。
まあ、Javaになし得なかったマルチラットフォームの夢はJavascriptが果たしてくれるだろう。
91 : ななしのよっしん :2015/12/03(木) 07:24:29 ID: 1VVbtN5JIj
Write once, debug everywhere吹いた
MSと物別れした時点でマルチラットフォームなんて夢物語だな
92 : ななしのよっしん :2015/12/03(木) 09:30:39 ID: Co7PvxdsgX
JavaJavaScriptが拾ってくれるだろう。
93 : ななしのよっしん :2015/12/06(日) 09:22:14 ID: YSlXgx5P2s
JavaJavascliptは全くの別物と聞いたんですが…
94 : ななしのよっしん :2015/12/06(日) 09:34:35 ID: Co7PvxdsgX
コンセプトは似てきたからな。デスクトップ方面も最近はelectronが登場してきたし。
95 : ななしのよっしん :2016/07/11(月) 14:20:14 ID: y9E2gQEqao
>>93
全くの別物だけど20年後くらいにはもしかすると統合されてるかもしれない
96 : nの3乗 :2016/09/10(土) 11:13:47 ID: /J29Fevy1B
プログラミング言語にも方言はあるんだよな・・・
97 : ななしのよっしん :2016/10/26(水) 19:56:34 ID: m1t2xah5n9
windows10だとセキュリティ設定に弾かれるので
Java製のゲームはやるのすら一手間。
  JASRAC許諾番号: 9011622001Y31015