該当キーワードの検索推移
wikipediaでの検索結果
Java
Java(ジャバ)は、狭義ではオブジェクト指向プログラミング言語Javaであり、広義ではプログラミング言語Javaのプログラムの実行環境および開発環境をいう。このJavaプログラムの実行環境と開発環境(広義のJava)は、Javaプラットフォームとも呼ばれる。
概説Javaは、従来のさまざまな言語の良い部分を引き継ぎ、欠点を克服するよう設計された。次のような特徴をもつ。
現在、Javaの技術は、情報技術のローエンドからハイエンドまで幅広く使われている。
組み込みシステムや携帯機器(携帯電話・PHSやPDA・スマートフォン等)のシステムから、企業の情報システムを担う大規模なサーバやスーパーコンピュータまで、非常に多くの分野で活用されている。
概要
プログラミング言語JavaおよびJavaプラットフォームは、1990年代前半にサン・マイクロシステムズでジェームズ・ゴスリンなどの人々によって開発された。現在はJava技術の標準化作業は、Java Community Process (JCP) というプロセスを経て行われている。
Javaに関わる呼称とその意味内容は、文脈に応じていくつか使い分けられている。サン・マイクロシステムズは、「Javaテクノロジ」(Java技術、Java technology)という呼称を使い、一方でJavaのさまざまな技術の形容詞として「Java」の呼称を使ってきた。多くのプログラマは、プログラミング言語の意味で「Java」の呼称を使っている。Javaの実行環境は、Java実行環境 (Java Runtime Environment
JRE) と呼ばれる。Javaの基本的な開発環境は、Java開発キット (Java Development Kit JDK) と呼ばれる。 Javaはクラスベースのオブジェクト指向プログラミング言語である(#オブジェクト指向プログラミング)。Javaのプログラムは複数のクラスから構成され、プログラムの実行は、各クラスが実体化したオブジェクト群が相互にメッセージをやりとりしながら行われる。Javaでは、継承については実装の単一継承を採用している。ただし1つのクラス(オブジェクト)は複数のインタフェースを実装できる。Javaで扱うデータ/オブジェクトの型(データ型)は、強い静的型付けを採用している。Javaのコンパイラおよび実行環境が、型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証が、可能である。
Javaでは簡潔なメモリモデルを採用しており、プログラマがメモリ (主記憶装置) を管理する負担を軽減する。あらゆるオブジェクトはメモリ内のヒープという領域に割り当てられる。メモリ管理は、Java仮想マシンに統合された自動ガベージコレクションの機能によって行われる。従来のオブジェクト指向プログラミング言語である C++ では、ヒープ領域に生成したオブジェクトについて、もはや必要が無くなった時に破棄する指示を、プログラマが自分で責任をもって行わなければならなかった。これは、C++ プログラマにとっては負担が大きく複雑で間違えやすい作業であり、ソフトウェアの安全性・開発効率・保守性を損なう要因だった。Javaでは自動ガベージコレクションの機能があるため、このようなことは無く、プログラマの負担は大きく軽減される。
Javaの文法は、CおよびC++から多くを引き継いでいる。また、C/C++には存在する低水準領域を操作できるポインタという機構は排除されていると言われているが、Javaの開発者も言っているように、C/C++のポインタモデルとは異なるがJavaにもポインタモデルが存在する。例えば、クラスインスタンスと配列はポインタを使用している。これは、"ClassName a = new ClassName()
"と"ClassName b "を定義し"b = a"とすることにより、bはaのフィールドを操作できる。すなわち、a,bにはアドレスが設定されている。同様にして、配列名に格納されるのもアドレスである。このように、インスタンス名(上記のaやb)には、バージョン1.2以前はオブジェクトハンドル(ポインタのポインタ)、バージョン1.3以降はポインタが設定されている。よって、Javaは当初から現在までポインタとは切っても切れない関係にある。これについては、Javaのホワイトペーパーに「C/C++とJavaの最大の違いは、Javaには、メモリへの上書きおよびデータ喪失の可能性を排除するポインタモデルがあることである。そこでは、ポインタ演算の替りに真の配列が用意されており、添字チェックを可能としている。なお、任意の整数をポインタに型変換することは、不可能である。」と解説されている。 Javaではプラットフォーム非依存を目標の一つとし、またバージョン間の互換性に注意して開発が進められている。Java技術を使うことで、プラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。従来のプログラミング言語の多くはプラットフォーム (CPU) に依存したネイティブなコードにコンパイルすることを前提として設計されていたが、Javaはこうした言語と異なり、中間言語(バイトコード)にコンパイルされ、Java仮想マシンで実行されるよう設計された。多くの場合、ジャストインタイムコンパイル方式が使われる。
プラットフォーム非依存とバージョン間の互換性の目標は、完全に達成できたわけではなく課題が残っている。
Javaではスレッドを言語仕様で規定しており、マルチスレッドによる並列処理を、従来の言語と比べて簡単に実装することができる。なお並列処理は、複数の処理を同時に実行する処理形態である。またスレッドは、プロセスより小さく軽量な処理の単位である。
Javaでは充実したライブラリにより、コンピュータネットワークを活用するソフトウェアを、効率良く開発することができる。Javaはその初期のバージョンから、TCP/IPのライブラリを備えていた。分散オブジェクト環境 (Java RMI, CORBA) のソフトウェアの開発も早い時期からできるようになっていた。近年では、さまざまなネットワークプロトコルの高水準なライブラリが使えるようになっている。充実したネットワーク機能と次に述べるXML文書を扱う機能を有効に組み合わせることにより、これまでにない高度なシステムの構築ができる言語の一つである。
Javaはセキュリティを考慮して設計されており、サンドボックスモデルに基づいたセキュリティ機構を備えている。セキュリティ機構を正しく実装したJava実行環境を適切に使うことで、遠隔のコンピュータ上にある実行コードを安全に実行することができる(Javaアプレット)。
現在、Javaの技術は、情報技術のさまざまな領域、ローエンドからハイエンドまで、幅広く使われている。携帯機器やウェブサーバ、企業の基幹となる情報システムにおいて、非常に普及している。パーソナルコンピュータ (PC) でも使われている。C++などの言語とともに、現在最も広く使われているオブジェクト指向プログラミング言語の一つである。
Javaに対しては批判も少なくない。いくつかの批判に対しては、サンやJCPに参加する人々の努力により、Javaの改良が行われている。一方で現在、多くのソフトウェア開発者は、Javaについて、広く使われている言語としては優れた技術の一つと評価している。
JavaScript (ECMAScript) は、Javaとは直接の関係は無いが、Javaと似た言語名称と構文を持っている。
表記はJのみが大文字の「Java」が正しい。「JAVA」や「java」は正式な表記ではない。
歴史この節では次の構成で Java の歴史と近況を説明する。
草創付与のオープンソース化が行われており、ウィキペディアに掲載することが可能である]]
Javaプラットフォームおよびプログラミング言語Javaは、1990年12月にサン・マイクロシステムズが1つの内部プロジェクトを立ち上げたことから始まった。
この内部プロジェクトでは、C++/C の代替となるプログラミング言語を開発した。
この言語は、プロジェクトで Greenオペレーティングシステム (Green OS) と共に、同OSの標準言語として開発された。
この言語は、1992年頃プロジェクト内では Oak と呼ばれていたが、後に Java の呼称に変更されることになる。
呼称変更の理由は、Oakは既に別の会社が商標として使っていたからである。
1990年頃、サンの技術者パトリック・ノートンは、自社のプログラミング言語 C++ と C の API(アプリケーションプログラミングインタフェース)と開発ツールに不満を募らせていた。
その頃、情報技術の世界でNeXTが開発した技術が注目を浴びていたことがきっかけとなって、ノートンはサンで新技術の仕事をすることになった。
なお、NeXTが開発したNeXTワークステーションとNEXTSTEPオペレーティングシステムでは、公式開発言語としてオブジェクト指向プログラミング言語 Objective-C を採用していた。
こうした経緯のなかで「ステルスプロジェクト」が始まった。
ステルスプロジェクトには、始まってすぐにジェームズ・ゴスリンとマイク・シェルダンが参加し、プロジェクトの名称は「グリーンプロジェクト」に変更された。
プロジェクトには他の技術者たちも参加し、彼らはアメリカ合衆国カリフォルニア州メンロパーク市サンドヒルロードの道沿いにある小さなオフィスで作業を始めた。
プロジェクトの目的は、次世代の家電製品のための新しいプログラミング技術を開発することだった。
サンはこの分野が重要な市場になると予測していた。
プロジェクトチームでは当初はプログラミング言語としてオブジェクト指向プログラミング言語である C++ を採用することを検討していたが、いくつかの理由から C++ は却下された。
彼らの目的は、家電製品すなわち組み込みシステムの技術を開発することだった。
組み込みシステムでは、利用できるコンピュータ資源が少ないという制約がある。
彼らは C++ ではコンピュータ資源を食いすぎると判断した。
また C++ は複雑なプログラミング言語であり、C++ を使うプログラマは注意していても間違いを犯しがちである。
C++ には自動ガベージコレクションの機能が無い。自動ガベージコレクションが無いということは、プログラマが自分でシステムのメモリを管理しなければならないことを意味する。プログラマが自分でシステムのメモリを管理することは、冒険的で間違いやすい作業である。
プロジェクトチームは、いくつかの重要な機能について C++ の移植性が乏しいことも問題であると考えた。
このプロジェクトでの重要な機能とは、セキュリティおよび分散コンピューティング、マルチスレッドであり、これらの機能が、プラットフォームに依存せずに使える必要があった。
このような事情で、彼らはあらゆる機器に容易に移植できるプラットフォームが必要であると認識するようになった。
一方で、サンの技術者ビル・ジョイは、ゼロックスのパロアルト研究所でAltoというワークステーション試作機のために開発されたプログラミング言語・Mesaと C の良いとこどりをした新しいプログラミング言語を構想していた。
ジョイは Further という名前で呼ばれる論文を書き、自社で C++ に基づいたオブジェクト指向環境を開発するべきであることを進言した。
まずジェームズ・ゴスリンが C++ を改変し拡張することを試みた。
ゴスリンはこの拡張版C++を、"C++ ++ --" と名付けた。
しかしゴスリンは、すぐにこの拡張版C++の開発を中止して、全く新しいプログラミング言語を開発する方針を採ることにした。
ゴスリンはこの新しい言語に Oak という名前をつけた。
この名前の由来は、ゴスリンのオフィスのすぐそばにオークの木が立っていたことによる。
プロジェクトチームは残業までして作業を続け、1992年の夏までに新しいプラットフォームを、Green OS、Oak言語、ライブラリ、ハードウェアによって部分的なデモンストレーションができるようになった。
1992年9月3日の最初のデモンストレーションでは、チームは Star7という携帯情報端末機器を開発することに力点をおいていた。この機器の名称の由来は、電話機能が *7 とボタンを押すことで有効になることによる。
この機器は、グラフィカルなインタフェースを備え、"Duke" という名前の知的な仮想代理人が利用者を支援した。
同年11月、サンはグリーンプロジェクトを分離して完全子会社のFirstPerson, Incを設立した。
それにともないチームはパロアルトに引っ越した。
FirstPersonチームは、高度にインタラクティブな機器に関心を持っていた。
そのおりタイム・ワーナーがケーブルテレビのセットトップボックスのRFP (Request For Proposal) を公表していた。
そこでFirstPersonチームは自分たちの目標を変更し、タイム・ワーナーの RFP に応じてセットトップボックスの提案を提出した。
しかし、
FirstPersonは入札でシリコングラフィックス (SGI) に負けた。
その後に3DO社のセットトップボックスの案件もあったが、契約には至らなかった。
FirstPersonはテレビ業界では利益を出すことができず、サンはFirstPersonを解散してチームを自社に戻した。
インターネットの世界へ
1994年の6月から7月にかけて、ジョン・ゲージと、ジェームズ・ゴスリン、ビル・ジョイ、パトリック・ノートン、ウェイン・ロジン、エリック・シュミットの間で、3日間かけてブレインストーミングを行い、プロジェクトチームはウェブの世界に主眼を置くという方針変更を行う。
彼らは、革新的なウェブブラウザである NCSA Mosaic の出現を目の当たりにし、ウェブを含むインターネットの世界は、ケーブルテレビの世界に劣らず、高度にインタラクティブな媒体に発展しつつあると認識するようになった。
Oak を使ったプロトタイプとして、ノートンはWebRunnerという小さなウェブブラウザを開発。
このウェブブラウザの名称は後に HotJava と変更される。
ウェブページにJavaアプレットという小さなJavaプログラムを埋め込んでおいて、ウェブブラウザHotJavaでそのページにアクセスすると、HotJava上でアニメーションの表示やマウスによるインタラクティブな操作ができた。
同年、チームはOakの名称をJavaに変更する。
変更の理由は、商標を調べて、"Oak" という名前がすでにビデオカードアダプタの製造会社 (Oak Technology) によって使われていたことが判明したからである。
Javaという名称は、一部のチームメンバーがよく出入りしていた近くのコーヒーショップで命名されたという。
この名称が、何かの頭字語であるかどうかについては、よくわかっていない。
1994年
10月に、HotJavaとJavaプラットフォームが、サン・マイクロシステムズの幹部社員の前でデモンストレーションされた。
そして1994年内に Java 1.0a(アルファ版)がダウンロードできるようになる。
Java と HotJava が最初に公的な場で公表されたのは、1995年5月23日のSunWorldカンファレンスだった。
サンは、Javaで記述されたウェブブラウザHotJavaを使って、JavaとJavaアプレットの技術により、ウェブページ内でアニメーションの表示やマウスによるインタラクティブな操作が可能であることをアピールした。
カンファレンスでアナウンスを行ったのは、サンの技術部長ジョン・ゲージである。
このカンファレンスではまた、ゲージのアナウンスに関連する、当時のネットスケープコミュニケーションズの上級副社長マーク・アンドリーセンによるアナウンスが人々を驚かせた。
それは、ネットスケープが自社のウェブブラウザである Netscape Navigator に Java の実行機能を追加する予定だというものだった。
このアナウンスにより情報技術の世界でJava技術は広く知られるようになった。
1995年秋には Java 1.0 のベータ版が公開された。
1996年1月9日にサンは、Java技術の開発を行うJavaSoft部門を立ち上げたhttp://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.html。
その2週間後に、最初の正式バージョンである Java 1.0 がリリースされた。
近年の動向Java の最初のバージョンが公開されてから現在までの動向を、いくつかの側面から述べる。
ウェブ(クライアント側)
ウェブブラウザでJavaアプレットを実行する技術は、広く使われている。
Javaアプレットは、ブラウザ(ウェブのクライアント側)がウェブページ内でアニメーションの表示やマウスによるインタラクティブな操作を可能とする技術である。
ただし、いくつかの有力な競合技術も存在する。
近年では、Yahoo! Games やビデオプレイヤーなどのアプリケーションで、Javaアプレットを採用する事例が多い。
かつては、Javaアプレットを使用したサイトを表示すると、数十秒~数分間操作を受け付けないブラウザが存在した。近年は、JavaおよびJavaアプレットの技術の向上により、環境によって動作が異なったり、実行速度、特に画面の描画が遅いという問題が解消されつつある。
ウェブ(サーバ側)現在、ウェブのサーバ側において、Java技術 (Java EE) は広く使われている。
多くのウェブサイトが、Javaサーブレット (Java Servlet) や JSP(JavaServer Pages)などの Java EE 技術を使って動的にページを生成するウェブを構築している。
Javaサーブレットは2000年前後から急速に広く使われるようになり、現在では多くのウェブアプリケーション(動的なウェブページ)がサーブレットとして稼動するようになっている。
サン・マイクロシステムズが開発したJavaサーブレット技術を簡単に説明する。必ずしも厳密な説明ではない。
サンがJavaサーブレット技術を開発した1990年代末当時、ウェブアプリケーションの開発には、次に述べるようないくつかの問題があった。
Javaサーブレットはこれらの問題をある程度解決することができる技術だった。
デスクトップにおける展開
デスクトップ環境においては、スタンドアロンのJava (Java SE) のアプリケーションソフトウェア(Javaアプリケーション)は、これまではあまり多く使われていなかったが、近年はいくつかのソフトウェアが広く使われるようになっている。
近年になって使われるようになってきた理由としては、次のことが挙げられる。
広く使われているJavaのソフトウェアとしては、NetBeansおよびEclipse SDKの統合開発環境や、LimeWireやAzureusのようなファイル共有クライアントのソフトウェアなどがある。
また数学ソフトウェアMATLABにおいても、ユーザインタフェースのレンダリングと計算機能の一部を実現するために使われている。
多くの Java のSwingやSWTのウィジェット・ツールキットを使ったアプリケーションが、現在も開発されている。
このように、近年はデスクトップ上でJavaアプリケーションを使う事例が増えつつあるものの、従来は次に述べるいくつかの理由のためにあまり使われてこなかったhttp://weblogs.java.net/blog/joshy/archive/2005/03/why_dont_you_sh.html。
一部のソフトウェア開発者は、情報技術はウェブを基盤としたモデルが主流となっており、スタンドアロンアプリケーションは流行遅れであり、新しいプログラミング技術は優れたウェブアプリケーションを開発することに充てられている、と思っていた。この見解については、ソフトウェア技術者の間で賛否が分かれている。
現在では、リッチクライアントやWeb 2.0の登場により新たなパラダイムが生まれようとしている。すなわちウェブを基盤としたウェブアプリケーションとスタンドアロンアプリケーションの融合である。ウェブアプリケーションをAjaxや Java Web Start、Adobe Flash などと組み合わせることにより、Web2.0時代に見合ったより洗練されたアプリケーションを開発することができる。
パーソナルコンピュータにおける実行環境現在、ほとんどの パーソナルコンピュータ (PC) のユーザは、何ら問題なくウェブおよびデスクトップ環境上でJavaアプリケーションを実行できる。
多くのPCメーカーは、自分たちが製造・販売する Windows PCにJava実行環境 (JRE) を同梱している。
アップルの Mac OS X や、多くのLinuxディストリビューションでも、Java実行環境を同梱している。
そのため、マイクロソフトが2001年頃以降にJava実行環境をWindowsに同梱していないことの影響は小さい。
2001年頃にマイクロソフトによるJava実行環境をWindowsに同梱することを止めたという行動は、サン・マイクロシステムズが同社を「品質の低い」Java実行環境を同梱してきたとして告訴したことが契機となった。マイクロソフトがそれまでWindowsに同梱してきたJava実行環境向けに開発されたJavaプログラムは、他のプラットフォームのJava実行環境で動かない可能性があった。
しかし近年では、Javaアプリケーションパッケージ自体にJava実行環境を同梱する事例が少なくない。
その背景にはJavaアプリケーション開発者の判断がある。
Javaアプリケーションが想定どおりに機能するよう、Java実行環境のバージョンの違いによる非互換性に基づく不具合を避けるために、PCに同梱されているJava実行環境を使わないという判断である。
現在では、Javaアプレットは動作対象のJava実行環境のバージョンを認識することができる。
また、バージョン間の互換性もそこそこ高い水準にあり、上位互換性については java SE 1.3 以降は大きな問題はほぼおきにくくなっている。さらに Java Web Start ではデスクトップにインストールされているJavaのバージョンを確認してアップデートできるならアップデートし、それだけでなく Java Web Start 対応アプリケーションをもアップデートしようとする。
そのため古いバージョンのJava実行環境を使っているマシンがあったとしても、自動アップデートされるためにそう難しい問題は起きない。
組み込みシステム
携帯機器(携帯電話・PHSやPDA・スマートフォン等)にJavaの実行環境が実装されるケースが多い。
Java環境はこれら携帯機器全般に広く普及している。一方、 Symbian および BREW は携帯電話や(日本的定義での)スマートフォンを主なターゲットとし、Javaと競合している。
Java MEでは、BREWとは異なり、開発者がライセンス料を支払わずに、プログラムを開発することができる。
Java MEはSymbianより広く普及している。
その理由は、Java MEがSymbianより広範な携帯機器、特に廉価なモデルで動作するからである。
こうした事情からサードパーティによりOpera miniのようなフリーのJavaソフトウェアを開発することができるようになった。
携帯機器のJava MEプログラムは、サンドボックスのもとで動くため、多くの開発者が特別な配慮をせずにプログラムを開発しても、安全に実行できる。
携帯機器のJava技術が多様化するに伴い、異なるメーカーの携帯機器でもJavaプログラムが動くよう、携帯機器のためのJava技術の標準が必要となった。
携帯機器のためのJava MEの標準がMobile Information Device Profile (MIDP) である。
最初の標準はMIDP 1で、小さい画面を想定したものであり、音声機能は無く、プログラムサイズは32kBまでという制限があった。
後のMIDP 2の標準では、音声機能を備え、プログラムサイズの制限は64kBまでと緩和された。
携帯機器の設計の進歩は標準化よりも急速であるため、一部のメーカーは、MIDP 2標準の最大プログラムサイズなどいくつかの制限を、意図的に緩和して携帯機器を開発している。
携帯機器におけるJava MEの競合技術について簡単に述べる。
世界的な動向としては、
バージョン履歴Java は、JDK(Java Development Kit
Java開発キット)1.0 以来、数度のメジャーバージョンアップを経ている。 バージョンアップに伴い、多くのクラスとパッケージが標準ライブラリに追加されてきた。 プログラミング言語JavaおよびJavaプラットフォームは、高い水準でバージョン間の互換性を保ちつつ発展してきている。 J2SE 1.4 から、Javaの開発は JCP (Java Community Process) という標準化プロセスで行うようになっている。
JCP では、JSRs (Java Specification Requests) という文書群により、Javaに対する追加機能やJavaプラットフォームに対する変更の提案と規定を行う。
また、J2SE1.3以降では開発コードネームとして、メジャーバージョンには動物の名前が、マイナーバージョンには昆虫の名前が付けられる傾向がある。
バージョンアップの過程で、言語仕様の変更だけでなく、標準クラスライブラリにおいても大きな変更が加えられている。
JDK 1.0 では標準ライブラリは約200クラス/インタフェースだったが、Java SE 6 では4000以上のクラス/インタフェースとなっている。
Swing や Java 2D のような全く新しいAPIが追加された。
その一方で、もともと JDK 1.0 から存在していたクラスのメソッドの多くが、J2SE 5.0 での使用は推奨されないようになっている。
JDK 1.0(1996年1月23日)最初のバージョン。プレスリリース (英語)
JDK 1.1(1997年2月19日)いくつかの重要な機能が追加された。プレスリリース (英語)
J2SE 1.2(1998年12月8日)コードネームPlayground。このバージョンから呼称が Java 2 に変更され、J2SE 5.0 までこの呼称が使われる。またエディション名が JDK から "J2SE"(Java 2 Platform, Standard Edition)に変更された。この J2SE の名称により、J2EE(Java 2 Platform, Enterprise Edition)および J2ME(Java 2 Platform, Micro Edition)の基となるエディションであることが明確化された。プレスリリース (英語)
J2SE 1.3(2000年5月8日)コードネームKestrel。プレスリリース (英語) 新機能の概要(日本語)
J2SE 1.4 (2002年2月6日)コードネームMerlin。このバージョンは、JCP(Java Community Process)のもとで開発された最初のJavaプラットフォームである。プレスリリース(英語) 新機能の概要(日本語)
J2SE 5.0(2004年9月30日)コードネームTiger。JSR 176 のもとで開発された。J2SE 5.0 では、言語仕様に大きく拡張が加えられ、多くの新しい言語機能が追加された。プレスリリース(英語) 新機能の概要(日本語)。もともとは J2SE 1.5 という名称だったが、この名称はすでに内部的なバージョン番号として使われていたhttp://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html。またマーケティング上の理由もあった。
void displayWidgets (Iterable widgets) {
for (Widget w : widgets) {
w.display()
} } この例では、
widgets という変数名のコレクションオブジェクト内の、各Widgetオブジェクトを反復して繰り返し処理する。各Widgetオブジェクトにはループサイクルごとに w という変数名をつける。各ループサイクルで、w に対してWidget型で定義されているdisplay()メソッドを呼び出す。拡張forループはJSR 201で規定された。Java SE 6(2006年12月11日)コードネームMustang。JSR 270のもとで開発された。Java SE 6 においては、サンは命名方針を変更して、"J2SE" から Java SE に変更し、バージョン番号から ".0" の部分を廃止している。
Java SE 6 Update 10 が2008年10月22日にリリースされた。Update 8 と 9 が省略され、7 の次が 10 となった。Javaの動作速度が改善され、アプリケーションやアプレットの起動を高速化するJava Quick Starterが搭載され、Javaのインストールを高速化する、Java Kernelが搭載された。
Java SE 7コードネーム Dolphin。2006年から開発開始された。元々は2008年春にリリースされる見通しであったが、2007年8月の時点では2009年1月をリリース目標としていたが、2008年12月現在、ジェームズ・ゴスリンは、「私の勝手な憶測だが」という注意書き付きで、2010年6月以降のリリースを予測している。
特徴Javaの主な特徴を述べる。
思想Javaを開発する上では、5つの目標があった。
ネットワーク機能および遠隔コンピュータの実行コードの実行を実現するために、場合によっては、Javaプログラマは、CORBA や Internet Communications Engine、OSGi のような拡張機能を使う。
オブジェクト指向プログラミングJavaはクラスベースのオブジェクト指向プログラミング言語である。
Javaのプログラムは複数のクラスから構成され、プログラムの実行は、各クラスが実体化したオブジェクト群が相互にメッセージをやりとりしながら行われる。
Javaでは、実装の単一継承を採用し、一つのクラスが複数のインタフェースをもつことができる。
クラスとは、オブジェクト指向においてオブジェクトの設計図にあたるものである。
オブジェクトについては後述する。
継承とは、既存のクラスを基にして、そのクラスの機能を引き継いだ新しいクラスを定義できることをいう。
Javaでは実装の多重継承は採用していない。
Javaでは一つのクラスが複数のインタフェースをもてるため、一つのクラスに複数の役割をもたせることができる。
Javaで扱うデータ/オブジェクトの型(データ型)は、強い静的型付けを採用している。
静的型付けにより、Javaのコンパイラおよび実行環境が、型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証が可能である。
Javaのデータ型には、参照型(reference type)と基本型(プリミティブ型、primitive type)の2種類がある。
Javaのオブジェクトは全て参照型である。
Javaの基本型は、単純な構造のデータ(数値、論理値、文字 など)のための型である。
Javaの標準ライブラリは、基本型の値をオブジェクトとして扱えるようにするためのラッパクラスを提供している。
近年のJava(J2SE 5.0)からは型の扱いに改良が加えられている。
Javaの特徴の一つであるオブジェクト指向プログラミングは、プログラミングおよびプログラミング言語設計の手法をいう。
Javaはオブジェクト指向プログラミング言語である。
オブジェクト指向の概念に対しては、多くの解釈がなされてきた。
一般には、オブジェクト指向を特徴づける重要な考え方は、ソフトウェアで扱うさまざまな種類のデータについて、データとそのデータに関連する手続きを一体化するように、ソフトウェアを設計することである。
こうして、データとコードは、オブジェクトと呼ばれる実体に一体化される。
オブジェクトとは、状態(データ)と振る舞い(コード)がひとかたまりとなったものと考えることができる。
オブジェクト指向以前の技術での本質的な問題点は、プログラムにおいて、状態と振る舞いが分離されていたことである。
オブジェクト指向に基づいて、これまで分離されていた状態と振る舞いを、オブジェクトに一体化することは、ソフトウェアシステムの設計において堅牢な基盤となる。
オブジェクト指向を有効に活用することにより、大規模なソフトウェア開発プロジェクトを管理することの困難さが軽減され、ソフトウェアの品質が向上し、失敗するプロジェクトの数を減らすことができる。
オブジェクト指向のもう一つの目標は、汎用的なオブジェクトを開発することで、プロジェクトをまたがってソフトウェアをより再利用可能にしてゆくというものである。
例えば、汎用的な「顧客」オブジェクトは、別のプロジェクトにおいても、理論的にはほぼ同一の手続き群を備えるであろう。
大きな組織において、その組織の複数のプロジェクトが機能的に共通する基盤層をもつ場合は、なおさらソフトウェアの再利用が重要となる。
こうしたことから、ソフトウェアオブジェクトは、さまざまなシステムに組み込み可能であるように、汎用性を備えていることが望ましい。
こうすることで、ソフトウェア業界は、既存のしっかりテストされたオブジェクトコンポーネントを活用してプロジェクトを進めることができ、開発期間を大幅に短縮することができる。
一方で、ソフトウェアの再利用性を高めるということには、実践においては、2つの大きな困難を伴う。
いくつかのオープンソースコミュニティでは、再利用に伴う問題を軽減するために、オブジェクトやクラスライブラリの開発者に、自分たちが開発した汎用的で再利用可能な開発物についての情報を広報する手段を提供している。
プラットフォーム非依存
グラフィカルユーザインタフェース(GUI)のルックアンドフィールは、プラットフォームに依存しない]]
Javaのもう一つの特徴はプラットフォームに依存していないことであり、これは、Javaのプログラムがさまざまなハードウェアやオペレーティングシステム上で必ず同じように動く、ということを意味する。
一度Javaのプログラムを作成すれば、そのプログラムはどのプラットフォーム上でも動くのである。
近年では、Java実行環境を構成するJava仮想マシンに高速化の技術が導入され、プラットフォームに依存したプログラムと同水準の実行性能を実現している。
Javaのプラットフォーム非依存は、次のようにして実現されている。
また、実際にはJavaコンパイラの実装として、ソースコードから直接にプラットフォームのハードウェアにネイティブなオブジェクトコード(機械語コード)を生成するものがある。
このようなJavaコンパイラの実装としてはGNUのGNU Compiler for Java (GCJ)などがある。
この場合、中間言語のバイトコードを生成するという段階は省かれる。
しかしこの方法で生成されるJavaの実行コードは、コンパイル時に指定したプラットフォームでしか動かない。
Javaの実行コード(バイトコード)を生成する手段としては、プログラミング言語Javaでプログラムを書くことが標準的なやり方である。
Javaのバイトコードの実行は、Java仮想マシンという仮想マシンの環境上で行われる。
Java仮想マシンは実行時にバイトコードをネイティブコードに変換する。
なお、Javaのバイトコードを生成する他の方法としては、現在ではRuby(JRuby)や Groovy 、Jabaco 、Python(Jython)などのプログラミング言語でプログラムを書くこともできる。
サン・マイクロシステムズのJavaのライセンスは、全てのJava実行環境の実装は「互換性」を備えるべきであることを要求する。このことに関連して、サン・マイクロシステムズ社とマイクロソフト社との間で法的な争いが起こったことがあった。
この法的な争いは、サンが、マイクロソフトのJava実行環境の実装について次のように主張したことによる。
サンは訴訟を起こして勝訴し、約2000万ドルの違約金の支払いを受けた。
また裁判所は、マイクロソフトに対してサンのライセンス条件に従うことを命じた。
この決定を受けて、マイクロソフトは自社のオペレーティングシステムであるWindowsにJava実行環境を同梱しない方針を採った。
また近年のバージョンのWindowsでは自社のウェブブラウザである Internet Explorer でJavaをサポートしないようにした。
その結果、Internet Explorer でJavaアプレットを動かすためには、別途にプラグインが必要となった。
しかし、サンなどの企業は、近年のバージョンのWindowsのユーザが、無償でJava実行環境を利用できるようにした。
そのため、ほとんどの Windows PC のユーザは、何ら問題なくウェブおよびデスクトップ上でJavaアプリケーションを実行できる。
最初期のJava実行環境の実装では、Javaプログラムの実行速度が遅かったが、近年では大きく改善されて、高速に実行できるようになった。
最初期のJava実行環境のJava仮想マシンの実装は、移植性を実現するためにインタプリタとして動作する仮想マシンを採用した。
こうした初期のJava実行環境の実装では、Javaプログラムの実行速度が C や C++ のプログラムと比べて遅かった。
そのため、Javaプログラムの実行速度は遅いという評判が広まった。
近年のJava実行環境の実装では、いくつかの技術を導入することにより、以前と比べて、Javaプログラムをかなり高速に実行できるようになった。
Javaプログラムを高速に実行するために使われる技術を説明する。
Java仮想マシンにジャストインタイムコンパイルと動的再コンパイル、世代別ガベージコレクションの技術を導入することにより、Javaプログラムは、移植性を保ちつつ、ネイティブコードと同水準で高速に実行することができるようになった。
Javaの移植性(プラットフォーム非依存)がどの程度実現できているかについては、議論の対象となっている。
技術的には移植性とは実現が難しい目標である。
多くのプラットフォームにおいて同一に動作するJavaプログラムを作成することは、可能である。
しかし実際には、Javaを利用できるプラットフォームによってはちょっとしたエラーが発生したり、微妙に異なる動作をする事例が多い。
こうしたことから一部の人々は、サン・マイクロシステムズのJavaの売り文句である "Write once, run anywhere"(一度コードを書けば、どの環境でも動く)をもじって "Write once, debug everywhere"(一度コードを書けば、どの環境でもデバッグが必要)と皮肉をいわれることがある。
しかし、Javaのプラットフォーム非依存は、サーバ側や組み込みシステムのアプリケーションに関しては、非常に成功している。
サーバ側(Java EE)では、Javaのサーブレット、Webサービス、EJB(Enterprise JavaBeans)などの技術が広く使われている。
組み込みシステムの分野においても、組み込みシステム向けのJava環境(Java ME)を使った OSGi を基にした開発が広く行われている。
自動ガベージコレクションJavaでは、自動ガベージコレクションを備えており、この機能を備えていない従来の多くの言語と比べて、プログラムの開発生産性と安定性が高い。Javaの自動ガベージコレクションにより、プログラマの負担は、完全に解消されるわけではないものの、大きく軽減される。近年のJavaの自動ガベージコレクションでは世代別ガベージコレクションという効率的な技術を導入している。自動ガベージコレクションを備えていない言語である C++の場合は、プログラマは自分自身でメモリの管理をしなければならないという負担に苦しめられる。C++では、オブジェクト指向プログラミングをするプログラマは一般にはJavaと同様にメモリ内のヒープという領域に生成するオブジェクトを格納する領域を割り当てる。そしてオブジェクトがもはや必要なくなった場合には、必ず明示的にオブジェクトを削除する指示を適切に記述して、そのオブジェクトが使っていたメモリ領域を解放しなければならない。プログラマが、メモリ領域の解放が必要な時に、領域の解放を忘れたり、メモリ領域解放の指示が不適切だった場合には、メモリリークが発生する可能性がある。メモリリークとは、解放し忘れた未解放メモリが累積していく現象であり、利用できるメモリの量が減ってゆく。メモリ管理が不十分なプログラムでは、その実行時にメモリリークによって、気づかないうちに勝手に大量のメモリを消費してしまう問題が起こり得る。また、あるメモリ領域を解放する際に、解放の指示を2度行うと、プログラムの実行が不安定になる可能性があり、悪くすると異常終了してしまうこともある。
Javaでは、自動ガベージコレクションを備えていない言語における潜在的な問題は、自動ガベージコレクション機能によって、その多くを未然に防ぐことができる。
プログラマは任意の時点でオブジェクトを生成することができ、Java実行環境は生成されたオブジェクトのライフサイクルを管理する責任をもつ。
プログラム(オブジェクト)は、他のオブジェクトへの参照をもち、そのオブジェクトのメソッドを呼び出すことができる。
他のオブジェクトへの参照とは、低水準の視点で述べると、メモリ内のヒープという領域上に確保されたそのオブジェクトを指すアドレスのことである。
オブジェクトがどこからも参照されなくなった場合、Javaのガベージコレクション機能が自動的にその「到達不可能なオブジェクト」を削除し、そのメモリ領域を解放することで、解放し忘れた未解放メモリが累積していき利用できるメモリの量が減ってゆくメモリリークを防ぐ。
ただしJavaの自動ガベージコレクション機能は、メモリリークの問題を完全に解消するわけではない。
プログラマが、自分のプログラムでもはや必要のないオブジェクトへの参照を保持し続けた場合は、やはりメモリリークが発生する可能性がある。
別の表現で述べると、Javaでは、メモリリークは概念的に高い水準においては、発生する可能性が残っているということである。
概念的に低い水準においては、自動ガベージコレクションが正しく実装されたJava仮想マシンを使えば、メモリリークが発生する可能性は無くなった。
全体として、Javaの自動ガベージコレクション機能により、C++の場合と比べると、オブジェクトの生成と削除は、より簡潔になり、潜在的に安全になり、また多くの場合は高速になっている。
C++においても、しようと思えば、Javaと同等のメモリ管理の高速性と効率性を実現することはできるが、先に述べたとおり、複雑な作業で間違えやすく、完璧に行おうとすれば開発期間が非常に長くなり、開発したソフトウェアはかなり複雑で難解になる。
例えば、C++で特定のクラスを対象として、高速実行およびメモリ利用の断片化の最小化を、高水準で達成できるメモリ管理モデルで設計開発する技法があるが、こうした技法は複雑である。
自動ガベージコレクションの機構は、Java仮想マシンに組み込まれており、開発者からは、事実上隠蔽されている。
開発者は、場合にもよるが、ガベージコレクションがいつ起こるか意識しなくて良い。
というのも多くの場合、ガベージコレクションの実行は、プログラマが自分で書いたコードによって明示的に起こる何らかの挙動と、必ずしも関連しているわけではないからである。
ネットワーク機能Javaでは充実したライブラリにより、コンピュータネットワークを使うソフトウェアを、効率良く開発することができる。Javaの初期のバージョンから、TCP/IP(IPv4)のライブラリを備えており、ネットワークでソケット通信を行うソフトウェアを簡単に実装することができた。分散オブジェクト環境のソフトウェアの開発も早い時期からできるようになった。Java RMI もしくは CORBA の分散オブジェクト技術を標準で使うことができる。近年では、標準、拡張その他のライブラリにより、さまざまなネットワークプロトコルを高水準で扱えるようになっている。
現在では IPv6 も扱えるようになりつつある。
XML 文書を扱う技術とネットワーク機能を有効に組み合わせることにより、高度なシステムやサービスを構築できるようになっている。
セキュリティJavaでは初期のバージョンから遠隔のコンピュータ上にある実行コード(Javaアプレット)を安全に実行できるよう設計されていた。
名前空間Javaは、パッケージという名前空間の機構をもつ言語であり、ライブラリおよびアプリケーションソフトウェアに含まれる多数のJavaのプログラム(クラスとインタフェース)を、パッケージの階層構造に分類・整理することができる。
名前空間の機構をもたない言語と比べて、多数のクラスとインタフェースの管理が容易となり、クラスとインタフェースの命名についても、既存のクラス/インタフェースとの名前の衝突回避を考慮する労力が、大きく軽減される。
実行形態
文法
プログラミング言語Javaの文法は、C および C++ から多くを引き継いでいる。
このためJavaの文法は、多くのプログラマにとって習得しやすくなっている。
Javaが世に現れる以前は、Cのプログラマが多く、またオブジェクト指向プログラミング言語の中では、C++は広く使われてきた言語の一つだった。
しかし Java では、C++ とは違って、言語の基礎的な部分から全体にわたって、オブジェクト指向プログラミングの思想が貫かれている。
C++ の文法は、構造化プログラミング、総称的プログラミング(generic programming)、およびオブジェクト指向プログラミングの構文が集まってハイブリッドに構成されている。
Javaでは、若干の例外を除き、全てがオブジェクトであり、全てはクラス内に記述する。
Hello world次の節以降では、Hello world プログラムで、Javaプログラムの例を示して説明する。
Hello world プログラムとは、"Hello, world" という文字列をディスプレイなどの出力装置に出力する簡単なソフトウェアプログラムである。プログラミング言語の初学者向けのプログラム例としてよく使われる。
なお先に述べたとおり、Javaには複数の実行形態があると考えることができるので、以降では、それぞれの実行形態における Hello world プログラムを例示する。
例: スタンドアロン(コマンドライン)} } このプログラムについて説明する。
例: スタンドアロン(Swing)
グラフィカルユーザインタフェース(GUI)環境で動く Swing を使ったスタンドアロンのJavaアプリケーションの例を示す。
Swing は、Java SE の高度な GUI のウィジェット・ツールキットのライブラリである。
// Hello.java
import javax.swing.*
public class Hello extends JFrame {
Hello() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
add(new JLabel("Hello, world!")) pack() } public static void main(String[] args) {
new Hello().setVisible(true)
} }
例: アプレット// Hello.java
import java.applet.Applet
import java.awt.Graphics public class Hello extends Applet {
public void paint(Graphics gc) {
gc.drawString("Hello, world!", 65, 95)
} } <
!-- Hello.html --> --> Hello World Applet
<
!--(XHTML 1.1 準拠の場合)
-->
例: サーブレット
Javaサーブレットは、サーバ側の Java EE の構成要素であり、クライアントから受けた要求(request)に対する応答(response)を生成する。
現在、多くの場合はウェブブラウザから要求を受け、応答としてXHTML/HTMLのウェブページを動的に生成する。
// Hello.java
import java.io.*
import javax.servlet.* public class Hello extends GenericServlet {
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html")
PrintWriter pw = response.getWriter() pw.println("Hello, world!") } }
構成
Javaプラットフォームの構成を説明する。
Java実行環境Java実行環境(JRE
Java Runtime Environment)は、Javaプラットフォームに配置されたJavaアプリケーションを実行するために必要な、ソフトウェアである。 標準クラスライブラリやJava仮想マシンなどから構成される。 エンドユーザは普通、Javaソフトウェアパッケージやウェブブラウザプラグインの利用を通じて JRE を使う。 サン・マイクロシステムズ/JCP をはじめ複数の団体や企業により、 さまざまなプラットフォーム向けに、多くの JRE の実装が開発・提供されている。 JRE の他、サン/JCPなどの団体・企業は、Java開発キット(JDK)と呼ばれる JRE のスーパーセットの実装を開発・提供している。JDK は、Javaプログラムの開発を支援する基本的なソフトウェアであり、多くの開発ツールが含まれている。
実行環境の構成Java実行環境は、標準クラスライブラリとJava仮想マシン、およびいくつかのファイルとソフトウェアから構成される。
Java開発キットJava開発キット(JDK
Java Development Kit)は、サン/JCP をはじめ複数の団体や企業により開発・提供されている、Javaプログラムの開発を支援する基本的なソフトウェアである。 Javaが世に出て以来、広く使われてきたJavaの開発ツールである。 Javaコンパイラ、javadoc、デバッガなどを含む多くの開発ツールが含まれている。 また、完全なJava実行環境(JRE)を同梱している。 Javaプログラムを実行するだけであれば、Java実行環境が導入されていれば充分で、Java開発キットを導入する必要は無い。
Java開発キット(JDK)の呼称は、これまでに何度か変更されている。
JREとJDKの複数の実装広く使われているプラットフォームなどに対しては、複数の団体や企業が独自に JRE や JDK の実装を開発・提供している。
独自の最適化技術を適用したり、特定の用途に特化した最適化、あるいは異なるライセンスを採用するなど、それぞれ特徴がある。
オープンソース/フリーソフトウェアの実装いくつかの団体が、オープンソースもしくはフリーソフトウェアのライセンスで利用できる、Java仮想マシンおよび JRE 、JDK の実装を開発している。
Java仮想マシンおよび標準ライブラリの仕様はサン/JCPが公開している。
サン/JCPのJava標準クラスライブラリのソースコードは JDK の一部として提供されているため、開発者はJava標準クラスライブラリのソースコードを参照することができる。
しかしサン/JCPのJava標準クラスライブラリのソースコードを改変することは、サンのライセンスにより認められていなかった。ただし2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明している。
そのため一部の人々は、オープンソースもしくはフリーのライセンスで利用できる、サン/JCPとは別の、ただし互換性のあるJava標準クラスライブラリとJava仮想マシンを実装する作業を行っており、近い将来に完全な実装が完成し公開されるとみられる。
オープンソースもしくはフリーの実装を開発しているいくつかのプロジェクトを示す。
GNU Classpath は、2007年3月現在、J2SE 1.4 のライブラリの 99% 以上を実装しhttp://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html、J2SE 5.0 では 95% 以上を実装しているhttp://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-classpath.html。
また Apache Harmony には IBM が協力している。
GNU Compiler for Java (GCJ)
GNUがGNUコンパイラコレクション (GCC) のJava版、GNU Compiler for Java (The GNU Compiler for the Java Programming Language) を出している。
ahead-of-time コンパイラを搭載しており、Javaのソースコードやバイトコードをネイティブマシンコード(Windowsの場合はexeファイル)に変換できる。
クラスライブラリはGNU Classpathを使っており、1.4のほとんどの部分が対応しており、5.0の部分も実装が進んでいる。
Windows環境では、GCJはMinGW (Minimalist GNU for Windows) もしくはCygwinを使って実行できる。
Cygwinの場合は、対象がライセンスがGPLのソフトウェアに限られるが、MinGWの場合は商用含め、全てのソフトウェアで利用できる。
GCC/GCJ for MinGWにて、MinGW版のGCJをまとめたパッケージが公開されている。
Excelsior JET米Excelsior社が Excelsior JET というahead-of-timeコンパイラを販売しているhttp://www.excelsior-usa.com/jet.html。Java SE 用に書かれたプログラムをWindowsのネイティブマシンコードであるexeファイル(実行ファイル)に変換できる。起動の高速化やアプリケーションの難読化を実現する。
Windows exeパッケージ化
Windowsにて、配布、実行しやすくするために、Javaのjarファイルをexeファイル(実行ファイル)でラッピングするツールがある。以下が、その一例である。
Java Web Start には、適切なバージョンの JRE をインストールする機能があるが、そもそも、JREがインストールされていない場合は、それが不可能である。JSmooth などでは、ラッピングされた exe が、必要な JRE がインストールされていないことを検出した時は、JRE をダウンロードして、インストールする機能を持つ。また、上記3つ全てにおいて、JREを同梱して、同梱したJREを使ってアプリケーションを実行する機能を持つ。
また、通常の Java アプリケーションでは、Windows のタスクマネージャには、java.exe や javaw.exe と表示され、Java のアイコンが表示されるが、自前の exe ファイル名と自前のアイコンを表示する機能を持つ。
さらに、上記のいくつかは、アプリケーションの2重起動を防止したり、アプリケーションを Windows サービス(NTサービス)化する機能を持つ。
Sun が特定のOSに特化した機能を提供することを嫌がっているため、これらの機能が不足しており、それを補うために、exeパッケージ化が存在する。
Javaのエディション
サン・マイクロシステムズとJCPは、さまざまな環境に対応するため、3つのJavaプラットフォームのエディションを規定している。
Java の API の多くは分類され各エディションに割り当てられている。
エディションごとに実行環境と開発環境がある。
Java実行環境(JRE)は、Java仮想マシンと標準ライブラリの実装から構成される。
JDK 1.1 のバージョンまでは、Java SE に相当するエディションのみが提供されていた。
3つのエディションが規定されたのは、JDK 1.1 の次のバージョンからである。
サン/JCPが規定しているエディションを次に示す。
Java API に含まれるクラスは、パッケージと呼ばれるグループに分類される。
各パッケージは、相互に関連するインタフェース、クラス、例外を含む。
Javaの各エディションでどのような機能が使えるかについては、それぞれのエディションの項目(Java SE、Java EE、Java ME)を参照のこと。
JavaのAPIセットは、サン・マイクロシステムズと他の個人や企業・団体が共同で、JCP(Java Community Process)プログラムに沿って管理している。
このプロセスに参加する人々が、Java API の設計と開発に関わっている。
このプロセスのあり方については、議論の対象となっている。
2004年より、IBM と BEAシステムズ は、Java の公式のオープンソース実装を作る動きを、公的に支援している。
2006年まで、サンはこうした動きに対しては拒否する立場をとってきたが、方針を変えて自社とJCPによるJavaの実装をオープンソースにする意向を表明し実行に移し始めている。
拡張機能と関連技術Javaの標準機能に対する拡張機能は、多くの場合、javax.* パッケージに属する。
こうした拡張機能は、Java SE の Java開発キット(JDK)や Java実行環境(JRE)には含まれない。
Javaの拡張機能や関連技術は、プログラミング言語Javaと密接に連携する。
主なJavaの拡張機能と関連技術を示す。(いくつかの拡張機能は近年の Java SE 標準ライブラリに統合された)
Java技術の標準化
現在、Javaプラットフォームの将来のバージョンや機能は、JCP(Java Community Process)の標準化プロセスのもとで開発されている。
JCP のメンバになることで、Java技術の将来のバージョンや機能の定義に関与することができる。
JCP には、IBM、ボーランド、BEAシステムズ、富士通、Apacheソフトウェア財団、ヒューレット・パッカード など、さまざまな個人、団体、企業がメンバとして参加している。
JCP は、Javaプラットフォームに追加する仕様や技術を、JSRs(Java Specification Requests)という文書群に記述する。
プログラミング言語JavaとJavaコアAPIに関わるいくつかの JSRs を示す。
開発ツールJavaアプリケーションを開発するための開発ツール(開発用ソフトウェア)をいくつか示す。
次に示すツール以外にも、数多くのツールが開発・提供されている。
統合開発環境Javaプログラムを開発できるいくつかの統合開発環境(IDE)を示す。
批判Javaに対しては、優れた技術だと評価する人々がいる一方で、批判も少なくない。
Javaは、ソフトウェアに関する複雑さを管理する問題に対して、革新的な方法を提供するという目標のもとで、開発された。
多くの人々は、Java技術は、この期待に対して満足できる答えを提供したと評価している。
しかしJavaにも欠点が無いわけではない。
Javaは、どのようなプログラミング作法にも適応しているわけではない。
また、どのような環境や要件にも普遍的に適応しているわけではない。
Javaに対する批判を大まかに記述する。
実行性能Javaの初期のバージョンでは、CやC++などのネイティブにコンパイルする言語と比べて、とても実行が遅くメモリの消費が激しいとして、批判されることが多かったが、近年のバージョンでは改善されてきている。
近年のJava仮想マシンで採用しているジャストインタイムコンパイラや動的再コンパイルの実行性能は、従来の言語のネイティブコンパイラとほぼ同じ水準の実行性能かそれ以上を達成することがある。これは頻繁にメモリアクセスを行うプログラムにおいてJavaの自動ガベージコレクションの技術が、Cのmallocやfreeよりも高い性能を発揮できることによる。こうした事情から、Javaの実行性能については、議論の対象となっている。
ルックアンドフィール
ルックアンドフィールに関して、JavaのSwingのツールキットを使ったグラフィカルユーザインタフェース(GUI)を備えたアプリケーションの既定のルックアンドフィールが、従来のネイティブなアプリケーションとは大きく異なるため、エンドユーザの人々にとってJavaのGUIアプリケーションはなじみにくいと批判されることがある。Javaではプラグイン可能なルックアンドフィールの機構を備えており、サンはWindows、Mac OS XおよびMotifの各ルックアンドフィールのクローンを提供している。そのため、Swingの既定のルックアンドフィールではなく、プラットフォームネイティブと同様のルックアンドフィールでJavaのアプリケーションを動かすよう指定することができる。しかしエンドユーザにとってこの指定方法は簡単ではないと指摘されることがある。
言語仕様の設計言語仕様の設計に対する批判をいくつかの側面から述べる。
クラスパス一般に、Javaプログラムを実行する際、-classpath オプションを使用するか、環境変数クラスパス(CLASSPATH)を必要に応じて適切に設定する必要がある。環境変数クラスパスを指定すると、既定のカレントディレクトリという設定が上書きされる。したがって、環境変数クラスパスを変更するソフトをインストールするなど設定を変えられた場合は、Java実行環境は正しくJavaプログラムを実行することができなくなることがある。このためJavaを使い始めた人々は、クラスパスについて戸惑うことがある。サンは -classpath オプションを指定する方法を推奨している。
移植性・互換性Javaは高い移植性と互換性を実現するべく開発されており、ある程度の水準まで達成しているが、課題が残っている。Javaのバージョン間の下位互換性・上位互換性が完全ではないことが問題として議論の対象になっている。Javaでは高い移植性を保っているため、一部のプラットフォームにしかない独自の機能はJavaからは使えない。
Java認定資格
サン・マイクロシステムズは複数のJava認定資格を主催している。
認定資格は年3回の受験制限がある。ただし何らかの理由で4回以上受験の際には、アメリカのサン・マイクロシステムズ本社に連絡する必要がある。
関連項目
一覧
関連ソフトウェア
脚注参考文献
外部リンクサン・マイクロシステムズとJCP
サン・マイクロシステムズと JCP(Java Community Process)が提供するウェブリソース
チュートリアル
技術情報
歴史
JREとJDKの実装プロプライエタリ
プロプライエタリな実装
オープンソース/フリーソフトウェア
批判
Javaに似た言語
*
Java
Java
JAVA
JAVA
JAVA
---------------------------------------------- 出典:「フリー百科辞典ウィキペディア」(2009-01-01)
Text is available under GNU Free Documentation License.
|
ネットで人気のキーワード(2010年02月10日 14:48現在)
- 立松和平(320ポイント)
- 機動戦士ガンダム(141.6ポイント)
- ギリシャ問題(116.6ポイント)
- バレンタインデー(107.6ポイント)
- ベッキー・クルーエル(100ポイント)
- 次長課長(100ポイント)
- プリウスリコール(100ポイント)
- リトルの公式(100ポイント)
- プリウス(100ポイント)
- 笑顔がごちそう ウチゴハン(70ポイント)
MicroAD
googleブログ検索で「Java」を検索
- Javaで3Dエンジン | JavaAppletゲーム集(JavaAppletゲーム集様)【21分前】
- 日立のJP1、Cosminexus、Groupmaxが日経コンピュータ パートナー満足度 ...(新着ニュースリリース | ニュースリリース ポータルサイト News2u.net様)【48分前】
- ::::: IT Security Neophyte Investigator :::::: 10日 水曜日、友引(::::: IT Security Neophyte Investigator :::::様)【59分前】
- AndroidにAdmob広告を設置する方法 - Hacking My Way ~ itogのhack日記(Hacking My Way 〜 itogのhack日記様)【59分前】
- 絵を描くのは難しい…… - ARGENTO CUORE(ARGENTO CUORE様)【1時間前】
- 【渋谷】Java【渋谷ブログ】(ブログ様)【1時間前】
- Javaで多言語対応するとき - 犬ぶよツールズ制作記録(犬ぶよツールズ制作記録様)【1時間前】
- np8p0ai: CDC(np8p0ai様)【2時間前】
- Symfoware AntでThrift接続用のjarを作成する(Symfoware様)【2時間前】
- Apache Ant Project、「Apache Ant 1.8」をリリース - SourceForge.JP ...(SourceForge.JP Magazine様)【2時間前】
- ハッピー・バースディ・トゥ・ユー | オンラインピアノレッスン ウェル ...(オンラインピアノレッスン ウェルピアノ様)【2時間前】
- Flex、AIR、Java、Androidなど » 折り込みチラシビューワー for iPhone ...(Flex、AIR、Java、Androidなど様)【2時間前】
- GDrive風なGoogle App Engineを使ったファイルストレージ ...(web ニュース リーダー様)【2時間前】
- zl2dn2b: Java VM(zl2dn2b様)【2時間前】
- 製造技術者(19607) - 中国関連求人情報 - ALA!中国[新館]([ALA!中国] 最新求人情報様)【3時間前】
- 中国語を活用し、営業事務の正社員 (新卒歓迎)(19619) - 中国関連 ...([ALA!中国] 最新求人情報様)【3時間前】
- 画面ソフト設計人材を募集 (勤務地:日本)(19581) - 中国関連求人 ...([ALA!中国] 最新求人情報様)【3時間前】
- Yet Another Diary: Ubuntu 8.04 x86_64 LTSでfirefox 3.6を試してみる(Yet Another Diary様)【3時間前】
- 外国為替証拠金取引の時間 プロの目線 「ダウジョーンズ情報 ユーロが ...(外国為替証拠金取引の時間様)【3時間前】
- アメリカが曰く「このバカは、一体何を話しているんだ?」 - 脳内新聞 ...(脳内新聞(ソース版)様)【3時間前】
- 携帯用PCサイト閲覧アプリJigブラウザー無償版をauで使ってみた: YUU ...(YUU MEDIA TOWN@Blog様)【3時間前】
- エンジニア・プログラマー人材募集/案件情報/バレーノ:国際情報 ...(エンジニア・プログラマー人材募集/案件情報/バレーノ㈱様)【3時間前】
- エンジニア・プログラマー人材募集/案件情報/バレーノ:新海外(アジア ...(エンジニア・プログラマー人材募集/案件情報/バレーノ㈱様)【3時間前】
- ねたぎれにゃー - -AquAreA- blog(-AquAreA- blog様)【3時間前】
- 圏論の練習問題(マジ) - 檜山正幸のキマイラ飼育記(檜山正幸のキマイラ飼育記様)【4時間前】
- pc1bju1: SJC-A(pc1bju1様)【4時間前】
- 2010-02-10 10:00:27 - SLOW LIFE ~Dream&Move~(SLOW LIFE 〜Dream&Move〜様)【4時間前】
- peo1rk8: Curl(peo1rk8様)【4時間前】
- 無料文字入れフジカラー無料注文ソフト WEB版 使用方法②(格安フジカラープリント専門店アイフジカラー純正集合写真文字入れ無料様)【4時間前】
- largo-ws の行政書士:特車通行許可オンライン申請がJRE1.6対応に(largo-ws の行政書士様)【5時間前】
yahooブログで「Java」を検索
- UbuntuでTomcatを使えるようにしてみる(Linuxに使われる日々様)【3時間前】
- 携帯用PCサイト閲覧アプリJigブラウザー無償版をauで使ってみた(YUU MEDIA TOWN@Blog様)【3時間前】
- ゴドフスキ:ジャワ組曲 YouTubeから(hagetaka☆Short Yell様)【3時間前】
- 2月10日 お天気(株式会社イーブ|未経験・転職の方も就職可能。Javaプログラ ...様)【4時間前】
- ゴドフスキ:ジャワ組曲(全曲)(hagetaka☆Short Yell様)【4時間前】
- IBMerが学生時代にどのようにdWを利用していたかを紹介する ...(developerWorks Japan 編集長のブログ様)【5時間前】
- DaedalusX64 Rev.460 etc.(mxmkitchen様)【6時間前】
- ”「Gメール」に交流サイト(SNS)機能を追加することが ...(ウィリアムのいたずらの開発日記様)【6時間前】
- 目が合ってしまいました!(アプレットの玩具箱様)【6時間前】
- REAソリューション XPLATFORM(みんなの Cosminexus NEWS!!様)【7時間前】
- WILLCOM、HONEY BEE BOX(WX334K)を発表!2/16(火)より順次発 ...(K-MAX BLOG様)【7時間前】
- オライリーのAndroid開発講座 初回(開発様)【8時間前】
- [Java][Apache][FESS]clearReferences系のエラーログ、その2(今日のひとこと様)【8時間前】
- [twitter] 今日のつぶやき(じゅんいち☆かとうの技術日誌様)【8時間前】
- [Twitter]今日のつぶやき2010/02/09(Chisei Documents様)【11時間前】
- ウォールストリート (ウォールストリート) ダイニングバー(東京バー情報|大酒豪|ショット,ダイニング,カフェ,ダーツ, ...様)【12時間前】
- 2010.02.10(制作のしおり様)【13時間前】
- NetFront〓 Browser v4.0 for Windows Mobile コンセプト版 ...(FAF特殊戦第5飛行戦隊装備班様)【13時間前】
- Flash勉強中(We're Not Gonna Take It!様)【14時間前】
- 今日のつぶやき(Planet GEEK様)【14時間前】
- Javaスレッド 完全制覇 (結城浩)(おとなの日常?様)【14時間前】
- [Java]組み込みGlassfishの起動速度(しんさんの出張所 はてな編様)【14時間前】
- diary(bsiyoの日記様)【14時間前】
- kumofsはなぜ落ちないかとか、Apache ZooKeeperによる分散並 ...(ウィリアムのいたずらの開発日記様)【15時間前】
- [misc] いろいろメモ(/var/log/messages様)【15時間前】
- WX334Kきた!(ぬるぴょピャッっち様)【15時間前】
- 納税者のデジタルデバイド(5522の眼様)【15時間前】
- 博多 『Artisan Coffee』 と 『MANU コーヒー』(FBCインターナショナルの『美味しいバリスタ&エスプレッソ ...様)【16時間前】
- 大人気HONEY BEEシリーズ最新機種、折りたたみタイプHONEY B ...(SQUAREな毎日様)【16時間前】
- [日記]CREATE TRIGGER(メガネがキラリ☆様)【16時間前】










![Validate my RSS feed [Valid RSS]](http://navig1.sakura.ne.jp//image/valid-rss.png)