見出し画像

【Javaお勉強日記】クラスとインスタンスの基本をやったよって話

基本中の基本みたいなところを改めて押さえていっています。

なのでサンプルコードとかちゃんとまとめ始めると果てしない道のりになってしまうので、今日は今回学習して始めて・改めて「あーはん?」と理解した・理解が深まった・やっと理解した点をまとめて置きたいと思います。

staticがあったりなかったりするやつ

public static void ...(){}
public void .....(){}

って、あっちこっちでよく見かけるけど、staticがあったりなかったりするのなんなん?static(静的)というけど、中は色々動いてるやん、何がどうstaticなん??

→「プログラム起動時にメモリ上にコピーしておくのがstatic」「必要に応じてメモリを確保するのはstaticじゃない」という違い。
mainメソッドは絶対使うから動かす前にメモリにコピーしておく必要があるからstaticにする。
オブジェクトの設計図としてのクラスは、都度インスタンスを増やせるのが良いところなので、staticにしたら意味が無いので、staticにしない。

thisが付いたり付かなかったりするやつ

public class hoge{

    // フィールド変数hogehogeを作る
    private String hogehoge;
    
    // コンストラクタ
    public hoge(String hogehoge){
        // 「フィールド変数」hogehogeに、コンストラクタの引数hogehogeを代入
        // 「フィールド変数」を示す為にthisが付く
        this.hogehoge = hogehoge;
    }
    
    // ゲッター
    public String getHogehoge(){
        // こいつが返すのは「フィールド変数」hogehoge
        // だけど、thisが付かない
        return hogehoge;
    }
    
    public void setHogehoge(String hogehoge){
        // こいつは「フィールド変数」hogehogeにメソッドの引数hogehogeを代入
        // 「フィールド変数」を表す為のthisが付く
        this.hogehoge = hogehoge;
    }
        

}

って、なんで同じフィールド変数のこと指すのにthisが付いたり付いて無かったりするわけ。pythonなら全部selfが要るじゃないの。
(フィールド変数:pythonで言うところのインスタンス変数。インスタンスごとに保持するやつのこと。とりあえず教科書がフィールド変数って呼んでるので、Javaの時はひとまずフィールド変数呼びで進めます。)

同じメソッド内に同じ名前の引数があるときだけthisが必要
pythonでよくself付け忘れてムキーってなってるでしょあなた。
必要な時だけあればいいんだから楽じゃない?そうでもない?
(……わかりやすい方がいいなぁ)

じゃあ引数とフィールド変数の名前別にしたら?

どの引数がどのフィールド変数に入るか解らなくなるでしょ!!

※thisの省略は暗黙的に「他にないからフィールド変数だね」って内部で参照先を変えてくれてる感じなので、フィールド変数を使いたい時は明示的にthis付けても動くんだそうです。だったら付けた方が読みやすいね。

new演算子とコンストラクタとインスタンスがどうのこうの

newって何で要るの?

newが、クラスからフィールド変数とメソッドだけをコピーして空のインスタンスを作ってくれる。

で、インスタンスが出来ると自動でコンストラクタが呼ばれて、受け取った初期値を代入してくれる。

コンストラクタは初期化だけが仕事なので、できあがったインスタンス内には居ない。コピーされない。

toString()と出力系メソッド

・toStringはどんなオブジェクトにも標準装備されてるけど、そのままだと使い勝手が悪いので、自分で作ったほうが良い。

・system.out.println()みたいな出力系メソッドを使う時は、

system.out.println(nankano-object.toString())

じゃなくて

system.out.println(nankano-object)

でいい。出力系メソッドが勝手にtoString()を呼んでくれる。

*****

もっと本質的な話……クラスはオブジェクトのデザインをするために使うのが良い、とか、クラスメソッドはそのクラスに関連のあるものだけを作る、とか……も当然順次押さえているんですが、その辺はまあまあ知識としては覚えてきている(悟るには遠いけど……)ので、とりあえずココには後で読んで「ああそうだそれそれ」となりそうな記法の基本を残しておきます。

staticとかthisのあたりの、あったりなかったりするやつは本当にすぐ解らなくなってしまう……しっかり押さえて次に進みたいところです。

この記事が気に入ったらサポートをしてみませんか?