<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
程式導向:當事件比較簡單的時候,利用程式導向,注重的是事件的具體步驟和過程,注重的是過程中的具體行為,以函數為最小單位,考慮怎麼做。
物件導向:注重找“參與者”,將功能封裝進物件中,強調具備了功能的物件,以類/物件為最小單位,考慮誰來做。
案例:小明從冰箱裡拿東西
程式導向:
物件導向:
程式導向 —> 物件導向 , 其實就是由執行者 —> 指揮者的 一個過渡
萬物皆物件
物件:具體的事物,具體的實體,具體的範例,模板下具體的產品
類:對物件向上抽取出像的部分,公佈部分,形成類,類是抽象的,是一個模板,一般在寫程式碼的時候先寫類,然後再根據類建立對應的物件
類是物件的抽象,物件是類的範例化
1.屬性(field 成員變數)
屬性用於定義該類或該類物件包含的資料或者說靜態特徵。屬性作用範圍是整個類體。
屬性定義格式:
[修飾符] 屬性型別 屬性名 = [預設值];
2.方法
方法用於定義該類或該類範例的行為特徵和功能實現。方法是類和物件行為特徵的抽象。方法很類似於程式導向中的函數。程式導向中,函數是最基本單位,整個程式由一個個函數呼叫組成。物件導向中,整個程式的基本單位是類,方法是從屬於類和物件的。
方法定義格式:
[修飾符] 方法返回型別 方法名(形參列表){
//Java語句
}
我們以上面王者榮耀英雄類建立為例:
//建立英雄類 public class Hero { //屬性 String Name;//英雄姓名 int Survive;//生存能力 int Attack;//攻擊傷害 int Skill;//技能效果 int Difficulty;//上手難度 //技能 public void Kill(int number){ //根據輸入的數位釋放幾技能 System.out.println(Name+"釋放"+number+"技能!!!"); } //輸出該英雄的屬性 public void print(){ System.out.println("英雄:"+Name); System.out.println("生存能力:"+Survive); System.out.println("攻擊傷害:"+Attack); System.out.println("技能效果:"+Skill); System.out.println("上手難度:"+Difficulty); } }
接下來我們對我們建立好的類來建立物件
public class TestCode01 { //main方法,程式的入口 public static void main(String[] args) { //建立一個物件(英雄)-->馬克波羅 Hero make = new Hero(); make.Name = "馬克波羅"; make.Survive = 4; make.Attack = 6; make.Skill = 6; make.Difficulty = 5; //再建立一個英雄-->瀾 Hero lan = new Hero(); lan.Name = "瀾"; lan.Survive = 3; lan.Attack = 5; lan.Skill = 4; lan.Difficulty = 6; lan.Kill(1); //輸出兩個英雄的屬性 make.print(); System.out.println("-------------"); lan.print(); //釋放技能 make.Kill(3); System.out.println("-------------"); lan.Kill(2); } }
結果: 每個英雄都有相同的屬性,每個屬性又有不同的值,通過類我們可以建立很多個物件,每個物件又有不同的屬性值。
比如:王者裡的一百多個英雄,每個都有不同的特點。
建立物件的過程:
(1)在第一次遇到一個類的時候,對這個類要進行載入,只載入一次。
(2)建立物件,在堆中開闢空間
(3)對物件進行初始化操作,屬性賦值都是預設的初始值。
(4)new關鍵字呼叫構造器,執行構造方法,在構造器中對屬性重新進行賦值
物件都是new出來的,new關鍵字實際上在呼叫一個方法,這個方法叫做構造方法(構造器)
呼叫構造器的時候,如果你的類中沒有寫構造器,那麼系統會預設給你分配一個構造器(空構造器)
構造方法格式:
[修飾符] 構造器名字(){
}
構造器和方法的區別:
構造器的作用:不是為了建立物件,因為在呼叫構造器之前,這個物件就已經建立好了,並且屬性有預設的初始化的值。
呼叫構造器的目的是給屬性進行賦值操作的。
注意:我們一般不會在空構造器中進行初始化操作,因為那樣的話每個物件的屬性就一樣了。
下面例子:
class Hero{ //屬性 String Name;//英雄姓名 int Survive;//生存能力 int Attack;//攻擊傷害 int Skill;//技能效果 int Difficulty;//上手難度 public Hero(){ Survive=4; Attack=5; Skill=6; Difficulty=7; } public void print(){ System.out.println("英雄:"+Name); System.out.println("生存能力:"+Survive); System.out.println("攻擊傷害:"+Attack); System.out.println("技能效果:"+Skill); System.out.println("上手難度:"+Difficulty); } } public class TestCode01 { public static void main(String[] args) { //建立兩個英雄物件 Hero make = new Hero(); make.Name="馬克"; Hero lan=new Hero(); lan.Name="瀾"; //輸出兩個屬性 make.print(); lan.print(); } }
因為我們在構造器裡面賦值了,所以我們建立物件的時候屬性就一樣了
實際上,我們只要保證空構造器的存在就可以了,裡面的東西不用寫,我們要用構造器賦值就要對構造器過載
一般保證空構造器的存在,空構造器中一般不會進行屬性的賦值操作
一般我們會過載構造器,在過載的構造器中進行屬性賦值操作
在過載構造器以後,假如空構造器忘寫了,系統也不會給你分配預設的空構造器了,那麼你要呼叫的話就會出錯了。所以我們過載構造器時,一般要保留預設構造器
當形參名字和屬性名字重名的時候,會出現就近原則:在要表示物件的屬性前加上this.來修飾 ,因為this代表的就是你建立的那個物件
this就是指當前的物件
this可以修飾屬性
當屬性名字和形參發生重名的時候,或者 屬性名字 和區域性變數重名的時候,都會發生就近原則,所以如果我要是直接使用變數名字的話就指的是離的近的那個形參或者區域性變數,這時候如果我想要表示屬性的話,在前面要加上:this.修飾(如果不發生重名問題的話,實際上你要是存取屬性也可以省略this.)
this修飾方法
在同一個類中,方法可以互相呼叫,this.可以省略不寫。
this可以修飾構造器
同一個類中的構造器可以相互用this呼叫,注意:this修飾構造器必須放在第一行
static可以修飾:屬性、方法、程式碼塊、內部類
static修飾屬性
在類載入的時候,會將靜態內容也載入到方法區的靜態域中,靜態的內容先於物件存在,並且這個靜態內容被所有該類的物件共用。
static修飾屬性的應用場景:某些特定的資料想要在記憶體中共用,只有一塊 -->這個情況下,就可以用static修飾的屬性。
static修飾方法:
程式碼塊的分類: 普通塊、構造塊、靜態塊、同步塊(多執行緒)
程式碼塊執行順序: 最先執行靜態塊–>再執行構造塊,(不常用)–>再執行構造器–>再執行方法中的普通塊
public class Test { //屬性 int a; static int sa; //方法 public void a(){ System.out.println("-----a"); { //普通塊限制了區域性變數的作用範圍 System.out.println("這是普通塊"); System.out.println("----000000"); int num = 10; System.out.println(num); } } public static void b(){ System.out.println("------b"); } //構造塊 { System.out.println("------這是構造塊"); } //靜態塊 static{ System.out.println("-----這是靜態塊"); //在靜態塊中只能方法:靜態屬性,靜態方法 System.out.println(sa); b(); } //構造器 public Test(){ System.out.println("這是空構造器"); } public Test(int a){ this.a = a; } //這是一個main方法,是程式的入口: public static void main(String[] args) { Test t = new Test(); t.a(); Test t2 = new Test(); t2.a(); } }
包的作用: 為了解決重名的作用,解決許可權問題
包名的定義:
導包:
(1)使用不同包下的類要需要導包, 例如:import java.util.Date;
(2)在導包以後,還想用其他包下同名的類,就必須要手動自己寫所在的包。
(3)同一個包下的類想使用不需要導包,可以直接使用。
(4)在java.lang
包下的類,可以直接使用無需導包
(5)可以直接匯入*
:
靜態匯入:
//靜態匯入: import static java.lang.Math.*; //匯入:java.lang下的Math類中的所有靜態的內容 public class Test { //這是一個main方法,是程式的入口: public static void main(String[] args) { System.out.println(random()); System.out.println(PI); System.out.println(round(5.6)); } //在靜態匯入後,同一個類中有相同的方法的時候,會優先走自己定義的方法。 public static int round(double a){ return 1000; } }
到此這篇關於Java 全方位講解物件導向特點與使用的文章就介紹到這了,更多相關Java 物件導向內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45