類
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;
}
}