静的およびオブジェクト指向の観点


Static


:クラス、汎用
スタティツクメソッド
  • インスタンスを作成せずにメモリに割り当てられ、呼び出すことができる静的メソッドとなる.
    静的メソッドでは、インスタンスメンバーを直接使用することはできません.
    Staticメンバー変数(クラス変数)
  • 変数はすべてのインスタンスによって共有されます.(メモリ領域は1つのみ)
    したがって、元のインスタンス変数がクラスから作成された場合でも、それらは異なる値を有し、静的メンバー変数はインスタンスに関係なく同じ値を有する.
  • したがって、すべてのインスタンスで同じ値を保持する必要がある変数はstaticを追加することによって定義される(finalとは異なり、値を変更できるため)
  • staticを使用すると、複数のインスタンスの作成と管理よりも効果的ですか?こんな考えがあります.しかし、オブジェクトに向かう角度から見ると、静的はどうでしょうか.

    Q.Javaはなぜstaticを使わないのですか?


    メモリ側


    Javaメモリ領域は大きくstatic,stack,heap領域に分けられる.static領域のデータは、アプリケーションの開始から終了までメモリに保持されます.
    メモリ領域には、グローバル変数と静的(静的)メンバー変数が格納されます.
    ここに盲目的に格納するとメモリが浪費され、必要な変数だけが使用されます.
    (staticでは、メソッドの呼び出し時にのみ割り当てられ、終了するとメモリが解放されるため、これは良い選択です.

    オブジェクト向けの側面

  • staticはオブジェクトに向いていません.
  • staticは、グローバル変数を使用する場合に便利です.
  • ただし、オブジェクト向けのプログラミングの原則に従って、1つのオブジェクトが携帯するデータは外部で勝手にアクセスしたり修正したりすることはできません.
  • したがって、静的変数は、オブジェクト向けプログラミングの原則に違反し、すなわち、各オブジェクトのデータをカプセル化しなければならない.
  • static変数はプログラム実行中に生存し続ける
  • 前述のメモリにおいて、JVMの静的領域は、プログラムが終了するまでメモリに保持される.
  • 最終的には、静的変数はプログラムの実行中に引き続き存在する
  • 関数にインスタンスを作成すると、関数呼び出しが終了するとインスタンスが消えてしまうため、オブジェクトのライフサイクルに適しています.
  • staticは再利用性を備えていない.
  • staticメソッドはstackを実装するために使用できません.
  • これは、オブジェクト向けの設計を妨げ、再利用性を向上させる可能性がある.
  • その他の静的概念。


    Q.main()メソッドがstaticと宣言された理由

    public static void main(String[] args)
  • interfaceの場合
    Javaプログラムが実行される前に、静的変数とメソッドを第1段階のメモリに置いてプログラムを実行します.(静態運転時ランキング1位)
    Javaは、上位機staticにオブジェクトを作成する必要がなく、メモリ割り当てを呼び出すことができます.
    main関数を実行するには、事前にメモリに保存する必要があります.
    そうでなければ、最初はmainがなく、実行できません.
  • JVMでなければ
    オブジェクトは作成時にメモリに割り当てられるため、staticキーワードを使用してオブジェクトを作成する必要があります.オブジェクトをメモリに割り当ててアクセス/呼び出しを行う必要があります.
    main関数を実行するには、事前にメモリに保存する必要があります.
    そうでなければ、最初はmainがなく、実行できません.
    ex)主クラス変数=new主クラス()変数.main();
  • まとめ
    プライマリ・メソッドは、インスタンスの作成を考慮せずにJVMによって呼び出されるため、静的と宣言する必要があります.
  • 質問:main()で(staticと宣言されたメソッドで)非staticメソッドを直接呼び出すときにエラーが発生したのはなぜですか?


  • main(静的宣言メソッドから)newからメソッドを直接書き込むことができない理由は、次のとおりです.staticに他の一般的な関数を書き込むには、メモリにない関数にアクセスできません.(静的はまずメモリに入りますが、通常の関数は実行時にのみ上昇しますが、事前にアップグレードされた静的からアップグレードされていない通常の関数を呼び出すことに失敗しました.)
    したがって、staticを通常のメソッドに宣言すると呼び出すことができます.

  • 静的メソッドはオブジェクトを作成する必要はありませんが、インスタンスメソッドは呼び出すにはオブジェクトを作成する必要があります.
  • しかし、普通の方法を呼び出したいなら?

  • オブジェクト呼び出しの作成

  • しかし、元のインスタンスメソッドから別のインスタンスメソッドを呼び出すと、なぜオブジェクトが作成されないのでしょうか.
  • これは、インスタンスメンバーが存在することは、インスタンスが作成されたことを意味するため、他のインスタンスメンバーも存在すると考えられるためである.

  • タスクフィードバックの表示



    [前のブログ記事]
    https://blog.naver.com/maui2005/222596882203
    [参考]
    Javaの定番280 p
    https://unabated.tistory.com/m/entry/%EC%99%9C-%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-static%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EC%A7%80%EC%96%91%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B0%80
    https://gorakgarak.tistory.com/m/222?category=55954
    https://m.blog.naver.com/heartflow89/220954420688