コアJavaのノート(C)

オブジェクトとクラス

 

三つの重要な概念:

  • パッケージ

  • 受け継ぎます

  • ポリモーフィズム

クラス間の一般的な関係は以下のとおりです。

  • 依存性(使用-A)の別のクラスにオブジェクトクラスを操作する方法

  • 別のクラスのオブジェクトを含むクラスオブジェクト:重合(-Aを有します)

  • 継承(IS-A):クラスが別のクラスの(サブセット)を拡大して

可能な限り、クラスの相互依存性を最小限にするために長期的なソフトウェアエンジニアリングを使用して、それは間のクラスを作ることであるカップリングの最小程度

表記法UMLクラス関係の発現:

 

オブジェクトおよびオブジェクト参照エンティティを区別

オブジェクト変数(参照)は、実際のオブジェクトを含むが、唯一のオブジェクトエンティティのメモリアドレスを記憶していない、換言すれば、任意の変数の値は、ヒープ(ヒープ)の中に格納されたオブジェクトへのオブジェクト参照です。Javaオブジェクト変数が(代わりにC ++参照)ポインタをC ++オブジェクトと見なすことができ、この値はNULLにすることができ、それは現在、任意のオブジェクトを指していないことを示しています。

次のように、引用された値をコピーします。

 

カスタムクラス

 

ソースファイルは、ソースファイル名は、パブリッククラスの名前と同じでなければならない、またはコンパイルすることはできません、唯一の公共のクラスを持つことができますが、非publicクラスの任意の番号を持つことができます。

複数のソースファイルにコンパイルモード(シーケンシャル)、中央平野は、その本は:あなたはJavaコンパイラ考えることができる機能「作る」構築さを

 

コンストラクタ

  • 常に呼ばれ、新たな操作を伴います

  • あなたは、すでに存在するオブジェクトのコンストラクタを呼び出すことはできません

  • 設定がプログラムされていない場合は、デフォルトのコンストラクタには、インスタンスフィールドのパラメータがデフォルト値に設定されません

  • あなたはコンストラクタを記述しますが、引数なしのコンストラクタ、引数が違法として扱われませんコンストラクタが含まれていない場合

 

方法

メソッド宣言の列に明示的なパラメータに属する、クラス・オブジェクト・インスタンスメソッド、これによって内部で表されるメソッドの名前の前に(標的またはレシピエントメソッド呼び出し)に現れる隠れパラメータ。

書いてはいけませんメソッドは、変数オブジェクトを参照アクセサ返し、彼は理由の上記参照主体の違いを参照して述べました。データ変数領域のコピーを返すには、cloneメソッドを使用する必要があります。

プライベートプロパティにアクセスすることができます方法は、(のクラスに属するすべてのオブジェクトのプライベートデータ)が、私有財産へのアクセスの発信者に限定されません。

 

オーバーロード

(戻り型を含まない)メソッド名とパラメータ型は、メソッドシグネチャ(署名)を構成します。複数の方法がある場合は、同じ名前、または異なるパラメータタイプの順序を、それらが高負荷(過負荷)を生成、コンパイラは、選択に一致する特定のメソッドの呼び出しで使用されるタイプのそれぞれのプロセス値の型パラメータによって与えられます。対応する方法。 

 

最後の

オブジェクトが構築される場合、最終的なフィールドで変性の例としては、主にベース(プリミティブ)型ドメイン、または不変ドメインの(不変)のクラス(クラスに適用され、後者はそれを変更する操作を再ことができない、初期化されなければなりません各メソッド)がそのオブジェクトを変更しません。

可変クラスにfinal修飾子を使用するなど、関係を整理することが困難であってもよいです。

パブリック クラス従業員{
     プライベート 最終StringBuilderの評価;
     // ... 
    従業員(){ 
        評価 = 新しい新規のStringBuilder(); 
     //評価のStringBuilderが他のオブジェクトを参照するが、オブジェクトの現在の状態に変更することができない:
// evaluations.append( STR);
// ...
}
}

 

静的

オブジェクト指向言語の大半では、静的フィールドは、各クラスは、このクラスのすべてのオブジェクトが共有する、唯一のそのようなドメインで、クラスフィールドと呼ばれています。

静的メソッドは、次のような場合のために、クラスの名前を持つ暗黙のパラメータ法、コール(その使用のオブジェクト参照を提唱していない)、ではありません。

  • ターゲット状態へのアクセスを必要としない方法は、必要なパラメータが明示的に提供されています

  • ドメインへのアクセス方法は、静的なクラスが必要です

  • ファクトリメソッド(ファクトリメソッド)

  • mainメソッド

 

