您好,登錄后才能下訂單哦!
小編給大家分享一下Java類和對象原理的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
什么是類?
什么是對象?
這是非常抽象的兩個概念!!!!!!!!
在說清楚類和對象的概念之前,給大家講一下什么是面向對象、面向過程,以此來推出我們類和對象的概念。
面向過程:以洗衣服為例:拿盆、放水、放衣服、放洗衣粉、手搓、換水、擰干、晾衣服,這個過程就是面向過程。
面向對象:以洗衣服為例:人把衣服放進洗衣機,倒入洗衣粉,洗完晾干,不需要關心洗衣服整個過程是怎么完成的,只需要找對象,創建對象,使用對象。在好比我們使用toString函數,我們并不關心toString函數具體的實現過程,我們直接交給Arrays幫我們實現就可以了,這就是面向對象。
對象從哪來的?對象就是從類來的,有類之后才有對象,人,洗衣機 ,洗衣粉,都是單獨的一個類。由類再產生對象,我們就叫做創建對象。對象都創建好了,每個對象都具備一些行為一些屬性,然后對象之間相互完成就可以了。這就是面向對象和面向過程。
要面向對象,我們就要找到對象,而對象是由類來的,類是從哪來的?我們是需要去抽象的。比如說:我們都是人,人的話都有共同的屬性,姓名、性別、年齡、吃飯、睡覺,每個人都會具備這些,相當于這就是一個模板,通過這個模板可以產生很多的對象,這些對象都具備這些相同的屬性。就是來抽象這個人,由這個人來創建對象,而這個人就是一個類。真正的要有這樣一個人,讓他是一個對象,是一個實體,就需要把他創建出來,通過new來創建。
class Person{ }//定義一個類,這個類叫Person,類名一定要是大駝峰 class Person{ //類里面包含字段,也叫做屬性,也叫做成員變量 //也包含方法 //一個類就是由方法和字段組成的 public String name;//屬性 public int age;//屬性 //什么是方法?可以解讀為這個人的行為 public void eat(){ System.out.println(name+" 正在吃飯"); } public void sleep(){ System.out.println(name+" 正在睡覺"); } }
由類產生對象的過程,術語我們叫做實例化,通過new關鍵字來實例化對象。
public class TestDemo { public static void main(String[] args) { Person person//定義一個變量person,此時類Person也相當于類型的意思,和int a = 10,a的類型是int一樣 } }
由類Person定義的變量person是引用變量,意味著它的初值可以給null
public class TestDemo { public static void main(String[] args) { Person person = null; } }
實例化對象
public class TestDemo { public static void main(String[] args) { Person person = new Person();//由類Person實例化了一個對象 } }
一個類可以實例化多個對象
public class TestDemo { public static void main(String[] args) { Person person = new Person();//由類Person實例化了一個對象 Person person1 = new Person(); Person person2 = new Person(); Person person3 = new Person(); Person person4 = new Person(); } }
普通成員變量
字段是定義在類的內部方法的外部,如果定義到方法里頭叫做局部變量,定義到方法外頭叫做成員變量
如何訪問成員變量,成員變量分為兩種:(普通成員變量、靜態成員變量)。普通的成員變量的訪問方式通過引用來訪問。
成員變量沒有賦初值的情況下都有一個默認的值
如何給成員變量賦值
如果是一個普通的成員變量,它的內存在對象里面,而不是說所有對象共用一份。每個對象都各有一份自己的name和age
方法也分為兩種:一種叫做普通成員方法,一種叫做靜態成員方法
普通的成員方法訪問方式也是一樣的,通過對象的引用來訪問我的方法。
被static修飾的的變量叫靜態成員變量,也叫做類變量,是放在方法區的
靜態成員變量的訪問方式是通過類名.靜態的成員屬性/方法。
不依賴對象
class Person{ public String name; public int age; public static int count; public void eat(){ System.out.println(name+" 正在吃飯"); } public void sleep(){ System.out.println(name+" 正在睡覺"); } } public class TestDemo { public static void main(String[] args) { Person.count++; System.out.println(Person.count); System.out.println("================"); Person.count++; System.out.println(Person.count); } }
打印結果;
count是被static修飾的靜態成員變量,是放在方法區的,不屬于某個對象,屬于類。正確的訪問靜態成員變量或者方法只要 類名.靜態成員變量/方法 就可以了,所有靜態的東西在方法區里只存一份,所以加2遍都是加的count本身,所以第二次打印的結果是2。
1.static定義的變量是類變量,屬于類,(定義在方法內部就屬于方法了,所以是錯誤的)
2.eat方法的調用,需要對應的引用來調用。但如果可以定義static的變量,類Person就可以調用,所以兩者直接是矛盾的,eat需要對應的引用來調用。size只需要類就可以調用。所以普通的方法內部, 不能夠定義靜態的變量。
static定義的變量是類變量,屬于類,(定義在方法內部就屬于方法了,這樣是做不到的,所以是錯誤的)
總結:靜態的成員變量是不可以在方法中定義的
普通方法里面是可以調用靜態方法的
class Person{ public String name; public int age; public static int count; public void eat(){ System.out.println(name+" 正在吃飯"); } public void sleep(){ staticFunc(); System.out.println(name+" 正在睡覺"); } public static void staticFunc(){ System.out.println("static::func"); } } public class TestDemo { public static void main(String[] args) { Person person = new Person(); person.eat(); person.sleep(); } }
打印結果:
靜態方法內部不能調用普通方法
靜態內部不可以調用普通方法,因為靜態的方法不依賴于對象, 通過類名就可以調用,但沒有對象普通方法沒法調用。
一個引用不可以同時指向多個對象
引用肯定是在棧上嗎?肯定不是
看綠線,畫圖解析
小寫的person屬于TestDemo這個類的成員變量
final修飾
private/ public 這兩個關鍵字表示 "訪問權限控制"
被 public 修飾的成員變量或者成員方法, 可以直接被類的調用者使用.
被 private 修飾的成員變量或者成員方法, 不能被類的調用者使用.
提供接口
打印結果:
構造方法:方法名和類名是相同的,且構造方法比較特殊,沒有返回值
構造方法是干嘛的?我們需要知道一個對象的產生(對象的實例化) 分為幾步
1.為對象分配內存
2.調用合適的構造方法
這就是一個構造方法
前面的訪問修飾符可以是public,
調用構造方法:
打印結果:
不帶參數和帶一個參數和帶兩個參數的構造方法
調用構造方法:
第一種:
第二種:
代表當前對象的eat方法
第三種:
調用不帶參數的構造方法,
打印結果 :
this函數必須放到第一行,只能存放在構造函數當中
本地代碼塊:
兩個括號
實例代碼塊和靜態代碼塊:
靜態代碼塊不管生成多少個對象,其只會執行一次,且是最先執行的。 靜態代碼塊執行完畢后, 實例代碼塊(構造塊)執行,再然后是構造函數執行。
看完了這篇文章,相信你對“Java類和對象原理的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。