Java入門スタート

2回にわたって、Javaについて、書いてきました。
でも、内容的に、Javaを、少しだけ知っている人向け、、
そんな感じだったのですが、ここから、初めてJavaを、学習する人向けに、書いていこうと思います。

ただ、Javaの場合、スタート時点から、いきなり覚えることがあります。しかも、昔の私のように、英語のレベルが低い方には、かなり、暗記することが、大変だと思われます。
それで、もっと、簡単な方法はないのか?
と、思われる方も多いでしょう。
でも、まず、右のコードを、丸暗記するしかないことを、分かっていただくために、前2回を、読んでいただけたらと思います。

右のコードは、やや、イメージコードで、やや、Python風にして見ました。 これが、正確なコードです。

この部分の暗記を支援するために、 簡単なチェック用プログラム を、作りました。 いまいちだとは思いますが、ないよりはいいと思いますので、活用していただけたらと思います。 このプログラムでは、文字入力の際に、今までの、入力履歴が表示されてしまいます。その部分は、直せませんでした。。。 と、思ったのですが、これは、「IME 日本語入力ソフト」のせいでした。
私は、日本語入力も、英数字半角入力も、「Shiftキーで切り替える」設定にしているので、英語入力時にも、「変換候補」が現れます。
全然それを思いつきませんでした。ですので、Windowsの場合、 半角文字入力(「A」の文字になっている)で 、やれば、変換候補は、現れません。どうも失礼いたしました。 ただ、、"文字列" という文字をタイプするときは、変換候補が出てしまうので、 プログラムを、この先頻繁に出てくる、「Stringオブジェクト」を、私の勝手な使い方ですが、「StringObj」として、プログラムを変更しました。よろしくお願いします。

では、このコードを、簡単に、あくまで簡単に、、理解してみましょう。レッスンが進めば、ある程度というか、ほぼ完全に理解できるようになるのですが、現状では、難しすぎるのと、、、また、後から説明します。

この、AruClass.java のコード を、完璧に理解するのは、無理だということを、簡単に、説明しようと思っていたのですが、2つの「コーヒータイム」を、読んでいただけたら、Javaプログラマーとして、どこまで理解すればいいかを、私なりに書いてみました。私としては、もう悩むべきは、とりあえずないと思っています。
ただこれは、Javaを始めたばかりの人には、理解できない話です。 今は、これから説明する部分のみ理解すれば、問題ありません。


class AruClass { }

Javaプログラムは、すべてが、クラス です。
もう一度、言います。すべてが class なのです。ですから、Javaのコードは、

	class ~{
		・	・	・
	}
の、集まりと言えます。

Javaは、これが、長所であり、欠点かもしれません。
大きなプログラムを書く場合、このことが、複雑過ぎ にならないように、大いに助けてくれます。
コードが長くなってきたら、無理に、長くせず、新しい class を作って、見通しをよくしようというのが、人情というものでしょう。
つまり、文法自体が、複雑さから回避する方法をとらせています。
欠点というのは、、例えば、そんなに長くないプログラムの場合、わざわざ、「クラスの宣言」をするのは、疲れると思われます、、ということです。
ですから、Javaを学びたい人は、複雑めで、大きめな、クールなプログラムを作りたい人が学ぶべきともいえそうです。
また、PythonやSwiftのように、コード自体がクールそうに見えることは、私は気にしません。「コードの見かけが」クールかが、気になるのは、プログラマーだけなのです。
また、ひょっとして、将来、IDEやエディタが進化して、 Javaの長いコードが(昔は画期的に短かった!)、簡単に書けるようになれば、全てを、classにするのが、はやるかもしれません???


pubic static void main(String[] args) { }

これは、アプレット/Applet 以外のプログラムにおいて、まず、最初に実行されるプログラムを、書く部分です。どの部分かというと、
 { と } の、間
に書きます。 これも、覚えるのが大変そうです。個々の単語の大体の意味に関しては、前回説明しました。しかし、あれで、少しは覚えやすくなると思いますが、そのあとは、丸暗記してしまうのが、ベストな方法だと思います。まず、この意味が自然にわかるには、相当長い時間、Javaに、親しまないと、ピンとこないと思います。Javaの場合、これを無条件で暗記することに、意味はあるのです!
そうはいっても、少しでも、「意味付け」が、あった方が、覚えやすいです。この日本語のイメージコードを、見てみましょう。これが、先ほどのコードの大まかな意味を表しています。
このことについて、どう考えれば、納得していただけるか、ちょっと考えてみました。
こんな風に考えてみましょう。英語には、英熟語 というものがあります。
例えば、今調べたのですが、
  go about A = Aをし始める
という、熟語がありますが、よほど英語力がある人以外は、
  go about A の意味を、想像できないでしょうから、これは、暗記するしかありませんね。 こんな風にここでも、
  プログラムスタート() = public static void main(String[] args)
のように、考えてみましょう。
こう考えれば、
無条件で暗記するすることに、意味があると思えると思います。
そして、こう考えてでも、覚えるのは、Java言語にそれだけの価値があると思えるからです。これは、Java人気から考えても、納得していただけると思いますが、私も、第6感的にですが、それだけの価値があると思います。
例えば、今人気の、IntelliJ の、IDEですが、調べた記事を信用するならば、あれは、JavaのSwingを使って、しかも、サードパーティー の、ライブラリを使わずに、作られているそうです。
Javaの実力だと思います。
サードパーティーのライブラリを使うとは、例えば、JavaScriptで、jQueryを使うようなものでしょう。
jQueryは、今や、どちらかと言えば、標準ライブラリな感覚ですが。

