サイトマップはこちら
はじめてのJava
はじめてJava言語を使用してプログラミングを始めようとしている方向けです。Javaというプログラミング言語はC言語から生まれた言語で、現在(2020-11-11)は多くのアプリケーションで使用されています。具体的には以下のようなものに使用されています。
- 証券の取引や銀行のATMなど
- Androidアプリ
- 大手企業の基幹系システム
挙げればきりがないので、この辺にしておきますが、日本では多くの分野で使用されています。
有名なところだと、マインクラフトでもLWJGLというフレームワーク(Java製)を使用しています。下のような感じで動かせます。
Javaを動かしてみよう
Javaは以下のように、コードの作成~コンパイル~実行と行います。
- Javaコードを人力で書く(人間が読めるファイルができる)
- コンパイルする(人間が読めないファイルができる)
- 作成したプログラム実行
Hello World
まずは写経から入ります。以下のコードを書き写して動かしてみてください。
public class FirstCls {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
実行方法は以下の通り
-
上のコードを写してFirstCls.javaファイルを作成する
-
「ウィンドウズボタン+R」を押下してコマンドプロンプトを開く
-
javacコマンドでクラスファイルを作成する
javac FirstCls.java
-
javaコマンドで作成したクラスファイルを事項する
java FirstCls
説明した動画です。Java Seapch APIを使用しています。ちょっと聞きづらいですが。。。
サンプルアプリ
-
以下のZIPファイルをダウンロード
-
展開後に/xylophone/src/xylophone/Xylophone.javaをEclipseプロジェクトにコピー、実行できるようにする
-
Eclipseプロジェクト/resporces/の下に/xylophone/src/xylophone/audioをコピー
-
実行 ※エラーが出たら以下の部分を直してみる
Xylophone.java:67行目にエラーが出たときnew AudioClip(Xylophone.class.getResource("audio/Note1.wav").toString());
の「audio/Note1.wav」を「/audio/Note1.wav」に修正してみる
1章:ようこそJavaの世界へ
1.1 Javaによる開発の基礎知識
1.1.1 開発の流れ
①ソースコードの作成。
public class FirstCls {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
②コンパイル
javaファイルをclassファイルに変換することです。下のコマンドを使用します。
javac FirstCls.java
③実行
作成したクラスファイルを実行します。下のコマンドを使用します。
java FirstCls
1.1.2 開発環境の整備
※Eclipseはインストール済みの想定。Eclipseのインストールはこちらを参照ください。
外観を変更する
- ウィンドウ→設定→一般→外観→色とテーマの順にクリック
- ここで好きなテーマを選択する
※大半の人がデフォルトで使用している
文字コードの変更(確認)
- ウィンドウ→設定→一般→ワークスペースの順にクリック
- 「テキスト・ファイル・エンコード」がUTF-8になっていることを確認
JDKの確認
- ウィンドウ→設定→一般→Java→インストール済みのJREの順にクリック
- JDKを指定して、使用するJREを決定する
1.2 Javaプログラムの基本構造
1.2.1 プログラムの骨格
ルール:クラス名とファイル名は同じ名前にする
「クラスの中にメソッドがある」
/** クラスの説明 */
public class クラス名 {
/** メソッドの説明 */
public static void main(String[] args) {
// 何かしらの処理
}
}
-
中かっこ(「{」「}」)のことを「スコープ」と呼びます。スコープで囲っている部分を「ブロック」などと呼んだりします。
-
このスコープ(=「ブロック」)を開いたら(開始したら)、必ず閉じる(終了する)ことを意識する
-
中かっこ(「{」「}」)で囲っている部分がそれぞれクラスの範囲、メソッドの範囲を決めている
上のサンプルコードでは「クラス名」クラスの中に「メインメソッド」がある
ちなみに、インデント(スペースやタブで位置をずらすこと)を入れないと、とても見にくい
何が見にくいというと、クラスの範囲と、メソッドの範囲を区別しずらいのです。
<インデントなし>
/** クラスの説明 */
public class クラス名 {
/** メソッドの説明 */
public static void main(String[] args) {
// 何かしらの処理
}
}
1.2.2 プログラムの書き方
Java言語(C言語も)の場合は、メインメソッドが起動しますので、クラスの中にメインメソッドを作成する
Javaはメインメソッドが動く
- どのようなプログラムを作りたいかを考えます。
- プログラムの名前を決めます。
- 「クラス名.java」という名前でファイルを作ります。
- 下のような、ソースコードの外側を記述します。
/** クラスのJavaDocコメント */ public class クラス名 { /** メインメソッドのJavaDocコメント */ public static void main(String[] args) { // 処理の中身:通常のコメント /* * これも通常のコメント、あまり使われない。 */ } }
- ソースコードの中身を描きます。
System.out.println("Hello World!");
1.2.5 mainメソッドの中身
- 上の骨格の「何かしらの処理」の部分に処理を描く。
- 処理は上から下へ進み、1行の中では左から右へ進む
- セミコロン「;」で1行が終わる
- ドット「.」は参照呼出し
public static void main(String[] args) {
System.out.println("Hello World");
}
上のコードは、Systemクラスから変数「out」を呼び出し、メソッド「println()」を呼び出している
練習:SecondProgram
写してください。以下のコードを書いて動かしてください。
public class SecondCls {
public static void main(String[] args) {
System.out.println("*** Second Program ***");
System.out.println("日記ソフト");
System.out.println("終了します。");
}
}
実行方法は以下の通り
-
SecondCls.javaファイルを作成する
-
「ウィンドウズボタン+R」を押下してコマンドプロンプトを開く
-
javacコマンドでクラスファイルを作成する
javac SecondCls.java
-
javaコマンドで作成したクラスファイルを事項する
java SecondCls
1.3 変数宣言の文
1.3.1 変数宣言の文とは?
ズバリ下のように書きます。
- 変数の宣言
// 「宣言」:データ型 変数名; int hensuMei;
- 変数の初期化
// 「初期化」データ型 変数名 = 代入するデータ int dataGata = 0;
1と2の違いは、宣言と同時に値を代入するかしないかです。
==変数の宣言と初期化==
public static void main(String[] args) {
// 変数の宣言
int num;
// 変数の代入
num = 0;
// 変数の初期化
int age = 12;
// 命令実行の文=メソッドの呼び出し
System.out.println("対象年齢は" + num + "~" + age + "です。");
}
- 「変数に値を代入するとき」は「=」を使用する。
- 「命令の文」は「メソッド呼び出し」を行う
1.3.2 変数の名前(識別子)
==英語では==
変数=Valiable
名前つけのルール
- 予約語は使用できない
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | short | static | strictfp | super |
switch | synchrnized | this | throw | throws |
transient | try | void | volatile | while |
-
宣言(初期化)済みの変数名は使用できない
-
大文字・小文字は区別される
-
変数名・メソッド名はキャメルケースを使用する
// 変数名のキャメルケース(頭を小文字にする) int myAge; // メソッド名のキャメルケース(頭を小文字にする) public void methodName();
-
クラス名はアッパーキャメルケース
/** クラス名は頭を大文字にする */ public class ClassName { }
-
演算子で使用している文字、予約語は変数名(クラス名)として使用できない
==計算処理==
public static void main(String[] args) {
// 足し算
int tashizan = 1 + 1;
// 引き算
int hikizan = 1-1;
// 掛け算
int kakezan = 1 * 1;
// 割り算
int warizan = 1 / 1;
}
1.3.3 データ型
※あくまでも使用例として紹介しています。
==プリミティブ型データの変数型==
- byte ファイル・ネットワーク通信時に使用
- >int 整数データを格納するのに使用
- long 大きな整数値を格納するのに使用
- float 画像処理、3Dモデル描画時に使用
- >double 少数データを格納するのに使用
- char 1文字分のデータ、シングルクォーテーション「`」で囲む
==参照型データの変数型==
- String 文字列
- そのほかJavaAPIや自作のクラス名
List<String> list; // List型の変数「list」
1.3.5 定数の利用
変数には値を何度でも代入できるので、定数を使用して値を変更できないようにする。
final データ型 変数名 = 代入するデータ
ルール:定数は大文字の変数名にする
final int OVER_TEN = 0; // 値が10以上を示すフラグ
final int UNDER_TEN = 1; // 値が10以下を示すフラグ
定数の使用例:フラグに使う
public static void main(String[] args) {
}
1.5 練習問題+α
コマンドプロンプト上に下のような図を表示するプログラムを作成してください。
※ 「=」の数が、上下ともに20あります。
<出力する図>
*
* *
* * *
*
*
* * *
* *
*
式と演算子
演算子
番号 | 演算子 | 意味 |
---|---|---|
1 | .(ドット) | メソッド、フィールドの呼び出し |
2 | new | クラスのインスタンスを作成するときに使用する |
3 | == | 左右の数値が等しいか判定する(TRUE / FALSEを返す) |
4 | != | 左右の数値が等しくないか判定する(TRUE / FALSEを返す) |
5 | & | ビット演算 AND =「~かつ~」のときTRUE、それ以外はFALSE」 |
6 | | | ビット演算 OR =「~または~」のときTRUE、両方ともFALSEの場合はFALSE |
7 | ? XX : YY | 三項演算子 =「論理演算 ? TRUEの時の値 : FALSEの時の値」: 例 String res = 1 == 1 ? "TRUEの場合": "FALSEの場合"; |
2.2 オペランド
2.2.1 リテラル
実際の値のこと
2.2.2 エスケープシーケンス
バックスラッシュ「\」もしくは、「¥」円記号(半角)をつけた文字のことでメタ文字を「文字」として使いたいときに使用する。
<例>
// 「"」は文字列を加工形で表示するためにエスケープシーケンスを使用する
// ※「"」を文字列として使用したいときは「エスケープ」する
String moji = "Javaのはじめの\"J\"は1文字目";
2.3 評価のしくみ
下のような式があったとします。
「1 + 5 -3」この式をプログラムで書くと次のコードになります。
public static void main(String[] args) {
// 上の計算式
int answer = 1 + 5 - 3;
}
このようなときに、処理の順序、「1 + 5」と「5 - 1」の評価はどのように行われるか?
左から順に評価していきます
つまり、以下の順序です。
- 1 + 5の計算結果を出す
- 上の結果に」「-1」する
==しかし掛け算は先に処理を行う
つまり以下のような優先順位で評価します。
- 「掛け算・割り算」→「足し算・引き算」の順序
- 左から順に評価
まとめると
- 「掛け算・割り算」→「足し算・引き算」の順序で評価
- 「=」以外の演算子は、左から順に評価
- 「=」は右から評価
問題+α
以下のコードの場合、どのような順序で評価されるでしょうか?
System.out.println("Hello World!");
実行順序として正しいものを、~の中から選びなさい
<A>
- Systemクラスの公開フィールド変数out(PrintStreamクラス)を取得
- フィールド変数out(PrintStreamクラス)のメソッドprintln()を評価(呼び出している)
<B>
- メソッドprintln()を取得
- フィールド変数out(PrintStreamクラス)のSystemを評価(呼び出している)
2.4 演算子
2.4.1 算術演算子
演算子 | 機能 | 優先順位 |
---|---|---|
+ | 足し算 | 中 |
- | 引き算 | 中 |
* | 掛け算 | 高 |
/ | 割り算 | 高 |
2.5 型の変換
2.5.3 強制的な型変換(キャスト)
「int型」を「double型」に変換するというような形のキャスト
<具体例>
int num = 10;
// 強制的な型変換
double dd = (doubble) num;
// 下のやり方はエラーになる
// int num1 = (int) "10";
// 型をメソッドを使用して変換している
String tmp = String.valueOf(num);
// Stringが票差化された(左に文字列が先にある)あとであれば
// intやdoubleも文字列として評価される(自動キャスト)
System.out.println("aaaa" + 10.1);
異なる型同士の算術演算
返却値(左側の変数型)は、大きいほうの型のデータ型が優先される
2.6 命令実行の文
2.6.5 乱数を生み出して代入する命令
// 3を上限値として乱数を生成する
int r = new java.util.Random().nexInt(3);
上にあるような「java.XXX.XXX」のようなパッケージはJDKの中にあるライブラリに定義されています。
そして、それらAPI群の使い方に関してはJavaDocに書かれています。
2.7 まとめ
命令の実行はメソッド呼び出しのこと
public static void main(String[] args) {
// 命令(メソッド)呼び出し
hello();
}
public static void hello() {
System.out.println("Hello World!");
}