Javaの基本文法

# 初めに

23卒でエンジニアとして働くものです
研修でJavaを学んだのでまとめます
教材は[スッキリわかるJava入門]

https://book.impress.co.jp/books/1119101083

この記事は1章～6章についてです
簡単なところは省いています

めちゃめちゃ簡易化して書いているので気になった方は各自でお願いします！
間違っているところがあれば指摘していただけると幸いです


### 1章

プログラムの書き方

        型　変数名　= 代入するデータ

で変数を宣言できる

変数を宣言を宣言するときに **Final**　を付けると定数になる

        Final 型名　変数名 = 値


型の種類は
|  分類 |  型名  |
| ---- | ---- |
| 整数   | byte   |
| 整数   | short   |
| 整数   | int   |
| 整数   | long   |
| 少数   | float   |
| 少数   |  double  |
| 真偽値   | boolean   |
| 文字   | char   |
| 文字列   | String   |

使用頻度は

**String int** > _double boolean_ >>> その他
っぽいです

### 第2章

式と演算子

エスケープシーケンス

        "私の好きな記号は\"です"

文字列中に本来含むことができない記号を含める

##### 画面に文字を表示

        System.our.println(a);

##### 大きい方の数値を代入

        int m = Math.max(a,b);

##### 文字列を数値に変換

        int n = Integer.parseInt(a);

##### 乱数を生み出して代入

        int r = new java.util.Random().nextInt(a);

0 ~ (a-1)　までの整数が生み出される 

##### キーボードから文字列の入力を受け取る

        String s = new java.util.Scanner(System.in).nextLine();

##### キーボードから整数の入力を受け取る
        
        int input = new java.util.Scanner(System.in).nextInt();

### 第3章

代表的な制御構文



##### for文

        if(判定条件){

    }else{
        
    }

文字列の比較には

文字列1.equals(文字列2)を使う

##### switch文

            Switch(判定するもの){

        case a:
            break;

        case b:
            break;

        case c:
            break;

        default:
    }

##### while文

        while(判定条件){
        
    }

##### do while文

        do{

    }while(判定条件)

while文と違って1回は確実に処理される

##### for文

        for(int i = 0; i<x; i++){
        
    }

### 第4章

配列

##### 1次元配列

宣言

        要素の型 [] 配列変数名 = new 要素の型[個数]

代入

        要素の型 [] 配列変数名 = new 要素の型[] {要素1,要素2,...}

        要素の型 [] 配列変数名 = {要素1,要素2,...}

##### 2次元配列

宣言

        要素の型[][] 配列変数名 = new 要素の型[行数][列数]


### 第5章

メソッド

##### メソッドの定義

        public static 戻り値の型　メソッド名(引数){
                        処理;
        }

##### メソッドの呼び出し

            メソッド名（引数）;

引数は　

            引数の型　引数

という風に宣言
具体的には

             setAge(int age)

##### オーバーロード

メソッド名は基本的に重複できないが引数が異なれば同じメソッド名を付けることができる

### 第6章

複数クラス
同じクラスに記述をしていると見にくくなる
→ソースファイルを分割

##### ソースファイルの分割

他のファイルの関数を呼び出すときは

        ファイル名.関数名(引数)

###### 例

```Main.java
public class Main{
    public static void main(String[] args){
        int x = AddNumber.add(1 , 2);
        System.out.println(x);
    }
}

```

```AddNumber.java
public class AddNumber {
    public static int add(int x, int y){
        return x + y;
    }
}
```

##### パッケージ

また、フォルダ階層に沿ってパッケージに所属することが可能

パッケージに所属するときは

        package フォルダ階層

の記述が必要

ソースファイルの分割と同様に　

        フォルダ階層.関数名()

で関数を呼び出すことができるがめんどくさいときはimport文を使う

        import フォルダ階層

で　ファイル名.関数名()として呼び出すことが可能

###### 例

フォルダ階層

        PracticeJava
              ┃
              ┣Calc
              ┃   ┗ AddNumber.java
              ┃      
              ┗Main.java

ちょっと見づらいかもしれません

##### importなし

``` Main.java

package PracticeJava;

public class Main {
    public static void main(String[] args){
        int x = PracticeJava.Calc.AddNumber.add(1 , 2);
        System.out.println(x);
    }
}

```

```AddNumber.java

package PracticeJava.Calc;

public class AddNumber {
    public static int add(int x, int y){
        return x + y;
    }
}
```

Packageの部分からわかるようにフォルダ階層に沿ってパッケージされています
(VSコードが自動でやってくれます！便利！)
AddNumberファイルの関数を呼び出すためには

        PracticeJava.Calc.AddNumber.add(引数)


となっていて階層によってはめちゃくちゃ長くなってしまいます。
そこでimport文！

##### importあり
```Main.java
package PracticeJava;
import PracticeJava.Calc.AddNumber;

public class Main {
    public static void main(String[] args){
        int x = AddNumber.add(1 , 2);
        System.out.println(x);
    }
}
```

```AddNumber.java
package PracticeJava.Calc;

public class AddNumber {
    public static int add(int x, int y){
        return x + y;
    }
}
```

パッケージをimportすることで関数を呼び出す際に階層を記述する必要がありません！




##### おわりに

基礎文法を書きましたが結構長かったです
次はオブジェクト指向について書きます
間違いがあれば指摘していただけると幸いです。