話が長くなりましたが、言いたいことは一つだけです。
  public static void main(String[] args)
を、暗記してください。


System.out.println("文字列");

これに関しても、もう長々と話をしても、しょうがないでしょう。(日本語のイメージコード
  プリントできるオブジェクト.println("文字列"); = System.out.println("文字列");
こう考えれば、OKです。

.」が、気になるかもしれませんが、そのことについても、学習する予定です。

簡単に説明しますと、例えば、
  class ドンキーコング{
    整数値タイプの変数 身長:170;
    本当or嘘タイプの変数 性格が優しい:本当;
    文字型変数 服の色:"赤";     

    ジャンプメソッド(){
      // ジャンプするコード
    }
  }
は、ドンキーコングの設計図です(class)。

これから、実物/インスタンス(オブジェクト)を、作るには、
  ドンキーコング donkey = new ドンキーコング();
のようなイメージコードで作成します。

そして、インスタンス化/オブジェクト化 された、ドンキーコングのオブジェクトから、
  donkey.ジャンプメソッド();
のようなコードを、書くと、コングさんは、ジャンプします。
まあ、こんな感じだと思ってください。
本物のコードでの詳細は、後から学習します。
こんなところで、Java入門の最初のチャプターを終了したいと思います。



 ・・・ ☕ コーヒータイム ☕ ・・・
前回書いた、out は、いつ初期化されるのか?という疑問が、解けました
ドキュメントには、
  このストリームはすでに開いていて、入力データの供給が可能です。
こんな説明があります。
この説明は、現実的であるようで、プログラマ初心者には、優しくありません。
私としては、
  out は、PrintStream型 であり、しかも、static で、
  修飾されています(飾られています)。
  ですから、初期化しなくても、オブジェクト/インスタンス として、使えるのです。
    / public static final PrintStream out
こんな説明があれば、Java文法の新しい側面を知るとともに、よく納得できたと思います。
まあ、そして、それ以上の、深追いは、Javaを使っていくにあたっては、それほど必要ないと思われますので、こんなところで納得したかと思います。
まあ、どんな説明が、ベストなのかは、プログラマーのレベルにもよりますので、仕方ないかも知れません。
でも、たぶん、私が書いた説明のほうが、分かりやすい人が多いと思います。
なぜなら、このことを、ググると、よくヒットするということは、疑問を持っている人が多いと思うからです。
こんなところで、「コーヒータイム」を、終えようとしましたが、もう一つ面白い記事を、発見しましたので、それを、実験コードとともに、見ていただき、終わりにしようと思います。


 ・・・ ☕ コーヒータイム2 ☕ ・・・
  PrintStreamオブジェクト イコール System.out である!
このことを証明するコードを見つけました。
ですので、それを使ったコードを、書いてみました。
こんな結果になりました。
つまり、「System.out.println("文字列");」に関して、Javaプログラマーの立場からは、もうこれ以上追求する必要はない(前回の話より)気がします。
別の立場であれば、分かりませんが、Javaプログラマーとしては、普通、ここまで分かっていればいいと思います。



P.S.
また、これは、今思っていることですが、例えば、
 byte, short, float, char
などの変数のタイプが、Javaには、ありますが、
 int, double, String タイプ を、やれば、Javaの理解や、普通書くプログラムでは、困らないのでは、と思っています。
そんなところは、はしょって/パスして 書いていこうと思っています。
または、☕タイム として書こうと思います。
今書いたことも、???の人も多いと思われますが、気にしないでください。そのうち分かります。

P.S.2:
このJava学習ページを、よりよくするために、ちょっと考えがあります。
それで、しばらく、間が空きますが、また、続きを書くつもりです。
私の思惑が失敗したら、何もなかったかのように、続きを書いていきますので、よろしくお願いします。
(遅くても、8月中/9月前 には、再開します。)

PS.3rd:
Javaのおいしいところだけ、取り出して、取り上げていこうと思いましたが、
やはり、私には、力不足でした。
そもそも、私が、再学習しようとしているのに、無理ですわ。
ということで、また、地道に、細かいことも、含めて、学習していきましょう。
その中で、例えば、byteは、データ型として習うけど、
それを使ったサンプルコードなんか見たことないぞ、みんな「int」ばかりです。 などのように、「参考になるかもしれないコメント」を、はさむのが、精一杯でしょう。

ただ、復習テストのための、新しい問題集を、作りました。 私のページを見たことのある人は、まあ、いままでで、一番ましだと思われます。

ということで、連休(後)ぐらいに、再開したいです。 えっ、連休に勉強するのですかという人もいるかもしれませんが、 私は、好きでやっているだけです。そして、Alexa Traffic Rank が、 少しでも上がっていくのが、楽しいです。
こう書くと、私が、起業を目指していると思われるかもしれませんが、 「ハイリスクな起業」など、全くやるつもりはありません。。 でも、もし、思いがけなく、いいアプリができたら、例えば、vector などで、委託販売してもらったりするかもです。 まあとにかく、私の技術の向上を、あっ、もちろん、皆様の技術の向上も、目指して頑張って書いていきます。