JAVA入門　〜PHPとの相違点だけを抜粋〜

#変数と型

:::note info
・変数を使用する場合は型を宣言しないといけない
・型には基本データ型と参照型がある
:::

###データ型の種類
#####１、基本データ型
**boolean**	true or false
**char**	16ビットUnicode文字 \u0000～\uFFFF
**byte**	8ビット整数 -128～127
**short**	16ビット整数 -32,768～32,767
**int**	32ビット整数 -2,147,483,648～2,147,483,647
**long**	64ビット整数 -9,223,372,036,854,775,808～9,223,372,036,854,775,807
**float**	32ビット単精度浮動小数点数
**double**	64ビット倍精度浮動小数点数

#####２、参照型
※参照型は基本データ型とは異なる特殊なデータ型
 **String** 文字列

[参照型について詳しくはこちら](https://qiita.com/shunsuke227ono/items/07c08cf5640564f7739c)

###使用例

**java**

```java
int age; //型宣言
age = 16; //初期化
```

#####宣言と初期化を省略した書き方

```java
int age = 16; //型宣言と初期化を同時に実行
```

#####初期化しないで配列を使うと・・・

```java
int age; //型宣言
System.out.println(age); //エラー: 変数ageは初期化されていない可能性があります
```

:::note warn
初期化しないで配列を使うとエラーになる
:::

#####phpで変数を使う場合

```php
$age = 16;
```

###配列の初期化について

:::note info
・配列の場合は初期化しなくてもよい
・配列の場合はデフォルトの初期値が設定されている
:::

```java
int[] number = new int[5];
System.out.println(number); //0
```

###各データ型のデフォルトの初期値
**boolean** false
**char**	''
**byte**	0
**short**	0
**int**	    0
**long**	0
**float**	0
**double**	0
**String**	null

###キャスト（型の変換）について

[詳しくはこちら](https://www.sejuku.net/blog/22975)

#配列

:::note info

:::

**java**

#####配列の作り方

```
データ型[] 変数名;
変数名 = new データ型[要素数]
```

```java
String[] customer; //　String型の配列を宣言
customer = new String[3]; //初期化
```

#####配列の作成例

```java
String[] customer; //　String型の配列を宣言
customer = new String[3]; //初期化
customer[0] = "山田";
customer[1] = "yamada@gmail.com";
customer[2] = "090-1234-5678";
```

#####配列を宣言と初期化を省略した書き方

```java
String[] customer = {"山田","yamada@gmail.com","090-1234-5678"};
```

***php***

```php
$age = ['山田','yamada@gmail.com','090-1234-5678'];
```

#繰り返し構文

###拡張for文
配列要素を最初から最後まで順番に使用すること(しかできない)ができる。


```java
String[] customer = {"山田","yamada@gmail.com","090-1234-5678"};

for(String info:customer) {
 System.out.println(info);
}
```

#クラス

###基本構造

:::note info
・javaではmainメソッドは必ず必要
・クラスが呼ばれるとmainメソッドが実行される
:::

```java
public class クラス名 {
    public static void main(String[] args) {
        //処理
    }

　　 public static void メソッド名() {
        //処理
    }
}
```

###フィールド

:::note info
クラス直下で定義された変数
:::

```java
class Sample {
    String name = "";
    int age = 0;

    public static void main(String[] args) {
        //処理
    }
}
```

###インスタンス

:::note info
クラスを使用可能な状態にする
:::

[メソッドと同様にオーバーロードできる](https://qiita.com/naoki_y/items/da17852e45c686645c44#%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%89)

#####基本構造

```
クラス名　インスタンス名 ＝ new クラス名（引数）;
```

#####使用例

```java
class Sample {
    Student taro = new Student("太郎",30);
}
```

###コンストラクタ

:::note info
インスタンスをすると必ず実行される
初期化に使用される
:::

#####ルール
１、コンストラクタの定義において戻り値の情報は何も記述しない
２、コンストラクタ名はクラス名と同じにする

```java
class Student {
    String name;
    int age;
    
    Student(String name, int age) {
        name = name;
        age = age;
    }
}
```
###thisついて

#####thisには２つの使い方がある

#####１、this()

:::note info
・コンストラクタを呼ぶ
・実践的な使い方は初期化を行う際の初期値の設定に使用される
:::

###使用例

```java
class Sample {
    Student taro = new Student("太郎",30);
}
```

```java
class Student {
    String name;
    int age;

 　　//引数がない場合はこのコンストラクタが実行される
    Student() {
        name = null;
        age = 0;
    }

　　//引数がある場合はこのコンストラクタが実行される
　　Student(String studentName, int studentAge) {
        this(); //引数がない場合のコンストラクタを実行させる
        name = studentName;
        age = studentAge;
    }
}
```

#####１、this.変数名

:::note info
・フィールドの変数を指定する
・ローカル変数名とフィールド変数名が一緒の場合はローカル変数が優先される
:::

###使用例

```java
class Sample {
    Student taro = new Student("太郎",30);
}
```

```java
class Student {
    String name;
    int age;

　　Student(String name, int age) {
        name = name; //thisがない場合この変数nameが示しているのはこのコンストラクタの変数name
        age = age; //thisがない場合この変数ageが示しているのはこのコンストラクタの変数age
    }

　　Student(String name, int age) {
        this.name = name;　//thisがある場合この変数this.nameが示しているのはこのフィールドの変数name
        this.age = age;　//thisがある場合この変数this.ageが示しているのはこのフィールドの変数age
    }
}
```

###メソッド名の前の型について

:::note info
メソッド名の前にメソッドの戻り値の型を設定する
:::
void -> 戻り値なし
int -> 数値型
String -> 文字列

```java
public class calculate {
    public static void main(String[] args) {
        int num1 = 5;
        int num2 = 10;
        sum = add(num1,num2);

        System.out.println(sum);
    }

　　 public static int add(int num1, int num2) {
        int sum = 0;
        sum = num1 + num2;
        return sum;
    }
}
```

###mainメソッドの引数について

```java
main(String[] args)
```

:::note info
mainメソッドの引数(String[] args)を使うにはコマンドラインで引数を渡すことで使用できる
:::

[詳しくはこちら](https://techacademy.jp/magazine/22469)

###メソッドのオーバーロード

:::note info
同じメソッド名で複数のメソッドを定義できる
:::

#####条件
１、引数の数が異なっている

```
public static void test(int n1){
  // ...
}

public static void test(int n1, int n2){
  // ...
}
```
２、引数の種類が異なっている

```
public static void test(int n1){
  // ...
}

public static void test(double d1){
  // ...
}
```
３、引数のデータ型と数は同じでも順番が異なっている

```
public static void test(int n1, double d1){
  // ...
}

public static void test(double d1, int n1){
  // ...
}
```

[詳しくはこちら](https://www.javadrive.jp/start/method/index8.html)

###可変長引数について

:::note info
可変長引数とは、引数の数が決まっていない引数のこと
:::

#####使い方

```
public static void メソッド名(型... 引数名) {
  //
}
```

#####使用例

```java
public static void main(String[] args) {
    int sum = add(10,20,30);
    System.out.println(sum);

}

public static int add(int... numbers) {
    int sum = 0;
    for(int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
    }
    return sum;
}
```

###パッケージの使い方

:::note info
・パッケージはクラスを分類するための仕組み
・phpのnamespaceと似た機能
:::

#####使い方

:::note info
・階層の上から順に「.」でパッケージ名を連結
・クラスの先頭で「package」と宣言
・小文字で記述
・パッケージ名は通常、インターネットドメインを逆にした形式のパッケージ名とする
:::