Javaにおける変数・演算子・制御文とクラス

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型を使う。文字をシングルクォーテーションで囲むことによって文字を表現する。

これで、変数vには文字「a」が代入される(正確には文字「a」の文字コードである97が代入される。つまりcharは整数型)。

Java言語でもだいたい同じ。

文字列(教科書P.13)

C言語ではchar型の配列として扱う。

Java言語ではString型を使う。

「+」で連結することができる(教科書P.13)。

boolean型(教科書P.34)

C言語では、真偽を表すのにint型を使い、真が0以外、偽が0としてきた。

例えば、

とした場合、aには0が格納される。

Java言語には真偽を表すboolean型(論理型)がある。boolean型は値としてtrue(真)かfalse(偽)をとる。比較演算子や論理演算子はboolean型を返す演算子ということに注意する(演算子については後述)。

論理演算は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つ作成している。

CalcBmi1

身長と体重をフィールドとして持つPersonクラス

次にデータを身長と体重をまとめて扱うためのPersonクラスを作成し、それを用いてBMIを計算してみよう。

ポイント

  • Personクラスではクラスに所属するフィールドを2つ定義している。
  • mainメソッドでは、Personクラスののインスタンスを生成し、インスタンスのフィールドに値を代入している。

Personというクラスを作ることによって、Personという型を使えるようになったと考えよう。Person型は、これまで使ってきた型(intやdouble等のプリミティブ型)と違い、値を1つだけ格納するのではなく複数の値を格納することができる。

CalcBmi2

何が嬉しいのか?これまでは関連するデータであっても別の変数で管理するしかなかった(あるいは、変数名で工夫するか、配列にするか)が、クラス(=新しい型)を定義することによって、関連するデータをまとめて扱えるようになる。

クラスにフィールドを追加しよう

次のフィールドを(定義に)追加してみよう。型は(指定がない場合は)適切なものを考えよう。課題ではないが、次回講義で実装例を紹介するので、取り組んでおくこと。

  • 名前を表すnameフィールド
  • 年齢を表すageフィールド
  • 運転免許証の有無を表すhasDriverLicenseフィールド