java基礎(chǔ)的詳細(xì)了解第二天
1、方法的基本定義
限制條件:本次所講解的方法指的是在主類中定義,并且由主方法由主方法直接調(diào)用。
方法是指就是一段可以被重復(fù)調(diào)用的代碼塊。 在java里面如果想要進(jìn)行方法的定義,則可以使用如下的方法進(jìn)行完成。
public static 方法返回值 方法名稱([參數(shù)類型 變量,....]){ 方法體代碼 ; return [返回值]; }
在定義方法的時(shí)候?qū)τ诜椒ǖ姆祷刂涤梢韵聝深悾簐oid沒用返回值和數(shù)據(jù)類型(基本類型、引用類型)。
public class TestDemo{ public static void main(String args[]){ //如果要在主方法里面調(diào)用該方法,該方法一定要用static進(jìn)行修飾 print(); //主方法里面直接調(diào)用 print(); //主方法里面直接調(diào)用 print(); //主方法里面直接調(diào)用 } public static void print(){ System.out.println("Hello,World!"); } }
但是有一點(diǎn)要特別的注意就是當(dāng)返回值為void類型的時(shí)候,那么該方法當(dāng)中可以直接使用return來直接結(jié)束調(diào)用。在一般情況下和if判斷使用。
public class TestDemo{ public static void main(String args[]){ //如果要在主方法里面調(diào)用該方法,該方法一定要用static進(jìn)行修飾 print1(10); //主方法里面直接調(diào)用 print1(20); //主方法里面直接調(diào)用 print1(30); //主方法里面直接調(diào)用 } public static void print(){ System.out.println("Hello,World!"); } public static void print1(int x){ if(x == 20){ //表示方法結(jié)束的判斷 return ; //此語句之后的代碼不在執(zhí)行 } System.out.println("x = " + x); } }
2、方法重載
方法的重載是指:方法名稱相同,參數(shù)的類型或個(gè)數(shù)不同。
public class TestDemo2{ public static void main(String args[]){ //如果要在主方法里面調(diào)用該方法,該方法一定要用static進(jìn)行修飾 System.out.println(add(10,20)); //主方法里面直接調(diào)用 System.out.println(add(10,20,30)); //主方法里面直接調(diào)用 System.out.println(add(10.1,20.1)); //主方法里面直接調(diào)用 } public static int add(int a,int b){ return a + b; } public static int add(int a,int b,int c){ return a + b + c; } public static double add(double a, double b){ return a + b; } }
在方法重載的時(shí)候有一個(gè)重要的原則就是要求方法的返回值類型一定要相同。
通過用System.out.println()輸出發(fā)現(xiàn)所有的類型都可以進(jìn)行輸出,由此我們可以發(fā)現(xiàn)這個(gè)方法是一個(gè)重載的方法。
3、方法的遞歸調(diào)用
方法的遞歸調(diào)用指的是一個(gè)方法調(diào)用自己的形式。如果要進(jìn)行方法的遞歸操作往往都具備以下特點(diǎn)
方法必須有一個(gè)遞歸的結(jié)束條件
方法在每次遞歸處理的時(shí)候一定要做出一些變更
計(jì)算60!
public class TestDemo4{ public static void main(String args[]){ System.out.println(mul(60)); } public static double mul(double num){ if (num == 1){ return 1; } return num * mul(num - 1); } }
計(jì)算結(jié)果:
8.320987112741392E81
其實(shí)我們在使用while的循環(huán)操作大部分都可以使用遞歸,而使用遞歸是因?yàn)橹饕粋€(gè)方法可以執(zhí)行的操作很多,而且結(jié)構(gòu)簡單、好。
4、面向?qū)ο蟮那吧硎敲嫦蜻^程
兩者的區(qū)別:籠統(tǒng)的將最好的例子就是面向過程是解決問題,面向?qū)ο笫悄K化設(shè)計(jì)。對于現(xiàn)在的程序就像是汽車組裝,不同的工廠生產(chǎn)不同零件,將這些零件組裝在一起可以形成一個(gè)汽車,當(dāng)我們零件壞了的時(shí)候還可以進(jìn)行配裝。
面向?qū)ο笤趯?shí)際上還有很多的特點(diǎn)
- 封裝性:內(nèi)部的操作對外部而言是不可見的。
- 繼承性:在上一輩的基礎(chǔ)上繼續(xù)發(fā)展。
- 多態(tài)性:這是我們最為重要的一個(gè)環(huán)節(jié),利用多態(tài)性才可以得到良好設(shè)計(jì)。
三個(gè)階段:OOA(面向?qū)ο蠓治?、OOD(面向?qū)ο笤O(shè)計(jì))、OOP(面向?qū)ο缶幊? 專業(yè)化術(shù)語
5、類與對象
類和對象是面向?qū)ο蠛诵乃?,也是所有概念的基礎(chǔ)。類屬于我們的引用類型,所以類的使用會(huì)牽扯到我們的內(nèi)存分配問題
所謂的類就是一個(gè)共性的概念,而對象就是一個(gè)具體可以使用的事物。
類的組成:方法(操作行為)、屬性(變量,描述每一個(gè)對象的具體特點(diǎn))。
類的定義一般有class進(jìn)行聲明
class 類名稱{ 屬性1; //屬性可以是多個(gè) 屬性2; }
此時(shí)的方法不在由主類進(jìn)行調(diào)用,而是要通過對象進(jìn)行調(diào)用。
聲明實(shí)例化對象
class Person{ //定義一個(gè)類首先要將類的名稱每個(gè)首字母進(jìn)行大寫 public void info(){ System.out.println("name = "+ name + "\nage = " + age); } } public class TestDemo5{ public static void main(String args[]){ //實(shí)例化對象第一種方式 Person person = new Person(); person.name = "張三"; //設(shè)置對象中的屬性值 person.age = 13; //設(shè)置對象中的屬性值 person.info(); //實(shí)例化對象第二種方式 Person person1 = null; person1 = new Person(); person1.info(); } }
引用數(shù)據(jù)類型最大的特征在于內(nèi)存的分配操作,只要出現(xiàn)關(guān)鍵字new那么只有一個(gè)解釋:開辟新的內(nèi)存(內(nèi)存是不可能無限開辟的,所以這個(gè)時(shí)候所謂的性能調(diào)優(yōu)調(diào)整的就是內(nèi)存問題)。
內(nèi)存分析
我們使用的內(nèi)存空間分為兩塊:堆內(nèi)存空間(保存真正的數(shù)據(jù),保存對象的屬性信息)和棧內(nèi)存空間(保存的堆內(nèi)存的地址,堆內(nèi)存操作權(quán),簡單理解叫保存對象的名稱),所有數(shù)據(jù)類型必須在開辟空間后才能使用。如果使用了未開辟的數(shù)據(jù)類型則會(huì)出現(xiàn)NullPointerException,只有引用數(shù)據(jù)類型(數(shù)組、類、接口)才會(huì)產(chǎn)生此類異常,以后出現(xiàn)了根據(jù)錯(cuò)誤位置觀察其是否進(jìn)行實(shí)例化對象。
引用傳遞
引用傳遞的本質(zhì)就在于別名,而這個(gè)別名只不過是放在我們棧內(nèi)存當(dāng)中,一塊堆內(nèi)存可以被多個(gè)棧內(nèi)存所指向。
class Person{ //定義一個(gè)類首先要將類的名稱每個(gè)首字母進(jìn)行大寫 String name; int age; public void info(){ System.out.println("name = "+ name + "\nage = " + age); } } public class TestDemo5{ public static void main(String args[]){ //實(shí)例化對象第一種方式 Person per = new Person(); per.name = "張三"; //設(shè)置對象中的屬性值 per.age = 13; //設(shè)置對象中的屬性值 per.info(); //實(shí)例化對象第二種方式 Person per1 = null; per1 = new Person(); per1.name = "小于子"; per1.age = 30; per1.info(); //此步驟就是引用傳遞的操作 Person per2 = per1; per2.name = "狗剩"; per1.info(); } }
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Flink開發(fā)IDEA環(huán)境搭建與測試的方法
這篇文章主要介紹了Flink開發(fā)IDEA環(huán)境搭建與測試的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03如何用Maven開發(fā)Spring?Boot項(xiàng)目詳解
SpringBoot是一個(gè)集成Spring框架優(yōu)點(diǎn)的開源后臺(tái)開發(fā)框架,自動(dòng)化配置和內(nèi)嵌容器等特性減少了配置工作量,使得開發(fā)者可以更加專注于業(yè)務(wù)邏輯,這篇文章主要介紹了如何用Maven開發(fā)Spring?Boot項(xiàng)目,需要的朋友可以參考下2024-09-09深入理解Spring事務(wù)及傳播機(jī)制之原理解析與實(shí)際應(yīng)用
Spring事務(wù)管理機(jī)制提供了多種傳播行為,可以控制事務(wù)的范圍和隔離級別,保證數(shù)據(jù)一致性和完整性。在實(shí)際應(yīng)用中,需要根據(jù)具體業(yè)務(wù)場景選擇合適的傳播行為實(shí)現(xiàn)事務(wù)控制2023-04-04