Java 中的類和對象詳情
類可以看成是創(chuàng)建Java對象的模板
1、類的定義
public class Dog { String name; int age; void eat() { } void sleep() { } }
2、類中變量的類型
局部變量:在方法或語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會自動銷毀。
成員變量(實(shí)例變量):成員變量是定義在類中,方法體之外的變量。這種變量在創(chuàng)建對象的時候?qū)嵗3蓡T變量可以被類中方法、構(gòu)造方法和特定類的語句塊訪問。
類變量:類變量也聲明在類中,方法體之外,但必須聲明為 static
類型。
3、構(gòu)造方法
構(gòu)造方法的名稱必須與類同名,一個類可以有多個構(gòu)造方法。
在創(chuàng)建一個對象的時候,至少要調(diào)用一個構(gòu)造方法。 如果沒有顯式地為類定義構(gòu)造方法,Java
編譯器將會為該類提供一個默認(rèn)構(gòu)造方法。
public class Dog { public Dog() { System.out.println("構(gòu)造Dog"); } }
4、重載方法
創(chuàng)建兩個具有相同名稱和不同參數(shù)列表(即不同的參數(shù)數(shù)量或類型)的方法時,就擁有了一個重載 方法。
在運(yùn)行時,JRE
基于傳遞給它的參數(shù)來決定調(diào)用您的重載方法的哪個變體。
我們甚至可以在一個方法中調(diào)用另一個同名的重載方法。
但要注意:在使用重載方法時,
- 不能僅通過更改一個方法的返回類型來重載它。
- 不能擁有兩個具有相同名稱和相同參數(shù)列表的方法。
5、繼承
要表示一個類繼承自某一個超類,我們可以在聲明類時,在 className
后加上 extends
,
例如:
public class Employee extends Person { // Employee 繼承自 Person public Employee() { super(); } public Employee(String name, int age, int height, int weight, String eyeColor, String gender) { super(name, age, height, weight, eyeColor, gender); } }
在構(gòu)造函數(shù)中,調(diào)用 super([args])
來初始化父類。
5.1 重寫方法
如果一個子類提供其父類中定義的方法的自有實(shí)現(xiàn),這被稱為方法重寫。
重寫的形式類似于重載,但需要加上一個 @Override
。例如,當(dāng)父類中有一個 foo()
方法時,我們可以在子類中這樣重寫它:
@Override public int foo() { // TODO Auto-generated method stub return super.foo(); }
【注】這段代碼是使用 Eclipse 自動生成的,它只是調(diào)用了父類中的方法(super.foo()),沒有任何改變,但實(shí)際中我們不會這么使用。
重寫后,在類中直接使用 method()
調(diào)用重寫后的函數(shù),但我們?nèi)稳豢梢酝ㄟ^ super.method()
調(diào)用父類中的(重寫前的)方法。
6、創(chuàng)建對象
對象是根據(jù)類創(chuàng)建的。 創(chuàng)建對象需要以下三步:
- 聲明:聲明一個對象,包括對象名稱和對象類型。
- 實(shí)例化:使用關(guān)鍵字
new
來創(chuàng)建一個對象。 - 初始化:使用
new
創(chuàng)建對象時,會調(diào)用構(gòu)造方法初始化對象。
public class Dog { public static void main(String[] args) { Dog Dog0 = new Dog(); } }
7、訪問實(shí)例變量和方法
- 訪問實(shí)例的變量:實(shí)例名.變量名
- 調(diào)用實(shí)例的方法:實(shí)例名.方法名()
public class Dog { String name; int age; void eat(String food) { System.out.println(name + " is eating " + food + "."); } public Dog() { name = "Dog"; age = 0; System.out.println("構(gòu)造():"); System.out.println(name + "\t" + age); } public Dog(String dogName, int dogAge) { name = dogName; age = dogAge; System.out.println("構(gòu)造(name, age):"); System.out.println(name + "\t" + age); } public static void main(String[] args) { Dog Dog0 = new Dog(); Dog Dog1 = new Dog("FooBar", 3); // 訪問變量 Dog0.name = "Ana"; System.out.println(Dog0.name); // 訪問方法 Dog1.eat("cat"); } }
運(yùn)行👆上面代碼將輸出:
構(gòu)造(): Dog 0 構(gòu)造(name, age): FooBar 3 Ana FooBar is eating cat.
8、比較對象
Java 語言提供了兩種比較對象的方法:
==
運(yùn)算符equals()
方法
8.1 使用 == 比較對象
==
語法比較對象是否相等,只有在 a
和 b
相等時,a == b
才返回 true
。
對于內(nèi)置基本類型,需要它們的值相等。
對于對象,需要兩個對象引用同一個對象實(shí)例。
例如:
import java.util.logging.Logger; public class Equals { public static void main(String[] args) { Logger l = Logger.getLogger("Test"); int i = 12, j = 12, k = 99; Integer a = new Integer(12); Integer b = a; Integer c = new Integer(12); l.info("i == j: " + (i == j)); l.info("i == k: " + (i == k)); l.info("a == b: " + (a == b)); l.info("a == c: " + (a == c)); } }
運(yùn)行這段代碼將得到如下結(jié)果:
i == j: true i == k: false a == b: true a == c: false
【注】若使用 a = Integer.valueOf(12); 與 c = Integer.valueOf(12); 分別得到 a 和 c,則 a == c 將是 true !
8.2 使用 equals() 比較對象
equals()
是每種 Java 語言對象都可以自由使用的方法,因?yàn)樗欢x為 java.lang.Object
的一個實(shí)例方法(每個 Java 對象都繼承該對象)。
調(diào)用 equals() 的方法如下:
a.equals(b);
此語句調(diào)用對象 a
的 equals()
方法,向它傳遞對象 b
的引用。
默認(rèn)情況下,Java 程序使用 ==
語法檢查兩個對象是否相同。但是因?yàn)?code> equals() 是一種方法,所以它可以被重寫。這樣,對于任何對象,我們都可定義適合的 equals()
的含義。
【注】在重寫 equals() 時,我們可以利用 object.hashCode()( to return a hash code value for the object.)
到此這篇關(guān)于Java 中的類和對象詳情的文章就介紹到這了,更多相關(guān)Java 中的類和對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Java Fluent Mybatis 聚合查詢與apply方法詳解流程篇
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于聚合查詢、apply方法詳解2021-10-10idea激活A(yù)ctivateJrebel熱部署的方法詳解
這篇文章主要介紹了idea激活A(yù)ctivateJrebel熱部署的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11