Java入門#1_入出力と変数

#Java入門その１ 
今回はJavaとはどんな言語なのかと、簡単なプログラムを書いて見ます。

##Javaとは
オブジェクト指向型のプログラミング言語です。
特に**業務用システムの構築**に適していると言われていて、世界で最も使われているプログラミング言語の一つです。

###特徴
・まず、どんなコンピュータ上でも動作します。
このことを**プラットフォーム非依存**と呼んだりします。JavaはJava仮想マシンという擬似的に作り出されたマシン上で動作します。

わかりづらいのでGoogle Chromeを考えて見てください。
Google Chromeも似ていて、仮想OS上で動作します。そのため、windowsでもMacでも使用することができます。

Javaも同じで、Java仮想マシン上で動作します。そのため、windowsでもMacでも使用することができます。

・オブジェクト指向型プログラミング
これはC#やPythonのような、　クラスを作っていくプログラミングということです。
有名なオブジェクト指向型プログラミングに、Java,C++,Python,JavaScript,Ruby,Swiftなどがあります。(なので、これらが扱えると割と楽に理解ができます。)

・大人気のプログラミング言語![スクリーンショット 2022-02-03 23.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2442087/8d77c76c-713e-ee9a-eaa4-7851242245b5.png)

引用:https://www.tiobe.com/tiobe-index/

上のように、Javaは長年好きなプログラミング一位二位をC言語争うくらいに人気です。（僕はC言語派ですが）
現に、専門学校などで学習するプログラミング言語はJavaが多いです。最近は機械学習に長けているPythonや、Webアプリケーション制作に長けているJavaScriptが支持を伸ばしていますが、Javaには到底及ばない人気があります。

###何が作れるか
・企業の業務システム
・Androidアプリ
・Webアプリケーション
TwitterはJavaで作られています。
・ゲーム
MinecraftはJavaで作られています。

まぁ、基本的に作ることができるものはPythonとかと同じですが、圧倒的に実際に企業などで使われているという面が強いです。

　
##実際に書いてみる
実際にJavaでHello Worldを書いて見ましょう。
`VSCodeで新しくファイルを作る`
↓
`名前をhelloworld.javaにする`
↓
次を書いてみる

```java
class Hello{
    public static void main(String[] args) {
        System.out.println("hello_world");
    }
}
```
↓
`ターミナルを開いて書いたプログラムのある階層まで移動する。`
↓
`java helloworld.java　と打ってエンターキーを押す`

これで`helloworld`と出力されるはずです。
　
説明します。
まず、Javaでは必ずクラスを書いて、そこで関数を呼び出して実行させます。
今回は`Hello`というクラスを作って、そこでmain関数を呼び出しました。
`System.out.println("//")`でカッコ内の文字を出力させることができます。
ちなみに、`print`と`println`の違いは改行するかしないかです。
ためしに、`System.out.println("//")`と`System.out.print("//")`を書き比べてみてください。

>ex1-1
自分の名前を出力してみましょう


###mainって何

この`public static void main (String[] args)`からはじまるブロックをmainメソッドといいます。
Javaは、***必ずこのmainメソッドからプログラムが開始***されます。

###classって何

pythonでは、必ずclassを書かなければプログラムが成立しない！ということはありませんでした。

しかし、***Javaはひとつのプログラムに必ず一つ以上のクラスが存在しなければいいけません。***
クラスがあって -> メソッド（関数）があって -> 文があります。
この形をガチガチに決められているのがJavaです。

##変数宣言

以下がJavaの主な変数です。

|　　　　　　名前　　　　　　|値の範囲|c#では|
|:--:|:---:|:--:|
|boolean|true/false|bool|
|char|文字|char|
|string|文字列|string|
|int|4バイトの整数|int|
|float|4バイト単精度浮動小数点数|float|
|double|8バイト倍精度浮動小数点数|double|

うえでみてわかるとおり、変数の名前はc#とほぼ同じです。
ちなみにpythonのように動的な型付けはしてくれないので、自分で型を宣言します。

バイト、とかビット、とかはそのうちやると思うのでいまは詳しく説明しません。
気になったら調べてみましょう。
ちなみに、1バイトは8ビットというのは常識なので、覚えておいたほうが良いです。


では実際にJavaで変数宣言してみましょう。

```java
class sample1{
     public static void main(String[] args){
         int number = 10;
         System.out.println("numberの値は" + number + "です。");
    }
}
```

```php
//出力結果
numberの値は10です
```

あまり説明は不要かもしれませんが、int型に10をいれて出力しています。

>ex1-2
・私の年齢は（/*実際の年齢*/）です、という文を書いてみましょう。
・floatとdoubleは何が違うのでしょうか？調べてみましょう。また、doubleでは出力できるけど、floatではエラーが起こる数字をみつけてみましょう。


##キーボードからの入力
C#やpyhtonに比べて、javaの入力はとてつもなくめんどくさいです。
pythonでキーボードから入力を待って、入力されたものを出力する文は以下のようなものでした。

```python
x = input()
print(x)
```

とても簡単。これをJavaで書くと以下のようになります。

```java
import java.io.*;//入力を使うときに必要

class input_test{

    public static void main(String[] args)throws IOException{//mainの後ろにthrows IOExceptionを記述

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//お決まりで書く文

        String str = br.readLine();//br.readLine()で入力を待って、strに格納する

        System.out.println(str);//出力
        
    }
}
```

とんでもなく長い文になりました。
`import java.io.*;`
` public static void main(String[] args)throws IOException`
` BufferedReader ここの変数は何でも良い = new BufferedReader(new InputStreamReader(System.in));`
を記述しなくてはいけません。
これはもう、短縮する方法とかは特にないので、そもそもこういうもんだ、と思って諦めて書くしかありません。

###入力された文字列をint型に変更する
上記のプログラムは`String str`に代入されているとおり、文字型で出力しています。
int型に直すためには以下を追加します。

```java
import java.io.*;//入力を使うときに必要

class input_test{

    public static void main(String[] args)throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();

        int nubmer = Integer.PerseInt(str);//これを追記

        System.out.println(number);//numberに変える

    }
}
```

これでString型のstrがint型のnumberに変更されました。
試しに`abc`と入力して見てください。「数字を入力してくれ」というエラーが出て実行できないはずです。
ちなみに、String型をdouble型に直すには、
`double num = Double.parseDouble(str);`
と記述します。

>ex1-3
・自分の名前と年齢を入力して出力するプログラムを書いて見ましょう。
・昨日は何月何日何曜日ですか？という画面が出力され、自分で答えを打ち込んで回答を返してくれるプログラムを書いて見ましょう。