類 & 對象的創建 & JVM內存分配分析 & 構造方法普通方法&this

public class Person {
	//成員變量
	String  name;//姓名
	String sex;//性別
	int height;//身高
	int weight;//體重
	
	//方法
	//喫
	public void  eat() {
		System.out.println(name+" 喫飯....");
	}
	//喝
	public void drink() {
		System.out.println(name+" 喝啤酒");
	}
	//寫代碼
	public void writeCode() {
		System.out.println(name+" 寫java代碼");
	}
	
}

對象創建

對象的創建過程也被稱爲對象的實例化過程
語法:類名 標識符 = new 類名();

class Person
{
	//第一部分
	//成員變量:特徵【名詞】
	//非靜態成員變量
	String name;//null
	int age;//0
	char gender;//\u0000

	//第二部分
	//成員方法:行爲【動詞】
	//非靜態成員方法
	public void eat() {
		System.out.println("eating~~~~");
	}
}
//演示對象的創建,跨類進行調用成員方法以及訪問成員變量
//測試類:含有main函數得類被稱爲測試類
public class TestPerson 
{
	public static void main(String[] args) 
	{
		//1.創建對象
		//語法:類名 變量名稱  = new  類名();
		Person xiaoMing = new Person();

		//2.調用對象屬性
		//語法:對象.
		xiaoMing.name = "小明";
		xiaoMing.age = 10;
		xiaoMing.gender = 'B';
		//3.調用對象方法
		xiaoMing.eat();
	}
}

JVM內存分配分析

程序運行時,操作系統會分配三塊主要的內存空間

  • 棧:直接存放基本類型數據,和引用類型的地址
  • 棧空間比較小,存取速度相對較快
  • 先進後出
  • 堆:存放引用類型的實際數據部分
  • 堆空間比較大,存取速度相對較慢
  • 方法區:(靜態區、串池(常量池)、代碼段),方法區中有一塊空間叫串池,用來存放字符串常量,
    在jdk1.8之後常量池作爲堆中一部分,方法區的概念弱化。

說明:程序中定義的Person類型的變量實際上是一個引用,它被存放在棧內存中,他指向實際的Person對象,而真正的Person對象則存放於堆內存中

構造方法普通方法

構造方法

訪問權限修飾符 類名(參數列表) {
	//方法體
}

普通方法:

訪問權限修飾符 其他的修飾符 返回值類型 方法名(參數列表) {

}

注意:

a.構造方法沒有返回值類型,構造方法是在實例化對象的過程中自動調用的

b.如果不寫構造方法,系統會默認爲我們提供一個無參的構造方法,如果添加了構造方法,系統不再提供默認的構造方法。

構造方法和普通方法的區別

a.構造方法是在創建對象的過程中自動調用的,普通方法只能手動進行調用

b.構造方法沒有返回值類型【注意區別返回值void】,普通方法的返回值類型要麼是確定的類型,要麼爲void

c.系統會默認爲我們提供一個無參的構造方法,普通方法只能手動添加

d.構造方法的方法名稱必須和對應的類名保持一致

e.構造方法在創建對象的過程中就會執行,而且每個對象只執行一次,對於普通方法而言,只有在需要使用的時候才被執行,並且一個對象可以調用多次
//演示構造方法的使用
public class Test 
{
	public static void main(String[] args) 
	{
		//創建動物
		Animal dog=new Animal();
		//使用屬性
		dog.color="黃色";
		dog.nickname="旺財";
		dog.age=3;
		//使用方法
		dog.eat();
	}
}

public class Animal {
	//顏色
	String color;
	//暱稱
	String nickname;
	//年齡
	int age;
	//默認構造方法
	public Animal() {
		
	}
	
	//喫
	public void eat() {
		System.out.println(nickname+"大口大口喫東西");
	}
}

構造方法重載

默認構造方法:只能創建對象,不能做任何初始化操作,如果實現創建對象時初始化屬性,需要添加帶參的構造方法,初始化對象的屬性。如果一個類中有多個構造方法,這就是構造方法重載。

//演示構造方法的重載
//測試類
public class Test 
{
	public static void main(String[] args) 
	{
		//直接賦值
		/*
		Dog maomao = new Dog();
		maomao.name = "毛毛";
		maomao.age = 3;

		maomao.lookHome();
		*/

		//通過構造方法賦值
		Dog dahuang = new Dog("大黃",5);
		dahuang.lookHome();
	}
}

//實體類
public class Dog
{
	//成員變量
	String name;
	int age;

	//構造方法
	public Dog() {}
	//有參的構造方法,參數一般設置爲和成員變量有關的參數
	public Dog(String n,int a) {
		//給成員變量賦值
		name = n;
		age = a;
	}
	//成員方法
	public void lookHome() {
		System.out.println(name + "看家");
	}
}

this

this:    表示當前對象的引用。
this.屬性     訪問本類的成員屬性    作用:爲了區分成員變量和形參變量名一樣的情況
this.方法     訪問本類的成員方法
this()(瞭解)

訪問本類中的其他構造方法

注意:

	a.必須出現在構造方法中

	b.訪問的是除了當前構造方法之外的其他構造方法

	c.具體訪問的是哪個構造方法,取決於所傳的參數

	d.只能書寫在構造方法的第一條語句

	e.this()在同一個構造方法中只能出現一次
public class Test 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}
public class Dog
{
	 String name;
	 int age;
	 int num;
	 String hobby;

	//提高代碼的可讀性,可維護性
	//構造方法
	public Dog() {
	}
	public Dog(String name) {
		this.name = name;
	}
	public Dog(int age) {
		this.age = age;
	}

	public Dog(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public Dog(String name,int age,int num,String hobby) {
		this(name,age);
		this.num= num;
		this.hobby = hobby;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章