IntelliJ IDEAでJavaのプログラム作成して実行するための基礎知識
- 本講義では最初から「パッケージ(教科書P.164)」を用いる。同じクラス名であってもパッケージが違えば区別できる。
- 「src」を右クリック→New→Package→「d00000.lecture04」と入力(d00000はユーザ名)しOKをクリック
- Print.java(教科書P.4)をIntelliJで作成して実行しよう。
- 対象のパッケージを右クリック→New→Java Class
- mainメソッドの中身を追記する。
- IntelliJで作成したPrint.java
- 教科書との違い
- 1行目: package宣言がある。
- 3行目: classの前にpublicが付いている。
- ポイント
- Cの場合はmain関数から実行が開始されるが、Javaの場合はクラスの中に定義されたmainメソッドが実行の起点となる。
- mainメソッドの定義には「public static」がつく。とりあえずつけておく(今後、解説)。
IntelliJ IDEAでよく使う機能(使って欲しい機能)
- Rerformat Code(インデントを整える等、ソースースコードを綺麗に整形する): Alt + Ctrl + L
- Rename(変数やメソッド等の名前を変更する):対象にカーソルがある状態でShift + F6
Android StudioはIntelliJ IDEAがベースであり、操作方法はほぼ同じなので参考になる。
変数・演算子・制御文
変数・演算子・制御文について、C言語との違いを中心に。詳しくは教科書を参照すること。
注: 「だいたい同じ」とは「(些細な)違いがある」ということなので全く同じと思わないこと。
実際に実行してみるとわかりやすい。確認用のクラス(例えばSandbox.javaのように)を作って確かめながら進めよう。
変数(教科書P.8〜)
数値(教科書P.10)
C言語において、数値を格納する変数の型はint、long、float、double。Java言語でもだいたい同じ。
文字(教科書P.12)
C言語で文字はchar型を使う。文字をシングルクォーテーションで囲むことによって文字を表現する。
1 |
char v = 'a'; |
これで、変数vには文字「a」が代入される(正確には文字「a」の文字コードである97が代入される。つまりcharは整数型)。
Java言語でもだいたい同じ。
文字列(教科書P.13)
C言語ではchar型の配列として扱う。
Java言語ではString型を使う。
1 |
String s = "こんにちは"; |
「+」で連結することができる(教科書P.13)。
boolean型(教科書P.34)
C言語では、真偽を表すのにint型を使い、真が0以外、偽が0としてきた。
例えば、
1 |
int a = (1 > 2); |
とした場合、aには0が格納される。
Java言語には真偽を表すboolean型(論理型)がある。boolean型は値としてtrue(真)かfalse(偽)をとる。比較演算子や論理演算子はboolean型を返す演算子ということに注意する(演算子については後述)。
1 2 3 4 |
boolean a = true; boolean b = false; boolean c = (1 < 2); // true boolean d = 3 > 4; // false |
論理演算はC言語と同じ。
型の種類
Java言語の型は、大きく2種類に分類される。
- プリミティブ型
- 参照型(クラス型)
ここまで紹介した型のうち、String型が参照型で、それ以外はプリミティブ型。とりあえず、ここでは「2つの種類がある(違いがある)」ということを覚えておくこと。
変数の宣言
C言語では変数の宣言は関数の最初で行う(最近のC言語ではそうでもない)。Javaでは関数(メソッド)の最初じゃなくても良い。
演算子(教科書P.25〜)
演算子とは「演算を表わす記号」のこと。
C言語とだいたい同じ。
演算子によって、被演算子(演算が作用する対象)として使える型が違うことに注意すること。
- 算術演算子
- 代入演算子
- インクリメント演算子、デクリメント演算子
- 比較演算子
- 条件演算子
- 論理演算子
- キャスト演算子
- ビット演算子
どんな演算が行われているか?演算の結果がどうなるか?を理解しよう。
制御文
Java言語の制御文は条件の判定にboolean型を使う(C言語は0かそれ以外かを判定する)。これ以外はC言語とだいたい同じ。
制御文の記述に関する注意: かっこは省略するな!ただ「省略できる」ということは知っていなければならない。
- if else
- for
- while
- break
- continue
- switch
クラス
- データと処理をまとめたもの(教科書)
- 構造体に関数がついたもの(C言語がきちんとわかっている人向けの説明)
- 型の定義
- etc..
とりあえず、現段階では「変数と関数をまとめたもの」と考えよう。とりあえず、変数だけをまとめた場合(変数だけをまとめた型、つまりCにおける構造体とほぼ同様)を考えよう。例として「BMIを計算するプログラム」を作成する。
参考: BMIと適正体重
クラスを使わない場合
比較のため、まずは(mainメソッドが含まれるクラス以外の)クラスを作成しない場合を考えてみよう。
2人分のデータを扱うために、double型の変数を4つ作成している。
身長と体重をフィールドとして持つPersonクラス
次にデータを身長と体重をまとめて扱うためのPersonクラスを作成し、それを用いてBMIを計算してみよう。
ポイント
- Personクラスではクラスに所属するフィールドを2つ定義している。
- mainメソッドでは、Personクラスののインスタンスを生成し、インスタンスのフィールドに値を代入している。
Personというクラスを作ることによって、Personという型を使えるようになったと考えよう。Person型は、これまで使ってきた型(intやdouble等のプリミティブ型)と違い、値を1つだけ格納するのではなく複数の値を格納することができる。
何が嬉しいのか?これまでは関連するデータであっても別の変数で管理するしかなかった(あるいは、変数名で工夫するか、配列にするか)が、クラス(=新しい型)を定義することによって、関連するデータをまとめて扱えるようになる。
クラスにフィールドを追加しよう
次のフィールドを(定義に)追加してみよう。型は(指定がない場合は)適切なものを考えよう。課題ではないが、次回講義で実装例を紹介するので、取り組んでおくこと。
- 名前を表すnameフィールド
- 年齢を表すageフィールド
- 運転免許証の有無を表すhasDriverLicenseフィールド