基于JavaSwing坦克大戰(zhàn)游戲的設計和實現(xiàn)
755
2025-04-01
類與對象
先來用一張圖來說說類與對象包括什么:
類:類的定義、包、變量、權(quán)限修飾符、方法重載、參數(shù)傳值、this關(guān)鍵字
對象:對象的定義、對象的創(chuàng)建格式及區(qū)別、對象屬性和行為的訪問、對象的引用比較和銷毀
類
類是一組具有相同屬性和行為的對象的抽象
舉例看看:
public class Heroes { private String name; private String role; static int roleId; final static double PI = 3.1415926; public Heroes(String name, String role) { this.name = name; this.role = role; } public Heroes() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public void fight(String message) { int id = 0; System.out.println("fight..." + id + ":" + message); } public static void bloodReturning(String home) { System.out.println("回血:" + home); } }
包
Java 中使用 package 語句定義包,package 語句應該放在源文件的第一行,在每個源文件中只能有一個包定義語句,并且 package 語句適用于所有類型(類、接口、枚舉和注釋)的文件。定義包語法格式如下:
包的命名
Java包的命名規(guī)則如下:
包名全部由小寫字母(多個單詞也全部小寫)
如果包名包含多個層次,每個層次用“.”分割
包名一般由倒置的域名開頭,比如com. baidu,不要有www
自定義包不能以 java開頭
包的使用
在要引用的類名前帶上包名作為修飾符
com.dingli.edu.Person person = new com.dingli.edu.Person();
在文件開頭使用import引用包中的類
import com.dingli.edu.Person;
在文件前使用import引用整個包
import com.dingli.edu.*;
這里列舉一下java文檔里的常用包
包
說明
java.lang
Java?的核心類庫,包含運行?Java?程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學函數(shù)、字符串處理、異常處理和線程類等,系統(tǒng)默認加載這個包
java.io
Java?語言的標準輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出、過濾輸入/輸出流等
java.util
包含如處理時間的?Date?類,處理動態(tài)數(shù)組的?Vector?類,以及?Stack?和?HashTable?類
java.awt
構(gòu)建圖形用戶界面(GUI)的類庫,低級繪圖操作?Graphics?類、圖形界面組件和布局管理(如?Checkbox?類、Container?類、LayoutManger?接口等),以及用戶界面交互控制和事件響應(如?Event?類)
java.awt.image
處理和操縱來自網(wǎng)上的圖片的?Java?工具類庫
java.wat.peer
很少在程序中直接用到,使得同一個?Java?程序在不同的軟硬件平臺上運行
java.net
實現(xiàn)網(wǎng)絡功能的類庫有?Socket?類、ServerSocket?類
java.lang.reflect
提供用于反射對象的工具
java.util.zip
實現(xiàn)文件壓縮功能
java.awt.datatransfer
處理數(shù)據(jù)傳輸?shù)墓ぞ哳悾糍N板、字符串發(fā)送器等
java.sql
實現(xiàn)?JDBC?的類庫
java.rmi
提供遠程連接與載入的支持
java.?security
提供安全性方面的有關(guān)支持
成員變量、局部變量、靜態(tài)變量的區(qū)別
注意事項:
局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。
成員變量
局部變量
定義的位置
類中,方法外
方法中,或者方法的形式參數(shù)
在類中,方法外
初始化值
有默認初始化值
無,先定義,賦值后才能使用
有默認初始化值
調(diào)用方式
對象調(diào)用
對象調(diào)用,類名調(diào)用
存儲位置
堆中
棧中
方法區(qū)
生命周期
與對象共存亡
與方法共存亡
與類共存亡
別名
實例變量
類變量
權(quán)限修飾符區(qū)別
public
Protected
Default
private
同一個類
√
√
√
√
同一個包
√
√
√
子類
√
√
√
不同包
√
方法重載
就是在同一個類中,方法的名字相同,參數(shù)列表不同(順序不同、個數(shù)不同、類型不同),實現(xiàn)相似的功能,與修飾符、返回值類型無關(guān)。我們會覺得方法調(diào)用的時候就像調(diào)用一個方法一樣 。
看看下面的第一個sum()靜態(tài)方法,里面的形參是int類型; 第二個重載就是都變了方法,形參是double類型;第三個是混合的參數(shù)類型。
public class OverLoad { public static void main(String[] args) { sum(5, 8); sum(4.5, 6.5); sum(1, 5, 2.3); } public static void sum(int a, int b) { int sum = a + b; System.out.println(sum); } public static void sum(double c, double d) { double sum = c + d; System.out.println(sum); } public static void sum(int e, int f, double g) { double sum = e + f + g; System.out.println(sum); } }
參數(shù)傳值
8大基本數(shù)據(jù)類型,參數(shù)傳遞過程采用值拷貝的方式
public class Demo { public static void main(String[] args) { int a = 10; change(a); System.out.println("main方法中a的值:" + a); } public static void change(int a) { a = a * 2; System.out.println("change方法中a的值:" + a); } }
參數(shù)類型為引用類型,參數(shù)傳遞的過程采用引用拷貝的方式
public class Demo { public static void main(String[] args) { Test test = new Test(10); change(test); System.out.println("main方法中a的值:" + test.a); } public static void change(Test test) { test.a = test.a * 2; System.out.println("change方法中a的值:" + test.a); } } class Test { public int a; public Test(int a) { this.a = a; } }
this關(guān)鍵字
關(guān)鍵字this表示當前對象,引用對象自身。 可以用于訪問實例的數(shù)據(jù)域, 尤其是實例變量和局部變量同名時,進行分辨。除此之外,可以在構(gòu)造方法內(nèi)部調(diào)用同一個類的其他構(gòu)造方法 。
public class ThisTest { public String name; public int age; public ThisTest(String name, int age) { this.name = name; this.age = age; } public void say() { String name = “tom"; System.out.println("name:" + this.name); } public static void main(String[] args) { ThisTest thisTest = new ThisTest("1810", 20); thisTest.say(); } }
對象
對象是一種個性的表示,表示一個獨立的個體,每個對象擁有自己獨立的屬性,依靠屬性來區(qū)分不同對象
對象的創(chuàng)建格式
格式一:聲明并實例化對象
類名稱對象名稱=new類名稱();
格式二:先聲明對象,然后實例化對象
類名稱對象名稱=null;
對象名稱=new類名稱();
引用數(shù)據(jù)類型與基本數(shù)據(jù)類型最大的不同在于:引用數(shù)據(jù)類型需要內(nèi)存的分配和使用。所以,關(guān)鍵字new的主要功能就是分配內(nèi)存空間,也就是說,只要使用引用數(shù)據(jù)類型,就要使用關(guān)鍵字new來分配內(nèi)存空間
兩種對象創(chuàng)建格式的區(qū)別從內(nèi)存角度來分析
(1)堆內(nèi)存(heap):保存對象的屬性內(nèi)容。堆內(nèi)存需要用new關(guān)鍵字來分配空間
(2)棧內(nèi)存(stack):保存的是堆內(nèi)存的地址
訪問對象的屬性和行為
public class Demo { int id = 12; public Demo() { } public void changeId() { id *= 2; System.out.println(id); } public static void main(String[] args) { Demo demo1 = new Demo(); Demo demo2 = new Demo(); demo2.id = 20; System.out.println("demo1的屬性值:" + demo1.id); demo1.changeId(); System.out.println("demo2的屬性值:" + demo2.id); demo2.changeId(); } }
對象的引用、比較和銷毀
對象引用語法格式:類名引用對象名稱
對象的比較:1、==運算符2、equals()方法
對象的銷毀:對象的銷毀利用的是Java中的垃圾回收機制
(1)對象引用超過其作用范圍
(2)將對象賦值為null
關(guān)于JAVA類與對象大概就介紹到這里了,感恩能與大家在華為云遇見!希望能與大家一起在華為云社區(qū)共同成長。
Java 數(shù)據(jù)結(jié)構(gòu)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。