ディレクトリ
Javaクラス定義とクラスのインスタンス化
クラス定義
オブジェクト指向プログラミング、クラスができる、より美しく、より効率的に定義することが非常に重要であるか、そして、私たちのカスタムデータ型として見ることができます。
非常に重要であるそれぞれのクラスの多くのメンバーは、多くのJava開発者は是非、使用に私たちを待って、クラスの定義のうち、すべての後に、「オブジェクト指向」は、Javaを学んで本当に重要であります!それをキャプチャ!
直接コードに:
package com.my.pac02;
/**
* @author Summerday
* @date 2019/11/26 21:40
*/
//类名和文件名一致,且包含main方法
public class CatTest{
//程序入口
public static void main(String[] args) {
//创建对象
Cat cat = new Cat();
//为对象的属性赋值
cat.name = "sink";
cat.isMale = true;
//通过对象调用方法
cat.sleep();
cat.jump();
cat.laughAt("Susan");
System.out.println(cat.isNotMale());
//打印引用变量的值
System.out.println(cat);
//创建一个新的引用变量并指向原先的对象
Cat otherCat = cat;
System.out.println(otherCat);
System.out.println(otherCat.name);//"sink"
//将cat和实际对象之间的引用消除
cat = null;
}
}
//定义一个Cat类
class Cat{
//构造方法
Cat() {
System.out.println("cat is cute.");
}
//成员变量
String name;
int age;
boolean isMale;
String color = "Blue";
//方法
void sleep(){
System.out.println(name+"is sleeping---");
}
public void jump() {
System.out.println(name+"is jumping---");
}
public void laughAt(String otherName)
{
System.out.println(name+"is laughing at "+otherName);
}
//返回boolean类型的方法
boolean isNotMale() {
return !isMale;
}
}
単純なクラスを定義します
[修饰符] class 类名
{
(零个到多个)构造器...
(零个到多个)成员变量(属性)...
(零个到多个)方法...
}
- [修飾]クラスは、上記のコードである場合には変更することができる公共の、あるいは最終的な抽象も省略することができ、しかし、プライベート、保護推奨されません。参考:
外部プライベートを使用しないのはなぜJavaクラス、変更され保護されました - クラス名の命名規則は:より意味のある英単語組成の必要性を意味し、正義の名を知って見て、各単語は大文字、この種のものを規制する、遵守することをお勧めします!良い習慣を形成します。
- 上記で定義された(コンストラクタ、フィールド、メソッド)の三つのメンバーがゼロ以上であることができるが、ゼロは空のクラスになっている、それが意味を欠いています。
メンバ変数を定義します。
[修饰符] 类型 成员变量名 [=默认值];
//例如
boolean isMale;
String color = "Blue";
- インスタンス変数とクラス変数を含むメンバ変数、静的クラス変数と呼ばれる修正メンバ変数、その後、静的後に詳細に入ります。
メソッドの定義
[修饰符] 返回值类型 方法名(形参列表)
{
零条到多条可执行语句组成的方法体...
}
//例如
void sleep(){
System.out.println(name+"is sleeping---");
}
public void jump() {
System.out.println(name+"is jumping---");
}
public void laughAt(String otherName)
{
System.out.println(name+"is laughing at "+otherName);
}
//返回boolean类型的方法
boolean isNotMale() {
return !isMale;
}
コンストラクタを定義します。
[修饰符] 构造器名 (形参列表)
{
(零条到多条可执行语句组成的构造器执行体...
}
//例如
//构造方法
Cat() {
System.out.println("cat is cute.");
}
- クラスのインスタンスコンストラクタのコンストラクタ自動的にコンストラクタメソッドを呼び出しますが、クラスのオブジェクトを作成し、我々は後述します。
- コンストラクタ名とクラス名が同じでなければなりません!
- コンストラクタを定義しないと、システムはデフォルトのコンストラクタを提供します。
デザインクラスの詳細は、次を1つずつ開始します、とに関係していない場合の内部クラスとブロック部分は、我々は次の3つの部品の問い合わせから当分の間、学ぶことができます。
クラスのインスタンス化
クラスがインスタンス化されることにより、クラスオブジェクトのコンストラクタに属するプロセスが呼び出されます。オブジェクトは、特定のオブジェクトが存在しているにもインスタンスを呼ばれるクラスで定義されたインスタンス変数とメソッドと呼ぶことができます。(静的変数の変更を考慮せず)
オブジェクトを作成し、オブジェクトを使用します。
//使用Cat类创建了Cat类型的对象
//并调用Cat类的构造器,返回Cat的实例,赋值给变量cat
Cat cat = new Cat();
//访问cat的实例变量name和isMale,并为他们赋值
cat.name = "sink";
cat.isMale = true;
//调用cat的方法
cat.sleep();
cat.jump();
cat.laughAt("Susan");
//输出isNotMale()方法的返回值
System.out.println(cat.isNotMale());
- ケースは(アクセス権はさておき、民間や他のキーワードに関連した)アクセスを許可されている場合は、クラスで定義されたメンバ変数とメソッドは、クラスまたはインスタンスを介して起動することができます。
- オブジェクトの作成:
类型 实例名 = new 类型(参数列表);
例えば:Cat cat = new Cat();
- クラスのメンバ変数やメソッドを呼び出す:
类.类变量或类.方法
または实例.实例变量或实例.方法
、staticキーワードクラス変数が関与するだけでなく、脇に置くされた時間のために、その後、審査に進みます。
それは理解することができます。クラスの定義は、同じ特性を持っているこれらのインスタンスのクラスの多くのインスタンスを作成することです。
メモリ性能のオブジェクトの作成
クラスである参照データ型:ある、スタックメモリ上の参照変数は、実メモリオブジェクトメンバ変数ではないが、それは、前述と同様であり、ヒープメモリに隠された実際のメンバ変数への参照であります配列の型になって。また、それは知られており、スタックはヒープメモリの実際のオブジェクトのメモリアドレスに格納されている、あなたは直接印刷検証される変数猫の値を参照することができます。
- オブジェクトを作成します。
//创建对象,并初始化
Cat cat = new Cat();
- Accessインスタンス変数
//访问实例变量
cat.name = "sink";
cat.isMale = true;
Javaのヒープメモリオブジェクトへの直接アクセスを許可していない、オブジェクトはオブジェクトへの参照で動作することができます。
さらに、同じオブジェクトのヒープは、スタックメモリの変数の複数の点で参照することができます。例えば:
//把引用变量cat赋值给另一个引用变量otherCat
Cat otherCat = cat;
このとき、猫とotherCatは、スタックメモリ上に作成され、そして、彼らは、元の猫へのすべてのポイントは、彼らが同じ実際のオブジェクトに作動するように、ヒープメモリの一部を指摘しました。
メモリー・ヒープはせずにオブジェクトを任意の変数は、 Javaでの時間である、それは「廃棄物」意志と、を指すガベージコレクションメカニズム対象領域によって占有されていたメモリを解放します。
だから、彼が早く解放してみましょう、変数代入への直接参照がnullです。
参考図書:「狂気のJava配布資料」