Java講習.md --- ## 1 はじめの一歩 ### 1.1 プログラムの作成 Javaソースをコンパイルし、バイトコードを生成する。 JDKのコンパイラは`javac`コマンドを使う。 ```sh C:\\JSample\01> javac sample1.java ``` クラスファイルが生成される(sample1.class)。これが、バイトコード。 ### 1.2 プログラムの実行 `java`コマンドを使う。 ```sh C:\\JSample\01> java sample1 ``` `java`コマンドはバイトコード(クラスファイル)を解釈して、プログラムを実行する。 また、Javaのインタプリタのことを**JVM**とも呼ぶ。 クラスファイルがあれば、どのOS上でも同じように動作するのがJavaの強み。 ## 2 Javaの基本 ### 2.1 画面への出力 ```java= class Sample1 { public static void main(String[] args) { System.out.println("ようこそJavaへ!"); System.out.println("Javaをはじめましょう!"); } } ``` 実行結果 ```sh ようこそJavaへ! Javaをはじめましょう! ``` ここで3行目の`ようこそJavaへ!`と4行目の`Javaをはじめましょう!`が出力する文字列で、その前に記述した`System.out`は ==標準出力== (standard output) という、「コンピュータの画面装置」のことを表している。 また、`println`は「文字列を表示する」ということを表している。 そのため、`System.out.println`は ==文字列を画面に出力する処理をしなさい== ということになる。 `ptintln`と`print`がある。 - `println`は最後に改行される。 - `print`はそのまま出力される。 ```java= class Sample1 { public static void main(String[] args) { System.out.print("ようこそJavaへ!"); System.out.print("Javaをはじめましょう!"); } } ``` 実行結果 ```sh ようこそJavaへ!Javaをはじめましょう! ``` ### 2.2 コードの内容 詳しくコードを見てみる #### main()メソッド ```java= // 画面に文字列を表示するプログラム class Sample1 { public static void main(String[] args) { System.out.print("ようこそJavaへ!"); System.out.print("Javaをはじめましょう!"); } } ``` 原則として、mainと記述されている部分(main()メソッド)から処理が始まる。 ```java public static void main(String[] args) ``` - ==ブロック== `{}`で囲まれた部分。 - ==main()メソッド== `main`がついたブロック。 #### 文 - ==文== `;`で区切られた処理。 文は原則として、上から順に実行される。 コードを書くとき、キーワードの間であれば、空白や改行をしても良い。 ```java // 空白をたくさん入れてもいい public static void main (String[] args){ ``` #### インデント コード中で字下げを行うことをインデントという。 インデントを行うことでコードが見やすくなる ```java public class Sample2 { public static void main(String[] args) { System.out.println("Hello world!"); } } ``` 動作はするけど、見づらい... :::info 字下げ(インデント)は大事! ::: エディタ内では==tabキー==でインデントができる。 #### コメント `//`以降の記述はコメントとして解釈される。 ```java // 今日の気分 System.out.println("お寿司食べたい"); // 明日の気分 System.out.println("お寿司をたくさん食べたい"); ``` `/* */`を使うことで複数行のコメントもできる。 ```java /* お寿司ばっかりだと 飽きるから、違うものも食べたい お肉とかお魚とか */ ``` #### クラス ```java class Sample1 { ... } ``` `class`がついたブロックを==クラス==(class)という。`class`の隣の`Sample1`を==クラス名==という :::info Javaのコードは1つ以上のクラスから成り立つ ::: ### 2.3 文字と数値 #### リテラルとは ```java= class Sample3 { public static void main(String[] args) { System.out.println('A'); System.out.println("ようこそJavaへ!"); System.out.println(123); } } ``` リテラルとは :::info 一定の値を表すために用いられる、Javaの単語のようなもの ::: - 文字リテラル - 文字列リテラル - 数値のリテラル #### 文字リテラル ```java 'A' 'a' ' あ ' ``` 1文字を表すには`'`でくくる。 #### エスケープシーケンス キーボードからの入力では表せない文字がある。改行、`'`、`"`など。これらは`\`を最初につけた2つの文字の組み合わせで「1文字」を表すことができる。これを==エスケープシーケンス==と呼ぶ。 |入力値|意味| |---|---| |\t|タブ| |\n|改行| |\'|'| |\"|"| |\\|\| |\xxx|8進数xxxの文字コードを持つ文字(xxxは0~7の数字)| |\uhhhh|16進数hhhhの文字コードを持つ文字(hhhhは0~9の数字、A~Fの英字)| ```java= class Sample4 { public static void main(String[] args) { System.out.println("バックスラッシュ:\\"); System.out.println("\t列を"); System.out.println("\t整える"); } } ``` 実行結果 ``` バックスラッシュ:\ 列を 整える ``` :::info エスケープシーケンスを使うと特殊な文字をあらわすことができる ::: #### 文字コード コンピュータ内では、文字も数値で扱われる。各文字に対応する数値を==文字コード==と呼ぶ。Javaでは、==Unicode==と呼ばれる文字コードが使われている。 エスケープシーケンスの「\xxx」や「\uhhhh」を出力すると、指定した文字コードに対応する文字が出力される。 ```java= class Sample5 { public static void main(String[] args) { System.out.println("8進数101の文字は\101です。"); System.out.println("16進数0061の文字は\u0061です。"); System.out.println("16進数3042の文字は\u3042です。"); } } ``` 0x0061 = 97 0x3042 = 12354 #### 文字列リテラル 複数の文字の並びを==文字列リテラル==という。 `"`でくくる ```java "Hello" "プラス" "12345" ``` #### 数値リテラル - 整数リテラル(integer literal):`1`、`2`、`999`など - 浮動小数点リテラル(floating-point literal):`2.1`、`3.14`など 整数リテラルの表記法 - 8進数表記 - 10進数表記 - 16進数表記 ```java 10 // 10進数 10 010 // 8進数 8 0x10 // 16進数 16 0xF // 16進数 15 ``` いろいろな表現方法で出力してみる ```java= public class Sample6 { public static void main(String[] args) { System.out.println("8進数の10は" + 010 + "です。"); System.out.println("10進数の10は" + 010 + "です。"); System.out.println("16進数の10は" + 0x10 + "です。"); } } ``` 実行結果 ```sh 8進数の10は8です。 10進数の10は10です。 16進数の10は16です。 ``` ### キーワード :::success 画面への出力 main()メソッド ブロック コメント クラス リテラル エスケープシーケンス ::: ### 練習問題 ==a-1.== 文字や数値などを使って、次のように画面に出力するコードを記述してください。 ``` 123 100円もらった お寿司食べたい ``` ==a-2.== 「タブ」記号をあらわすエスケープシーケンス(\t)を使って、次のように画面に出力するコードを記述してください。 ``` こ ん に ち は ``` ## 3 変数 ### 3.1 変数 値を記憶しておくための箱 変数はコンピュータのメモリという装置を利用して値を記憶している。 コードの中で変数を使うには以下の2つのことを決めなければならない 1. 変数に「名前」をつける 1. 変数の「型」をつける ### 3.2 識別子 ==識別子==とは、変数の名前として使える文字や数字の組み合わせのこと 識別子の規約 - 通常、英字・数字・アンダースコア(`_`)・`$`などを使う - 長さの制限はない - キーワードは使えない。例)`class`、`return`など - 数字で始めることはできない - 大文字と小文字は区別される 識別子の例 ``` num tmp_str print_hello str2 ``` ### 3.3 型 値にはいつくか種類がある。変数にどんな値の種類(==データ型==、==型==)を格納するのかを指定する。 Javaには以下のような、基本的な型(基本型)がある。 |名前|値の範囲| |---|---| |boolean|true または false| |char|2バイト文字(\u0000 〜 \uffff)| |byte|1バイト整数(-128 〜 127)| |short|2バイト整数(-32768 〜 32767)| |int|4バイト整数(-2147483648 〜 2147483647)| |long|8バイト整数(-9223372036854775808 〜 9223372036854775807)| |float|4バイト単精度浮動小数点数| |double|8バイト単精度浮動小数点数| ### 3.4 変数の宣言 :::warning 型名 識別子; ::: 実際のコード ```java= int num; char c; double db, dd; ``` :::info 変数は型と名前を指定して宣言する ::: ### 3.5 変数の利用 #### 値の代入 変数に特定の値を記憶させること。`=`を使って、記述する。 ```java num = 3; ``` :::warning 変数名 = 式; ::: 代入を使ったコード ```java= class Sample7 { public static void main(String[] args) { int num; num = 3; System.out.println("変数numの値は" + num + "です。"); } } ``` 実行結果 ``` 変数numの値は3です。 ``` #### 値の出力 ``` num ``` のように変数名だけを記述すると、変数に格納されている値が取り出される。 #### 変数の初期化 ```java int num; num = 3; ``` というように宣言と代入を分けていた。 Javaの場合、 **宣言と同時に値を格納することもできる** このことを==変数を初期化する==という。 以下のように1行で記述できる。 ```java int num = 3; ``` もし、初期化せずに変数の値を取り出そうとした場合、エラーになる。 ```java= class Sample8 { public static void main(String[] args) { int num; // numに値を設定する前に使用しているため、エラーになる System.out.println("変数numの値は" + num + "です。"); } } ``` Eclipseの場合 ``` Exception in thread "main" java.lang.Error: Unresolved compilation problem: ローカル変数 num が初期化されていない可能性があります ``` #### 値を変更 変数内の値を変更(上書き)することができる。 ```java= class Sample9 { public static void main(String[] args) { int num = 3; System.out.println("変数numの値は" + num + "です。"); num = 9; System.out.println("変数numの値は" + num + "です。"); } } ``` 実行結果 ``` 変数numの値は3です。 変数numの値は9です。 ``` 変数に値を代入することで、変数の値を変更できる。 #### 他の変数の値を代入する ```java= class Sample10 { public static void main(String[] args) { int num1 = 3; int num2; System.out.println("変数num1の値は" + num1 + "です。"); num2 = num1; System.out.println("変数num2の値は" + num2 + "です。"); } } ``` 実行結果 ```java 変数num1の値は3です。 変数num2の値は3です。 ``` 6行目で`num2`に「`num1`の値」を代入している #### 変数の宣言の注意点 ブロックの中では、同じ変数名の変数は宣言できない ```java class Sample11 { public static void main(String[] args) { int num1; // エラーになる int num1; // 型が異なっても、エラーになる double num1; } } ``` ### 練習問題 ==b-1== 以下のコードを埋めて、最終結果を出力するコードを記述してください。 ``` あなたの名前はなんですか? たろう ⤵ あなたの名前はたろうです。 ``` ==b-2== 次のように画面に出力するコードを記述してください。 ``` 円周率の値はいくつですか? 3.14 ⤵ 円周率の値は3.14です。 ```