第二に、価値によってコール(合格)

 

  • (値によって呼び出し)値によって呼び出し:受信方法は、呼び出し元によって提供される値であります

  • (参照により呼び出し)参照により呼び出し:受信方法は、呼び出し元によって提供される可変アドレス

 

J AVAは常に方法により得られた値で呼び出しパラメータ値のコピーであり、内容は送信パラメータの変数を変更することはできません。ウェル2の下図は、異なる「変数を修正することはできません」および「参照物体点を変更する」を区別します。

 

 要約すると、方法

  • あなたは、パラメータの基礎となるデータ型を変更することはできません

  • オブジェクトは、状態パラメータを変更することができます

  • オブジェクトパラメータは、新しいオブジェクトを参照して任せることはできません

 

第三に、オブジェクトを構築

 

初期化

あなたは必要があります明示的にメソッド内のローカル変数を初期化しますが、クラスのフィールドを初期化しない場合は、自動的にデフォルト値(0 /偽/ヌル)に初期化されます。

明示的なフィールドの初期化方法:

  • ドメインを定義する直接割り当ての例

  • このキーワードで別のコンストラクタを(コードを保存)を呼び出し

  • 初期化ブロック

class Person {
    private int age;
    private boolean sex;
    private String name;
    private double asset;

    // initialization block
    {
        asset = 0;
    }

    // ...
}

在一个类的声明中,可以包含多个代码块,这些块会在构造对象时执行,运行顺序先于构造器。调用构造器的具体处理步骤如下:

  1. 所有数据域初始化为默认值

  2. 按照类声明中的次序,依次执行所有域初始化语句和初始化块

  3. 如果构造器第一行调用了第二个构造器,执行第二个构造器主体

  4. 执行这个构造器主体

 

静态初始化

在初始化块之前使用 static 关键字可以对静态域进行初始化,适用于无法准确知道赋值内容的时候:

// static initialization block
static {
    Random generator = new Random();
    nextId = generator.nextInt(10000);
}

类第一次加载时就会进行静态域的初始化,所有的静态域初始化语句、静态初始化块都将按照定义的顺序进行。

 

析构

Java 有自动的垃圾回收器(GC),不需要人工回收内存,因此 Java 不支持析构器。不过,如果对象使用了内存之外的其他资源(比如文件),那么当资源不再需要时,应该将其回收和再用。可以在类中添加 finalize 方法,它会在 GC 清除对象之前调用以回收资源。

由于难以预料 GC 什么时候会清除对象,所以不要依赖 finalize 方法来回收短缺的资源。如果某个资源需要在使用后立刻关闭,那么可以在对象的方法中调用一个相应的 close 方法。

 

四、包

 

名字相同的类放置于不同的包中,就不会产生冲突。借助包可以方便组织自己的代码,并与别人提供的代码库分开管理。标准的 Java 包具有一个层次结构,它们都处于 java 和 javax 包层次中。不过从编译器的角度来看,嵌套的包之间没有任何关系,每一个包的类集合都是独立的。

 

导入

一个类可以使用所属包中的所有类,以及导入的其他包中的公有类。 import 语句可以导入一个特定的类或者整个包(用 *),这是一种引用包含在包中的类的简明描述。只能用星号导入一个包,不存在一条语句导入多个包的情况。Java 中的 package  和 import 语句类似于 C++ 中的 namespace 和 using 指令。

前面提到过静态导入,结合 static 关键字并在类名后再接上星号,就可以使用指定类的静态方法和静态域,不必再加类名前缀。例如:

import static java.lang.System.*;
// ...
    out.println("good good study");
    exit(0);
// ...

 

作用域

如果一个类、方法或变量没有指定为 private 或 public,则这个部分可以被同一个包中的所有方法访问(默认访问权限)。对类来说,这种设计有一定的方便性,但对变量来说并不合适,有时会忘记加上修饰符,从而破坏封装性。因此,最好记得在声明变量时对访问权限作出显式标记。

 

五、类设计技巧

 

  • 一定要保证数据私有

  • 一定要对数据初始化

  • 尽量用其他类替代多个相关的基本类型的使用

  • 不是所有的域都需要独立的访问器和更改器

  • 将职责过多的类进行分解

  • 名字要体现职责

  • 优先使用不可变的类

 

おすすめ

転載: www.cnblogs.com/zzzt20/p/11441017.html