はね:Java講座1−2「Javaプログラムを書いてみよう」編です。今回は簡単なプログラムの作成をやりたいと思います。
トモ:うぉっしゃぁ!やってやる!ヤッてやる!殺ってやるぜ!
はね:そのテンションの高さが意味不明です。
トモ:ついに、ついにプログラムを書けるんだろう?この時をどれだけ待ったことか。天国の父上、母上見守っていてくだされ。トモは立派なプログラムを書いて見せますぞー。
はね:熱意を持つのは大切ですねえ。それじゃぁ、はじめましょう。
トモ:三度の飯よりプログラム!
はね:それでは
トモ:プログラム!
はね:まずは
トモ:プログラム♪
はね:簡単な
トモ:プログラム?
はね:プログラムを
トモ:ぷ・ろ・ぐ・ら・む!
トモ:うぎゃぁーーーーーーーーーーーーーーーーーーーーーー。
はね:さて、静かになったので先に進めます。
トモ:お、お花畑が・・・グフッ。
はね:まずは簡単なプログラムを書いていくわけですが、その前に作業用のフォルダを用意しましょう。私の場合は、Dドライブ直下にworkというフォルダをおいています。この際は、なるべくフォルダの階層が深くならないほうがいいです。また、デスクトップに作業フォルダを作るのもお勧めしません。デスクトップは結構、階層が深いからです。
トモ:・・・・・。
はね:また、フォルダ名・ファイル名は全て英数字で付けてください。その際、数字から始まるファイル名や、空白を含んだものはダメです。
良い例:
javajava、abc012
よくない例:
1java(数字から始まっている)、java練習(全角文字が含まれている)、java(ex)(英数字以外が使われている)
はね:作業フォルダを確保したら早速プログラムを書いてみましょう。プログラムを書くにはWindows標準のメモ帳(notepad.exe)で十分です。他に使っているテキストエディタ(秀丸など)があるのならそれでも良いでしょう。
トモ:・・・・・・・・・・。
はね:メモ帳を開いたら、次の文を入力してください。文末の「;」(セミコロン、キーボードの「れ」が書いてあるやつです)に注意。Javaでは「;」で行を区切るので、これがないとエラーになります。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }
はね:入力したら、「ファイル」→「名前を付けて保存」を選択します。この際、「ファイルの種類」を「すべてのファイル」にして、ファイル名をHelloWorld.javaとして保存してください。Javaソースの拡張子はjavaです。ちなみにファイル名を変えると動作しないので注意。なお、実際に文字の表示をやっているのはSystem.out.println("Hello world!");
の部分です。そのほかの部分は、今はただ決まり事として覚えておいてください。
トモ:・・・・・・・・・・・・・・・・。
はね:保存が完了したら、コマンドプロンプト(「スタート」→「プログラム」→「アクセサリ」→「コマンドプロンプト」)を起動して、作業フォルダに移動します。[D:\work]に移動するにはまず「D:」と入力してEnterキーを押してDドライブに移動後、「cd work」と入力してEnterキーです。「cd」はフォルダの移動をする命令です。ちなみに「help」と入力するとコマンドプロンプトのヘルプが見れますので活用してください。
トモ:・・・・・・・・・・・・・・・・・・・・・。
はね:作業フォルダに移動したら「javac HelloWorld.java」と入力してEnterキーを押してください。これでコンパイルが行われます。コンパイルが終わると「HelloWorld.class」というファイルが作成されているはずです。これが実際に実行されるクラスファイルになります。
通常、コンパイルといえば機械語への翻訳を指しますが、Javaの場合は、Javaバイトコード(JVMが実行できる中間コード)に変換します。
はね:コンパイルが終わったら「java HelloWorld」と入力してください。(もちろんEnterキー)Hello World!と黒い画面に表示されたら成功です!
トモ:・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ハッ。ここはどこ?私は女優?
はね:そうだ。お前は女優だ。そして今から焼肉を食べに行くところだ。もちろん女優だから豪勢に松坂牛の霜降り肉だ。さぁ、行こう。
トモ:あれ?でもお財布の中には320円しか入ってないよ。
はね:そんなもんツケで余裕だ。女優だからな。
トモ:そっかあ。女優だもんねー。って、んなわけあるくぁああアアア!!!さっきはよくもやってくれたな。お返しに今度ショートケーキのイチゴを食ってやる。
はね:そいつは怖いな。
トモ:ふっ、背後には気を付けな。
はね:分かった。ゴキ○リホイホイをおいとくよ。
トモ:わたし、ゴキブリですか!?
トモ:ところではねクン。プログラムは?
はね:んー、終わった。
トモ:ガッデム!そういえば、黒い画面に白い文字が浮かび上がっている残像が頭に・・・・・・あんなもん私が思い描いていたプログラムではないわぁっ!
はね:次は変数についてやります。
トモ:スルーですか・・・(泣
「あんなもん私が思い描いていたプログラムではないわぁっ!」という方へ。次回からはちゃんと皆さんが思い描いているようなプログラムっぽいことをやります。今回はガマンしてやってください。
はね:変数と言うのは一時的に値を保存する道具だ。数学の変数とはちょっと違うので注意。
トモ:一時的に値を保存。
はね:たとえば次の例を「HelloWorld2.java」として保存して、コマンドプロンプトから「javac HelloWorld2.java」、「java HelloWorld2」として実行してみてくれ。ちなみに「//」より右側はコメントとみなされて処理されないので入力しなくてよろし。
public class HelloWorld2 { public static void main(String[] args) { String str = "Hello world!"; // 変数strに「Hello World!」という文字列を代入 System.out.println( str ); // 変数strを参照して文字を表示 int i = 2000; // 変数iに2000という数値を代入 System.out.println( i + "年問題" ); // 変数iを参照して数値を表示 } }
トモ:Hello world!(改行)2000年問題って表示されたよ。で?
はね:「で?」といわれても困るな。まいっちんぐだ。このプログラムではstrとiが変数だ。
トモ:String str = "Hello world!";
、int i = 2000;
。この「=」で値を入れてるんだね。
はね:そうだ。このように変数に値を入れる事を代入すると言う。また変数を区別するための名前(ここではstrやi)のことを識別子というがこれは特に覚えなくてもよろしい。
トモ:あれ?でもこの「String」とか「int」ってのは何?
はね:それは変数の型(データ型)と言う。基本的な型を下の表に示そう。
boolean | 1ビット | 真偽値 | trueまたはfalse(つまり、0か1か) |
byte | 8ビット | 符号付き整数 | -128〜127(-2の7乗〜+2の7乗-1) |
short | 16ビット | 符号付き整数 | -32768〜32767(-2の15乗〜+2の15乗-1) |
int | 32ビット | 符号付き整数 | -2147483648〜2147483647(-2の31乗〜+2の31乗-1) |
long | 64ビット | 符号付き整数 | -2の63乗〜+2の63乗-1(整数値は略) |
float | 32ビット | (IEEE)浮動小数点数 | ±3.40282347E+38 〜 ±1.40239846E-45(Eは10のべき乗を表す。±10の-45乗〜10の38乗前後を表せるということ) |
double | 64ビット | (IEEE)浮動小数点数 | ±1.79769313486231570E+308 〜 ±4.94065645841246544E-324 |
char | 16ビット | Unicode規格の文字1文字 | \u0000〜\uFFFFまでの文字コード |
String | 可変 | 文字列 | 文字列("こんにちは"などのような""で囲まれた文字)ならなんでもOK |
はね:いろいろあるが、基本的には327とか1568なんていう整数値はint、3.1415や0.33などの小数点数はfloat、文字列だったらStringを使うのがほとんどだからこれだけ覚えておけば十分。Stringだけはちょっと他と性質が違うんだけれども、特に気にしないでもいいだろう。
正確にはString型以外のboolean,byte,short,int,long,float,double,charの7つは基本データ型(プリミティブ型)と呼ばれるデータ型で、Stringは参照型と呼ばれるデータ型になります。プリミティブ型は上記の7つのみですが、参照型は他にも数多くあります。
その違いを一言で言ってしまえば、プリミティブ型の変数は実際にメモリを占有して値を保持する一方で、参照型は特定のメモリ番地へのエイリアスに過ぎない点。これについてはそのうち補講を開きますが、今すぐ知りたいという方は下のページをご参照下さい。
また、整数値はint、小数点数はfloatと適当に書きましたが、それぞれのデータ型には表せる値の範囲が決まっていますので、その範囲より大きい(小さい)値を扱う際はもちろんそれに応じたデータ型を使うことが必要となってきます。
トモ:IEEEとUnicodeってのは?
はね:それらは直接プログラミングには関わってこないのだけれども簡単に説明しておこう。IEEE(アイトリプルイー)は米国電気電子学会のことで、コンピュータの規格を多く定めている。そのIEEEが定めた浮動小数点数の形式をJavaは採用しているというわけだ。また、Unicode(ユニコード)は世界各国の言語を一つの文字コードで表そうとするものだ。世界の主要な言語のほとんどの文字が収録されている。
浮動小数点数というのは、小数点の位置が動く小数のことです。たとえば、数字部分(仮数と呼ぶ)が37038522でも、どの位置に小数点を打つかによって370385.22だったり、0.37038522だったり、37038522000だったりします。
なお、浮動小数点数の反意語は固定小数点数です。たとえば、intやlongは固定小数点数です。(数字の一番右側に小数点があると考える)
トモ:プログラミングに関わってこないなら覚えないでいいや。
はね:む、そういう姿勢はよくないな。とりあえず次は変数を使い回すプログラムだ。例によって「VariableUse.java」として保存、コンパイルして実行してみとくれ。
public class VariableUse { public static void main(String[] args) { int year; // 変数yearをint型で宣言 int month; // 変数monthをint型で宣言 year = 1999; // yearに1999を代入 month = 7; // monthに7を代入 System.out.println( year + "年" + month +"の月、空から恐怖の大王が・・・"); year = 2006; // yearに2006を代入、この際前に入力した1999は削除される month = 6; String country = "ドイツ"; // 宣言と代入を同時に行っている System.out.println(year + "年ワールドカップは" + country + "にて" + month + "月より"); } }
はね:こういう変数(variable)を使うよ、と指示を出すのが宣言だ。一度宣言した変数は何度でも別の値を代入しなおすことができる。
トモ:HelloWorld2.javaでは宣言と代入を同時にやってたわけだね。でもさ、何で変数名 = 値
ってやると変数に値が保存されるの?
はね:ちょっとだけ面倒な話になるので分からない人は読み飛ばしていただいて結構です。まず、変数の宣言(データ型 変数名
)をすると、メモリ上に変数の型に応じた大きさのメモリが確保される。基本データ型の表に書いてあった16ビットとか32ビットというやつだな。
トモ:8ビットで1バイトだよね。
はね:そう。そして変数の宣言によりメモリが確保された後に、代入(変数名 = 値
)が行われると、メモリ上に値が書きこまれる。こうして書き込まれた値を必要に応じて参照しているわけだ。参照ってのは値を読み込むことね。System.out.println( i );
なんてのは変数iを参照してその値を表示している。わかった?
トモ:・・・えーと、もう一回、今度は日本語でお願いします。
はね:おっと悪い、ついついイギリス訛りが出てしまったかな。
トモ:打倒イギリス貴族!
はね:長くなってきたので今回はここまでだ。
トモ:長いわりに内容が薄いという・・・・。
はね:この掛け合いが結構スペースをとってる気がするなぁ。よし、今度からお前来るな。
トモ:開始3回目にして、ワタシお払い箱!?
はね:次回からは実際にゲームを製作しながら、基本的な構文について学んでいきたいと思います。
トモ:また次回!
はね:いや、だからお前来るなって。
トモ:シクシク(涙)
感想をお伝え下さい。このページの3分の2は皆さんからの優しさでできています。あとの3分の1は根性です。
お名前、メールは省略可能です