プログラミングド素人のデザイナーがJava入門してみた_その3


前回までのあらすじ

プログラミングド素人のデザイナーがJava入門してみた_その2

  • if文やfor文、配列などがJavaScriptと同様に書けることがわかった

教科書

ドットインストールさまさま

データ型とメモリの関係

  • データ型には基本型(プリミティブ型)参照型がある
  • メモリとは番地のついた連続したデータを置く為の領域

基本型(プリミティブ型)

  • 基本型の変数には値そのものが格納される
  • byte
  • short
  • int
  • long
  • float
  • bouble
  • boolean
  • char

参照型

  • 参照型の変数にはメモリの番地が格納される
  • ↑以外
  • String
  • Array
  • Class

など

  • 参照型の変数には値そのものは格納されていないので、挙動に注意が必要
  • 値が格納されたメモリの番地のメモが格納されているイメージ?
public static void main (String[] args){
  int[] arr1 = {1,3,5}; //arr1はメモリに格納された{1,3,5}を参照
  int[] arr2 = arr1; //arr2はarr1が参照している{1,3,5}、つまり★同じもの★を参照
  arr2[1] = 10; //大元をいじっているので、arr1もarr2も影響を受ける

  System.out.println(arr1[1]);//10
  System.out.println(arr2[1]);//10
}

メソッド

メソッドの定義

public static [returnする値の型] [変数名]([引数の型] [変数名]){
  hogehoge;
}
  • 返す値(returnしない)がない場合は、void
public static void sayHi(){
  System.out.println("Hi!");
}
  • 文字列returnする場合はStringと明記
public static String sayHi(String name){
  return "Hi! " + name;
}

変数の有効範囲

  • メソッド内で定義した変数は、そのメソッド内でのみ有効
public class HelloWorld {
  public static void hoge(){
    int x = 1;
  }

  public static void main (String[] args){
    System.out.println(x); //xはhoge()内で定義されているので使えない
  }
}

メソッドをオーバーロードする

  • 引数の個数や値が異なれば、同じメソッド名でも別のものとして登録できる
public class HelloWorld {
  public static void hoge(){ //メソッド名hoge
    System.out.println("引数なし");
  }

  public static void hoge(String msg){ //こちらもメソッド名hoge
    System.out.println("引数は " + msg + " です");
  }

  public static void main (String[] args){
    hoge(); //引数なし
    hoge("こんにちは"); //引数は こんにちは です
  }
}

@iwashi0830はこう思った

  • 変数には常に値そのものが格納されていると思っていたので、参照型の話は新鮮だった
    • 結構複雑な話な気がするが、ドットインストールの説明がわかりやすかったので理解できた
  • メソッドを定義するとき、JavaScriptと比べていろいろと書かなければいけないことが多い
  • 常に型を明示していくのはけっこうめんどう
  • メソッドをオーバーロードするのってどんな場面で役立つのかわからん