Javaの世界観に戻るJavaの世界観Javaによるプログラミングに関する世界観です。Javaの世界観2(オブジェクト指向)やJavaの世界観3(クラスライブラリ)も参照のこと。デザインパターンも参照のこと。オブジェクト指向を始めようを参考にさせていただきました。大規模な開発オブジェクト指向と言う考え方を活かして、大規模な開発に使われることが多い。一度書けばどこでも動く、と言う特徴を活かして、クロスプラットフォームアプリケーションの開発や、携帯デバイスでの開発に使われることが多い。サーバー・エンタープライズ・事務処理での開発サーバー、エンタープライズ、メインフレームの開発に良く使われる。旧来COBOLが使われていた事務処理用の開発でも良く使われる。Javaの基本JavaVM(仮想マシン)で動くJavaは、ネイティブにコンパイルするのではなく、仮想マシンで動く言語です。仮想マシンでは、中間コードにコンパイルし、Just-In-Time(JIT)コンパイルと最適化を行います。ガーベッジ・コレクションによって、メモリを自動的に管理し、要らなくなったメモリを自動で廃棄してくれます。anywhere"というスローガンの下、一度書いたアプリケーションがどこでも動く、という長所をうたっています。JavaのGUIライブラリであるSwingを使って作られたアプリケーションは、どのOSでも動きます。モバイルの分野でも、デスクトップでモバイルアプリケーションを開発することが出来ます。Javaの特徴Javaは、コンパイラ式の言語でも、インタプリタ式の言語でもありません。一度、コードをバイトコードと呼ばれる中間言語にコンパイルして、それを仮想マシンで実行します。C言語では、ソースコードを機械語にコンパイルしますが、さまざまなCPUのアーキテクチャが存在するため、別のCPUで動かそうと思った時はコンパイルし直したり、CPU依存のコードがあれば書き直さなければなりません。Javaでは、コードを一度バイトコードと呼ばれる「全てのCPUに共通のコード」にコンパイルし、実行時にそれぞれのCPUの機械語に変換します。これによって、「全てのプラットフォームで同じコードを動かす」ことが出来ます。逆に、速度や性能は犠牲になります。Javaは共通のクラスライブラリを持っているほか、OSやプラットフォームに依存するAPIの部分を仮想マシンが吸収してくれます。これによって、あらゆるプラットフォームで共通のAPIが動き、別のプラットフォームのコードを同じものとして扱えます。モバイルのJavaコードをWindowsのJava上で開発できます。C/C++にクロスプラットフォーム性がないわけではありません。CPUに依存する内容がなければ、同じコードをさまざまな環境に向けて「クロスコンパイル」することができます。プラットフォームについてJavaのように共通のものとして扱うことはできません。GTK+やQtのLinuxアプリケーションをWindowsで開発することは容易ではありません。アプリケーションのクロスプラットフォーム性が欲しいなら、WindowsでもQtを使わなければならなくなるでしょう。Javaではこうした問題はありません。普通にWindowsのJava向けに書いたコードが、そのままLinuxのJavaで動きます。欠点としては、OSネイティブのアプリケーションとは、見た目もコードも違ったものになることです。JavaのSwingで書いたアプリケーションは、OSネイティブのアプリケーションとは見た目が違ってしまいます。Frameworkが使えます。C#/VB.NETで書かれたコードは、OSネイティブのものと同じルック・フィールを持ちます。Javaはサーバーやエンタープライズの分野でも強いです。EEのプラットフォームを使うことで、サーブレット向けのコードを書くことができます。これはPerl/CGIやPHPと同様の、サーバーサイドの技術です。JSPを用いれば、PHPと全く同じようなコードを書くことが出来ます。Tomcatなど、オープンソース系の技術が多いことで知られています。Javaはとても汎用性のあるプラットフォームで、Windows、UNIX、Linux、モバイル、そしてIBMのメインフレームでも動きます。Javaの文法的な側面を見ると、「完全なオブジェクト指向言語」であると言えます。オブジェクト指向はダイナブック構想で知られるアラン・ケイのSmalltalkで生まれた考え方で、プログラムをオブジェクト(もの)の形式で書き、プログラムのアルゴリズムとデータ構造を「クラス」で設計した後に、まるでものを作ったり破棄したり操作したりするかのようにプログラムを書くことができます。これにより、以下のようなコードが成り立ちます。}}このように、まるで「もの」であるかのようにプログラムコードを扱うことができます。これがJavaの最大の特徴です。このようにすることによって、プログラム間のデータの共有を容易にし、またプログラムの再利用を促進することができます。(たとえば、メンバ変数はどのメンバ関数からもアクセスできる。このようにすることで、オブジェクトのインスタンスとメソッドを容易に関連づけられる。)継承による機能を追加した拡張クラスの作成や、プログラムに共通のインターフェースの実装のような機能を使うことで、一度書いたプログラムのコードを再利用することが容易となり、大規模なプログラム開発を可能にしてくれます。ある意味、Javaは「コードとデータの再利用」をとても大切にした言語だと言えるでしょう。Javaとして覚えたものはさまざまなJavaの分野で応用できるまた、Javaの良い点は、Java言語の文法やクラスライブラリAPIとして覚えたことが、さまざまなJavaの分野で応用できることです。コマンドラインでの入出力やファイル読み込みのようなクラス機能は、SwingやJavaサーブレットの分野でも、そのまま同じように使うことができます。EEの多くの分野で、そのまま使うことができます。ScalaやKotlinのようなJavaの変種言語についても、Javaのクラスライブラリがそのまま使えます。モバイル機器については注意が必要です。MEでは、多くのクラスが制限されており、サブセットによって使える場合と使えない場合があります。それから、AndroidをJavaと言う人も多いですが、AndroidはJavaではなく、仮想マシンやクラスライブラリも異なっています。C++やPythonなどの他の言語を使う場合でも、Javaの経験があるのと無いのとでは大きく違います。ほとんどの文法やオブジェクト指向の機能がJavaと同じだからです。Javaは、一度勉強するとモバイルからエンタープライズまで多くの分野で活躍できる言語です。仕事にありつけることも多く、クロスプラットフォームな仕様からプログラムを動作できる環境も多いですし、ネットや書籍などの情報も豊富です。古い言語になってきたのは言えるでしょう。Javaと同じ名前がついているJavaScriptは、Javaとよく似た構文を持ち、最先端の機能があります。Javaを習得したら、JavaScriptを次に習得することをおすすめします。今のプログラミング業界では、C/C++とJavaとPythonができれば何でもできるため、C++の習得もおすすめしておきます。古臭くはなってきたがまだまだ現役Javaも、最初に登場した時からIT業界はどんどん進歩し、今では古臭い言語になりました。Javaは、SmalltalkやC++に触発された、オブジェクト指向言語として出発しました。C/C++に近い文法を持ちながら、洗練されたオブジェクト指向を実現し、ポインタを排してガーベッジコレクションという「メモリ管理不要」という特徴を持ちながら、洗練されたオブジェクト指向のクラスライブラリ(NeXTSTEPのCocoaに影響を受けたらしい)を提供し、VMの上で動くことで「再コンパイルの必要がない完全なクロスプラットフォーム」を実現しました。最初は、Netscapeとの提携もあって、アプレットというブラウザの上で動くJavaの小さなアプリケーションが流行りました。違うWebブラウザで動くスクリプト言語であるJavaScriptに同じ「Java」という名前を関したのは、Netscapeとの提携もありますが、アプレットとスクリプトという2つのプログラム領域に共通の名前をつけたかったのではないかと思います。そもそもネットワークで動くことを意図しており、サンドボックス機能で安全にネットワーク上のアプリケーションを動かすことができました。オブジェクト指向としての機能が洗練されており、特にポインタを排しながら継承とインターフェースで多重継承の弊害を無くし、プログラマの間で「オブジェクト指向でなぜ作るのか」という議論を巻き起こしました。MEというモバイルやマイクロ製品向けのJavaのサブセットがあり、これを使うことで「デスクトップで開発されたJavaアプリケーションはそのままモバイルでも動く」という特徴を得られ、クロスプラットフォーム性は今でもJavaの優位性として多くの人に評価されています。CGIよりも効率のいいとされるPHPのように、サーブレットのJavaはスレッドをコンテナサーバで持つことから、CGIよりも効率がいいとされました。EEのアプリケーションサーバが動きます。Javaは優秀で、Pythonなどのスクリプト言語よりは高速に動きますし、C/C++のようにメモリ管理を考える必要が無く、そのため安定して「遅くてもきちんと動く」言語です。AndroidのようにJavaを搭載したシステムはどんどん増えていますし、Javaの仕事(求人数)も多いです。(Javaシステムの構築ができるプログラマはハローワークの求人情報でも良く募集されていて、最近はJavaの求人だけではなく、Kotlinのような求人もたまに見られます。Rubyなどの比ではありません。)ScalaやKotlinのような新技術もあり、これらは変種(代替言語)として動きます。Frameworkなどもあります。C/C++はメモリ管理などが大変で大規模な開発では動くかどうか心配だが、RubyやPythonを採用するには実績がなく性能がJavaに比べて遅い、などの用途で、「大規模なシステムを作る時の事実上の標準」になってきています。Javaはまだまだ現役です。IT業界の時代の流れを考えると、Javaも古くなってきました。Javaはあまりに「クラス」を用いたオブジェクト指向を行いますが、JavaScriptなどでは新しい「プロトタイプ」と呼ばれるオブジェクト指向を行います。プロトタイプチェーンでは、クラスとして型を階層的に書いてインスタンスを発生させるのではなく、プロトタイプを動的に作りながらその型オブジェクトから別のオブジェクトを発生させるという方法で、「委譲」と呼ばれる「メソッドはさまざまなオブジェクトのメソッドに関連付けて動かせる」ということが可能です。したJavaを新しくしていくために、OracleはOpenJDKとOracleJDKの分岐を作りました。OpenJDKはオープンソースでみんなで開発し、半年という今までよりも短いスパンで新バージョンを投入していきます。JDKを提供し、このバージョンは有料にする代わり8年間のサポートが得られます。したOracleの独自のやり方で、Javaが新しいIT業界の潮流に立ち、「今でも使える新鮮で安定した言語」になることを望みます。NEWSRubyとJavaで悩んでいるのであれば、Javaをお勧めする。Rubyは、少ない行(たとえば3行)でプログラムが作れる、というところが優れているだけで、他にあまり優れた点がない。そもそも、プログラミングなんか最初からしないのがRubyである。Rubyは日本ローカルのお遊び言語である。Javaの方が、デザインパターンのようなものも累積されているし、さまざまな用途で応用が利く。Rubyでは、Webアプリケーションぐらいしか開発できない。JavaにはSwingもある。それこそ、Rubyなんか後でもできる。そもそも、ひとつの言語だけを使う人間は少ない。僕の知っている本の著者も、.NETをやりながらPerlも使う。Javaをやりながら、必要に応じてRubyも使えば良い。それこそ、C/C++もできないと、JavaやRubyの言語処理系は作れない。C/C++も必要である。そんなに簡単に2つも3つも言語は習得できない。Javaから始めよう。Java基本Java言語の基本。VMという仮想マシンの上でコマンドラインで動きます。Java言語を始めようを参考に執筆・引用しました。WorldJavaプログラムはこんな見た目になります。最初からたくさんのキーワードがでてきますが、最初は「おまじない」だと思うしかないでしょう。簡単な計算ができます。}}同様に、+で足し算、-で引き算、*で掛け算、/で割り算が出来る。変数はC言語と同じように使えますが、ポインタはありません。(ポインタと同じことをしたい場合は、参照型でオブジェクトを操作します。Javaでは基本型は値型、クラスのオブジェクトは参照型として扱われます。}}小数点が切り捨てられるのが嫌な方は、double型を使ってみましょう。while)ifif文。//条件式がfalseのときの処理B}switchswitch文。if文と同様の条件分岐ができます。break;}forfor文。繰り返し処理ができます。//繰り返す処理}whilewhile文。for文と同様の繰り返し処理ができます。//繰り返す処理}メソッドJavaではオブジェクト指向を実現しているため、関数のことをメソッド(直訳すると「手法」)と呼びます。関数のように値を返すよりも、メンバ変数の操作を目的としているからです。(ちなみに、オブジェクトを直訳すると「もの」です。クラスは「階級」、インスタンスは「実例」、フィールドは「野原」、メモリは「記憶」、アドレスは「住所」です。