小さな白人は、彼がクラスとオブジェクトをまだ理解していないと言ったので、私はこの記事を怒って彼に投げました

二番目の兄弟、私はあなたが前回「Teacher to Learn Spring」を理解していないと言った人でした。私はあなたがJavaのエントリーレベルの基本的な知識を書くことを期待していませんでした。今回は本当に理解しましたし、とてもいい気分です。 。私の最後の不意を許してください。次の弟は私たちの小さな白の学習の進歩を本当に処理することができます。それは本当に良心です。

上記は、最後の基礎知識記事が掲載された後、読者KELが特別に送ってくれた情報ですが、正直言って、読んだ後はとても感動し、良心は失望しませんでした。それで、私は喜んでXiaobaiが見ることができるエントリーレベルの記事を2週間ごとに書くことにしました。

クラスとオブジェクトはJavaの2つの最も基本的な概念であり、オブジェクト指向プログラミング(OOP)の空をサポートしていると言えます。オブジェクトは、現実に見える任意のオブジェクト(異端のあるブタ)、または想像できる任意の仮想オブジェクト(Sun Wukong、72を変更できる)にすることができ、Javaはクラスを通じてこれらのオブジェクトを定義します状態(ブタの色が無地か色かなどのフィールドまたはメンバー変数によって定義されます)、およびどのような動作(ブタが食べたり寝たりするなどのメソッドによって定義されます)

さあ、あなたが見るための簡単なクラスを定義しましょう。

public class Pig {
    private String color;

    public void eat() {
        System.out.println("吃");
    }
}

デフォルトでは、すべてのJavaクラスには空のコンストラクタがあります。これはソースコードのデフォルトですが、バイトコードを逆コンパイルすることで確認できます。

public class Pig {
    private String color;

    public Pig() {
    }

    public void eat() {
        System.out.println("吃");
    }
}

そうです、それは余分なものpublic Pig() {}で、パラメーターは空で、メソッド本体は空です。この構築メソッドを使用して、新しいキーワードでオブジェクトを作成できます。コードは次のとおりです。

 Pig pig = new Pig();

もちろん、パラメーター付きの構築メソッドを積極的に追加することもできます。

public class Pig {
    private String color;

    public Pig(String color) {
        this.color = color;
    }

    public void eat() {
        System.out.println("吃");
    }
}

このとき、逆コンパイルされたバイトコードを見ると、デフォルトのパラメーターなしの構築メソッドがソースコードとまったく同じように消えていることがわかります。

public class Pig {
    private String color;

    public Pig(String color) {
        this.color = color;
    }

    public void eat() {
        System.out.println("吃");
    }
}

しないことで、この手段はというnew Pig()オブジェクトを作成-コンパイラは、追加のパラメータを思い出させます。

たとえば、コードを変更しnew Pig("纯白色")てパラメーターなしの構築メソッド追加するとします。

public class Pig {
    private String color;

    public Pig(String color) {
        this.color = color;
    }

    public Pig() {
    }

    public void eat() {
        System.out.println("吃");
    }
}

パラメータなしの構築メソッドを使用して作成されたオブジェクトのデフォルトの状態はnullです(色文字列は参照タイプです)。それが基本タイプの場合、デフォルト値は対応する基本タイプのデフォルト値です。たとえば、intは0です。詳細については、次の図を参照してください。

次に、色の異なる複数のPigオブジェクトを作成します。

public class PigTest {
    public static void main(String[] args) {
        Pig pigNoColor = new Pig();
        Pig pigWhite = new Pig("纯白色");
        Pig pigBlack = new Pig("纯黑色");
    }
}

ご覧のとおり、すべてがクラスから、スーツが異なる3つのPigオブジェクトを作成したので、クラスの重要性を確認できます。このオブジェクトを定義する必要があるのは1回だけで、複数回使用できます。

オブジェクトの状態を変更したい場合はどうなりますか?どうすればいいですか?状態を変更する方法がないため、現在のところ方法はありません。アクセス権の修飾子がプライベートであるため、色を直接変更しても機能しません。

最良の方法は、次のように、getter / setterメソッドをPigクラスに追加することです。

public String getColor() {
    return color;
}

public void setColor(String color) {
    this.color = color;
}

