Java/クイックツアー

出典: フリー教科書『ウィキブックス(Wikibooks)』
移動先: 案内検索

情報技術 > Java > Javaクイックツアー

「一度書けば、どこでも動く」"Write Once, Run Anywhere" を謳い文句に登場したJava。Javaで書かれたプログラムは、従来のプログラムとは違い、一度書けば、どんなOS(オペレーティングシステム)CPUの上でも動かすことができる「プラットフォーム非依存」という特徴を持っています。まずは、そのJavaの特徴について説明します。

Wikipedia
ウィキペディアJava言語の記事があります。


Javaの特徴[編集]

この優れた特徴のために、Javaで書かれたプログラムは、WindowsだろうとMacだろうとUnixだろうとLinuxだろうと、コンパイルせずにどんなOSでも動かすことができます。ほかにも従来のC言語C++言語でよく問題となっていた、10年前に購入したソフトウェアが動かないという問題も解決します。この特徴に加え、ネットワークとの親和性にも非常によく優れています。そもそも、Javaは始めからネットワークを意識した言語です。もとは、Javaという技術は家電製品を制御するために生まれました。そのためには、ネットワークとの親和性が強い必要があり、Javaプログラムをあらゆる家電製品で動かす為に、どんな家電製品でも同じように動く必要があることから、「プラットフォーム非依存」である必要があったのです。そのため、Javaは今や、デスクトップコンピュータだけでなくサーバコンピュータ携帯端末の上でも動かすことができるようになっています。

C/C++言語との違い[編集]

Wikipedia
ウィキペディアJavaとC++の比較の記事があります。

Javaはネットワークとの親和性が強いことから、Javaコンパイラには厳しいセキュリティチェックがかかっており、そう簡単には危険なプログラムを作ることができないようになっています。

Javaにある多くの機能が、C/C++からの影響を受けています。そのため、Javaは文法がC/C++に非常に似ています。しかし、それと同時に、C/C++では危険とされる様々なものを除去し、欠点を改良してJavaが開発されました。

ポインタ[編集]

Wikipedia
ウィキペディアポインタの記事があります。

JavaにはC言語C++にあるポインタと類似する機能はあるものの、C言語やC++のように、ポインタを使ってメモリ上の特定の番地にアクセスしてシステムを破壊するという危険なことが起きないようになっています。よく「Javaにはポインタがない」と誤解されることがありますが、実際にはあります。しかし、C言語やC++言語のように、危険な「ポインタ演算」を行うことはできなくなりました。これにより、Javaでは、C言語やC++言語よりもより安全にプログラミングをすることが可能になりました。Javaを開発したSun Microsystemsは、「Javaにはポインタがない」を宣伝文句にしていることがありましたが、これは誤解を招く表現であり、実際には、むしろJavaはポインタだらけです。しかし、C言語やC++言語のような頭を悩ます危険な問題はおきにくくなっています。つまり、「Javaにはポインタはあるけれどもポインタ演算はない」という表現が正確です。

配列[編集]

Wikipedia
ウィキペディア配列の記事があります。

C言語やC++言語ではJava同様配列というものがあります。C言語やC++言語ではこの配列を使って危険なことができてしまいました。JavaもC言語やC++言語も配列を宣言するとき、長さを指定します。しかしC言語やC++言語では、長さを指定しても、その配列の長さを超える領域にアクセスすることも可能でした。Javaでは、配列の領域外にアクセスすると例外処理機構が働いて、事前にどこで問題が起きたのかを知らせてくれます。しかし、C言語やC++言語では知らせてくれません。そのためにどこでプログラムに問題がおきたのかを通知することができないという問題がありました。そのために、C言語やC++言語では、システムを破壊に追いやるバッファオーバーフロー(buffer overflow)という深刻な問題をもたらしました。C言語やC++言語では、メモリ空間全体を非常に長い巨大な配列として見なしているのです。その巨大な配列をポインタと見なしてメモリリークを引き起こすことも可能になる危険なメモリアクセスを可能にしています。Javaではこのようなことはなく、配列の添え字には負の値を使うことができず、宣言したサイズ内でしかアクセスできないようになっています。つまり、Javaは不用意に外部のリソースにアクセスできないようになっているのです。

オートガベージコレクション[編集]

Wikipedia
ウィキペディアガベージコレクションの記事があります。

Javaはさらに、メモリ管理も容易になりました。オートガベージコレクションによって、オブジェクト生成時に確保したメモリ領域は、そのオブジェクトが不必要になったとき、自動的に開放してくれるという優れた特徴があります。C言語やC++言語ではmalloc()やnewで確保したメモリはfree()やdelete()で明示的に解放しなければなりませんでした。これは、いつどこで、メモリを解放すべきかを、自分で決めなければならないという負担がありました。そのためにC言語やC++ではこのメモリ解放を怠ることで、システムを破壊するメモリリークという惨事を引き起こす危険もありました。Javaでは、このガベージコレクションが自動的に破棄されたメモリ領域を、その名の通り、ゴミ収集車のように自動的に回収してくれます。そのために、メモリをいつ解放するかを意識せず、効率よくプログラミングすることができます。これは、自動車にたとえると、マニュアル車オートマ車に変わってしまうほど効率的な進化を遂げているということです。

このページ「Java/クイックツアー」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。