frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

主にキャスト。

今日も英会話、

そして、JAVA講座もあるのでした。

いやぁ、木曜日は忙しいなぁ…。

英会話は落ち込みまくり、

JAVAは初歩だから楽勝って感じなんですが。

JAVAもそのうち難しくなるだろうから

早いところ英会話で余裕が出来るようにならねばなぁ。

なにはともあれ。

今日もperlPHPを知っている私から見て

新鮮だったJAVAのルールをメモっておきまーす。

って、まだ習ってる途中だけに

内容が混乱してますが(^^;

・キャスト(型変換)

 JAVAの変数にはデータ型があるので

 perlPHPみたいに、1つの変数に

 数字を入れてみたり、文字列を入れてみたり

 気まぐれにデータの種類を変えて代入する事は出来ない訳ですが。

 データ型が違う変数同士を、代入したりする場合

 キャスト(型変換)が必要になる模様。

 例えば、浮動小数点型(double)の変数を

 整数型(int)の変数に入れる場合。

 例) double testDouble = 1.2345;

    // この testDouble を整数型 testInt に入れる場合

    int testInt = (int)testDouble;

 この時、testDouble の小数点以下は切り捨てられて、

 testInt には 1 が代入される。

 逆に整数型を浮動小数点型に入れる場合は

 キャストをする必要がない。

 つまりデータ型の情報量の多い方から、少ない方に入れる場合は

 キャストしなくていいんだってさ。

 例) int testInt = 1;

    // この testInt を整数型 testDouble に入れる場合

    double testDouble = testInt;

 この場合、testDouble には

 testInt の 1 に小数点をつけた、1.0 が代入されるらしい。

 double の方が int より情報量が多いって感覚が

 つかみにくい気もするけど、

 確かに、1.1 も 1.456 も 1.9832 も全て 1 として扱うより(int型)

 それぞれちゃんと、1.1, 1.456, 1.9832 と区別して扱う方が(double型)

 情報量多いよね。

 ちなみに、String型(文字列)を数字として扱う時のキャストは?ってーと

 それは別の関数があるらしい。

Eclipseで実行時に引数を持たす方法

 実行したいスクリプトを左側のパッケージ一覧から選び、

 右クリックするなりして、メニューを表示させ

 「実行」の「実行...」を選択すると、引数を設定できるウインドウが開く。

Eclipseでの実行ショートカット

 Shiftキー + Altキー + X を押した後、

 JAVAを実行する場合は、J を押す。

 ※我が家のEclipseではショートカットがありませんでした…。

・関数(メソッド)の作り方

 先走って授業中予習してみたところ、

 ちょっとわかった事は以下の法則。

 修飾子 戻り値のデータ型 関数名( 引数のデータ型 引数変数名 ) {

    実行内容

 }

 戻り値は、perlPHP 同様、return の後に書けばいいんだけど、

 return の後にスクリプトを書くと

 コンパイルエラーになるっぽい。

 switch文中に、return の後、break を書いたらエラった(^^;

 あと戻り値のデータ型を関数の頭で宣言するのも

 perlPHPとは違う部分だけど、

 戻り値がない場合はどうするのか?ってーと、

 void と書くそうな。

 修飾子については、なんやいろいろ種類があるらしいので

 その辺りは後で詳しく習うとして。

 とにかく、JAVAで何か書こうとすると、必ず最初に…

 class クラス名 {

  public static void main(String[] args){

  }

 }

 …って書かないとアカンのだけど、

 main はコンストラクタで、

 戻り値がなくて、引数は文字列の配列って事なのか?

修正:

必ずmainを書かないといけないんじゃなくて、

授業中クラスを作る際にメソッド・スタブでmainの所にチェックしてるから

mainが書かれているだけなのでした(^^;

おまけに、mainはコンストラクタとは呼ばない訳で

Javaでもコンストラクタは、クラス名と同じ名前で作る模様。

 修飾子 public は「どこからでも呼び出し可能な関数」で

 static は「静的メソッド」と呼ばれる関数になって

 「インスタンスしなくても外部から使える」ようになるらしい。

 なんとなく腑に落ちた。

・復習:インスタンスって、何だっけ?(^^;

  $object = new クラス名();

 …とかって、やってる↑この部分。

 クラスを呼び出す側の

 「これからクラス使いまっせ〜って」宣言してるところ。

 perlPHP でもインスタンスするけど

 class内で宣言した関数は、

 確か必ずインスタンスして、

  $object->関数名();

 …とかって、呼び出さないとアカンかったような。

 で、ややこしいのは、

 JAVAは packageの中に必ずclassが入っているっぽいんだけど(?)

 perlは packageの中に、関数しか入ってない場合があるって事。

 packageして、ライブラリやらモジュール作っても

 関数しか入ってない場合、

 それらの関数は

  package名::関数();

 …と呼べたと記憶していますが。

 JAVAの上記の修飾子が static な関数は

 インスタンスしなくても使えるって事は、

  クラス名.関数名

 …って、いきなり呼べば使えちゃうらしい。

てなこったで。

こんなもんかなぁ、perlPHP と違うなって思った箇所は。

まだまだ perlPHP もへなちょこレベルなんで

単に知らないだけで、実はJAVAじゃなくても

存在するルールだったりするかもしれないけど(苦笑)

なにはともあれ、続きはまた火曜日です(^^)

わくわく。

おまけ。

Perlでオブジェクト指向 by Amateras FreeArea

このように、Perlでのインスタンスは実は普通の変数です。そのため、メソッドを介さずにインスタンスの内部状態を操作することができてしまいます。

なるほど、確かにその通りかも。

だから、あんまりクラスの中に関数を書くメリットを感じないんだわねぇ。