DabaiはJavaソフトウェア包囲の17日目になりました(オブジェクトの作成と使用、メモリ分析)

オブジェクトの作成と使用

public class OOTest01{
    
    
	publci static void main(String[] args){
    
    
		int i=10;
		Student s = new Student();

		int StuNo=s.no;
		System.out.println("学号 =" + StuNo);//0【默认值】
		System.out.println("学号 =" + s.no);//0【默认值】
		s.no=10;
		System.out.println("学号 =" + s.no);//10

		//再通过类实例化一个全新的对象
		//stu是一个引用
		//stu同时也是一个局部变量
		//Student是变量的数据类型
		Student stu = new Student();
		System.out.println("学号 =" + stu.no);// 0

		System.out.println("学号 =" + Student.no);//编译错误,不能直接采用“类名”的方式访问
		//因为no是实例变量,对象级别的变量,变量存储在java对象的内部,必须先有对象,通过对象才能访问no这个实例变量,不能直接通过“类名”访问
	}
}
//学生类
//学生类是一个模板
//描述了所有学生的共同特征【状态+行为】
//当前类只描述学生的状态信息【属性】
public class Student{
    
    
//类体=属性+方法

//属性【存储数据采用变量的形式】
//由于变量定义在类体当中,方法体之外,这种变量称为成员变量
//所有学生都有学号信息
//但是每一一个学生的学号都是不同的
//所以要访问这个学号必须先创建对象,通过对象去访问学号信息
//学号信息不能直接通过"类"去访问,所以这种成员变量又被叫做:实例变量
//对象又被称为实例,实例变量又被称为对象变量。【对象级别的变量】
//不创建对象,这no变量的内存空间是不存在的,只有创建了对象,这个no变量内存空间才会创建。
int no;
String name;//姓名
boolean sex;//性别
int age;//年龄
String address;//住址
  • N個のオブジェクトは、クラスを介してインスタンス化できます。
  • オブジェクトをインスタンス化するための構文:new 类名()
  • newはJava言語の演算子です
  • new演算子の役割は、オブジェクトを作成し、JVMヒープメモリに新しいメモリスペースを開くことです。
  • メソッド領域メモリ:クラスがロードされると、クラスバイトコードコードフラグメントがこのメモリスペースにロードされます。
  • スタックメモリ(ローカル変数):メソッドコードフラグメントが実行されると、メモリスペースがメソッドに割り当てられ、スタックメモリにプッシュされます。
  • ヒープメモリ:新しいオブジェクトはヒープメモリに保存されます

にとってStudent s = new Student ();

  • 学生は参照データ型です
  • sは変数名です
  • new Student()は学生オブジェクトです
  • sはローカル変数[スタックメモリに格納]:参照
  • オブジェクトとは何ですか?ヒープメモリ内の新しい演算子によって開かれたメモリ空間は、オブジェクトと呼ばれます。
  • 参照とは何ですか?参照は変数ですが、この変数は別のJavaオブジェクトのメモリアドレスを保持します。
  • Java言語では、プログラマーはヒープメモリを直接操作できません。C言語とは異なり、Javaにはポインタがありません。
  • Java言語では、プログラマーは「参照」を介してのみヒープメモリ内のオブジェクト内のインスタンス変数にアクセスできます。

インスタンス変数にアクセスするための構文形式:

データの読み取り:参照。変数名
データの変更:参照。変数名=値
int StuNo=s.no;

ローカル変数はスタックメモリに格納され
、メンバー変数のインスタンス変数はヒープメモリのJavaオブジェクト内に格納されます

インスタンス変数はオブジェクトの1つのコピーであり、100個のオブジェクトには10​​0個のコピーがあります

public class Customer
{
    
    
	int id;
}

public class OOTest02
{
    
    
	public static void main(String[] args){
    
    
		Customer c= new Customer();
		System.out.println(c.id); //0

		c=null;
		//以下程序编译可以通过,因为符合语法
		//运行出现空指针异常
		//空引用访问“实例”相关的数据一定会出现空指针异常
		//java.lang.NullPointerException
		System.out.println(c.id);
	}
}

「インスタンス」に関連するデータは、オブジェクトがこの訪問に関与している必要があることを意味します。この種のデータはインスタンス関連のデータです。

キー:インスタンス変数オブジェクトを作成し、参照によってアクセスする必要が类名.あります。アクセス方法を直接使用することはできません。

メモリ分析

1. JVM(Java仮想マシン)には、主に3つのメモリ空間が含まれています。それらは、スタックメモリ、ヒープメモリ、およびメソッド領域メモリです。

2.1つのヒープメモリと1つのメソッドエリアメモリがあります。スレッドごとに1つのスタックメモリ。

3.メソッドが呼び出されると、メソッドに必要なメモリスペースがスタックメモリに割り当てられます。これはスタッキングと呼ばれます。メソッドの実行が終了すると、メソッドが属するメモリスペースが解放されます。これはポップスタックと呼ばれます。

4.スタックの主なストレージは、メソッド本体のローカル変数です。

5.メソッドとクラス全体のコードフラグメントはメソッド領域メモリに格納され、これらのコードフラグメントはクラスがロードされるときにロードされます。

6.プログラムの実行中にnew演算子によって作成されたJavaオブジェクトは、ヒープメモリに格納されます。オブジェクト内にはインスタンス変数があるため、インスタンス変数はヒープメモリに格納されます。

7.変数の分類:

  • ローカル変数[メソッド本体で宣言]
  • メンバー変数[メソッドinvitro宣言]
    インスタンス変数[フロントモディファイアには静的がありません]
    静的変数[フロントモディファイアには静的があります]

8.静的変数はメソッド領域メモリに保存されます。[最初の暗記会議]

9.スタックメモリは、3つのメモリの中で最も頻繁に変更されます。メソッド領域メモリは、最初にデータを取得します。ガベージコレクタは、主にヒープメモリを対象としています。

10.ガベージコレクター[自動ガベージコレクションメカニズム、GCメカニズム]はいつ特定のJavaオブジェクトのメモリのリサイクルを検討しますか?

  • ヒープメモリ内のJavaオブジェクトがガベージデータになると、ガベージコレクタによってリサイクルされます。

11、ゴミの山がそれになるときのJavaオブジェクト?

  • それへの参照がこれ以上ないとき。オブジェクトは参照によってのみアクセスできるため、このオブジェクトにはアクセスできません。

おすすめ

転載: blog.csdn.net/qq2632246528/article/details/112942475