setColor()方法を変更しgetColor()、状態取得方法、その権利改質剤は、公開されています。

Pig pigNoColor = new Pig();
pigNoColor.setColor("花色");
System.out.println(pigNoColor.getColor()); // 花色

なぜこのように設計されているのですか?colorフィールドのアクセス許可修飾子をパブリックに直接変更できます。これは、getter / setterと同じ効果ではありませんか?

場合によっては、特定のフィールドを自由に変更することが許可されていないため、ブタの年齢など、オブジェクトが作成されたときに一度だけ初期化され、たとえば1年間しか成長できないため、それを可能にする月光ボックスがありません。元に戻す。

private int age;

public int getAge() {
    return age;
}

public void increaseAge() {
    this.age++;
}

あなたは年齢にはセッターメソッドだけ年に一度呼び出されないことができている、参照increaseAge()方法とgetterメソッドを。年齢のアクセス修飾子をpublicに変更すると、年齢は完全に制御できなくなり、自由に0または負の数にリセットできます。

アクセス許可修飾子はJavaにとって非常に重要です。現在、パブリック、プライベート、保護、デフォルト(デフォルト)の4つのタイプがあります。

クラスのみ使用することができますpublicまたはdefaultあなたが前に見た修正、公共修飾クラス、私は今、修飾子あなた賞賛するようなデフォルトのパーミッションを定義します。

class Dog {
}

ハハ、実は感謝することは何もない。デフォルトは、このクラスが同じパッケージの下の他のクラスからアクセスできることを意味し、パブリックは、すべてのパッケージの下のクラスがこのクラスにアクセスできることを意味します。

プライベートで保護されたクラスを変更する必要がある場合、コンパイラーは怒ります。同意しません。

privateは、クラスのコンストラクター、フィールド、およびメソッドを装飾するために使用でき、現在のクラスからのみアクセスできます。protectedは、クラスのコンストラクター、フィールド、およびメソッドを変更するためにも使用できますが、アクセス許可のスコープはより広く、同じパッケージ内のクラス、または現在のクラスのサブクラスからアクセスできます。

4つのアクセス許可修飾子の違いを次の図と比較できます。

  • 同じクラスにどのような種類のアクセス許可修飾子があっても、それらにアクセスできます。
  • 同じパッケージでは、プライベートデコレーションにはアクセスできません。
  • サブクラスはパブリックおよび保護された装飾にアクセスできます。
  • public修飾子は世界に面しています。笑、すべての場所からアクセスできます。

まあ、私の親愛なる読者の友人、この記事は突然停止するつもりです、メッセージにもかかわらず、満足のいくものではありません、私はあなたに壁に行く機会を与えることを約束します。

読んでくれてありがとう

私は短大時代にJavaを学びましたが、基礎が貧弱で教育が低かったため、仕事に多くの苦労をしました。明後日それを補うしかない。出力は入力を余儀なくされたので、私は自分の反撃を開始し、常にJavaのコア知識を学び、ブログプラットフォームで公開されたすべての経験を記事に書き込みました。より良い自己。

平凡になりたくなくて、学業の資格に制限されたくない場合は、Daguaiで私と一緒に進んでください!

興味深いテクノロジーを共有するだけでなく、プログラムの耐用年数も共有します。これらは「コックシルク」プログラマーから上級プログラマーまであなたを助けます。

私はあなたとのコミュニケーションを楽しみにしています。WeChatアカウントqing_geeeを送ってください。ご不明な点がございましたら、お気軽にご連絡ください。また、質の高い技術交流グループを結成しました。ご興味があれば、ご招待いたします参加します。

私の記事はすべて「サイレントキング2」パブリックアカウントとCSDNブログに初めて投稿されます。私の記事が気に入った場合はWeChatで「サイレントキング2を検索してください

「インタビュー」というキーワードに答えると、米国のグループボスが主催する貴重なインタビュー戦略を無料で入手できます

「同時実行性」に返信するだけでなく、Ali Danielが企画したJava並行プログラミングの実用的なガイドを初めて入手することもできます。

发布了690 篇原创文章 · 获赞 1万+ · 访问量 438万+

おすすめ

転載: blog.csdn.net/qing_gee/article/details/105581742