Java基礎まとめ(クラスライブラリ)

# まずはじめに
Javaの学習を始めました。
こんなレベルから・・・？というくらい超基礎～から執筆します。
自身が復習できるような自身の備忘録を作成していきます。

# クラスライブラリとは
クラスライブラリは直訳すると「クラスの図書館」
Javaの開発環境であるJDKの一部として、提供されるクラス群をクラスライブラリと呼ぶ。
数千のクラスやインターフェイスがまとめられている。よく使われる機能をまとめた便利セットのようなもの。

【クラスライブラリ例】
* java.lang
基本的なクラス
* java.io
入出力関連
* java.net
ネットワーク関係

などなど

たくさんあるので、よく使うものをその都度学習という形でよいかも。

# APIドキュメント
API(Application Programming Interface)は、アプリケーションやプログラムをつなぐもの。
開発者は呼び出し方さえわかれば、呼び出して利用できる。(System.out.println();みたいなやつ)

クラスライブラリーやそれに含まれるメソッド・メンバー変数がまとまっているものを
***APIドキュメント***とよぶ。オラクル社から公開されている。

https://docs.oracle.com/javase/jp/20/docs/api/java.base/module-summary.html

すべてを暗記して使いこなすということは不可能なので、APIドキュメントで調べる術さえ理解しておけばOK

本ブログでは有名なクラスのみ紹介を行う。

# Objectクラス(java.lang)
Objectクラスはすべてのクラスのルートとなるクラス
すべてのクラスはObjectクラスを継承している

### boolean equals(Object obj)
Objectクラスのequalsメソッド。自オブジェクトとobjが等しいかを調べる。

```java:equalsを使ってみる
Student stu1 = new Student("山田");
Student stu2 = new Student("山田");

stu1.equals(stu2) //結果はfalseになる

//equalsはアドレス値を比較するメソッドなので
//内容は一緒でもアドレス値が違うのでfalseとなる。
//「==」と同じ意味
```

### String toString()
toStringメソッドとはオブジェクトの情報を文字列で返す。
`System.out.println(obj)`したときは自動的にtoStringが呼び出される。

# Stringクラス
「"」で囲まれた文字列はStringオブジェクト
あたりまえでは・・・？と思ったが、これって実は特殊なことみたい。
本来は`String s2=new String("java");`と定義すべきところ、
よく使うため`String s1="java";`に省略できるようになっている

"~"をつかうと同じ文字列のオブジェクトが再利用される。つまり2つ目以降はメモリが増えない。

### boolean equals(Object obj)
Stringクラスのequalsメソッド。自文字列とobjの文字内容を比べる。

```java:文字列の比較
String s1="Java";
String s2=new String("Java");
String s3="Java";

s1.equals(s2) //文字が同じかどうか比較true
s1==s2 //文字が格納されているアドレス値を比較false
s1.equals(s3) //文字が同じかどうか比較true
s1==s3 //文字が格納されているアドレス値を比較true
```
<font color="red">文字列の比較をするときは`equals()`でしよう！</font>

# ラッパークラス
各基本データ型に対応したクラスをラッパークラスという

|基本データ型|ラッパークラス|
|----|----|
|byte|Byte|
|short|Short|
|int|Integer|
|long|Long|
|float|Float|
|double|Double|
|char|Character|
|boolean|Boolean|

```java:ラッパークラス例
int i =10 //iに10を代入
Integer j = new Integer(10); //新規アドレスを取得し、アドレス値をjに代入
(Integer j = 10でもアドレス値)
// Integerがラッパークラスにあたる
```

基本データ型は基本的に直接変数に代入できるものだが、
String型のような参照型のようにアドレス値を準備して管理することができるクラスを
ラッパークラスと呼ぶ。値をラップで包むようなイメージからラッパークラスと呼ぶ。

# ArrayListクラス
複数のオブジェクトをまとめて管理できるコレクションクラスの１つ
配列とは違うもう1つの手法と考えて問題ない。

java.utilパッケージに含まれているクラス
java.langパッケージのようにデフォルトのモノではないので使用する際には
「import」をする必要がある。サイズが動的に変わる配列。



```Java:ArrayListクラス例
ArrayList<String> list = new ArrayList<String>(); //ArrayList<String>がクラス名
//格納する要素のデータ型を<>(ジェネリックス)内に指定
//list変数を生成

list.add("We"); //listの0番目に"We"を代入
list.add("enjoy"); //listの1番目に"enjoy"を代入
list.add("Java"); //listの2番目に"Java"を代入

for(int i =0; i<list.size(); i++){
System.out.println(list.get(i)); //list.get(i)でi番目のlistの情報を取得する
}
```

# Iterator<E>インターフェイス
Iteratorはコレクション内の内容を指し示すカーソルのようなもの
ArrayListで作成したものを読み込んだり、削除したりすることができる方法。

```Java:Iteraror<E>インターフェイス使い方
ArrayList<Integer> list = new ArrayList<Integer>();
int.add(10);
int.add(20);
Iterator<Integer> it = list.interator(); //Iteratorメソッドでlistのイテレーターを取得
//オブジェクトに対してIteratorを使用しますよっていう準備という認識でOK
while(it.hasNext()){ //hasNextは次に要素があればtrue
System.out.println(it.next()); //itを返して、nextで次の要素へ
}
```

# つまりクラスライブラリとは？
Javaがオフィシャルで準備している便利ツールというイメージ
数がとんでもなくあるので、要所要所でよく使うものを覚えていくような進め方でOKだと思う

Java.langは記述はいらないが、それ以外のJava.utilなどを使う際には「import」で連携が必要
つまり、記述しなくても使えるものと、記述しないと使えないものがあるので注意