面向?qū)ο?1-方法(重載)/包/修飾符

面向?qū)ο?1-方法(重載)/包/修飾符

[TOC]

1、面向?qū)ο笈c面向過(guò)程

面向?qū)ο蠛兔嫦蜻^(guò)程都屬于思考問(wèn)題的方式

面向過(guò)程:以執(zhí)行者的角度思考問(wèn)題,側(cè)重于實(shí)現(xiàn)的過(guò)程,或側(cè)重于“怎么做”,比較適合解決小型的問(wèn)題
面向?qū)ο螅阂灾笓]者的角度思考問(wèn)題,側(cè)重于“誰(shuí)來(lái)做”,比較適合解決中大型的問(wèn)題

總結(jié):面向?qū)ο蠛兔嫦蜻^(guò)程并不是完全獨(dú)立的。一般來(lái)講,從宏觀上先用面向?qū)ο笏伎挤绞?,然后在?xì)節(jié)上又使用了面向過(guò)程的思考方式

2、類(lèi)和對(duì)象

對(duì)象:客觀世界中存在的一切可以被描述的事物,都稱為對(duì)象

通過(guò)對(duì)象的特征(屬性和方法)區(qū)分對(duì)象
屬性:描述對(duì)象的靜態(tài)、外觀的特性,比如 姓名、顏色、身高、價(jià)格等
方法:描述對(duì)象的行為或功能,比如吃、喝、學(xué)習(xí)、睡覺(jué)、能盛水等

類(lèi): 一組具有相同屬性和方法的對(duì)象的集合,抽取成類(lèi)(歸納總結(jié)出來(lái)的)

區(qū)別:
對(duì)象:實(shí)際存在的,可以直接操作,是一個(gè)具體的實(shí)例
類(lèi):抽象的、模板式的存在,不可以直接操作

聯(lián)系:
類(lèi):是一組對(duì)象的集合,是對(duì)象的類(lèi)型(切記),是通過(guò)對(duì)象歸納總結(jié)出來(lái)的產(chǎn)物
對(duì)象:在java中,通過(guò)類(lèi)創(chuàng)建出來(lái)的具體的實(shí)例
2.1、類(lèi)和對(duì)象的的創(chuàng)建
【修飾符】 class 類(lèi)名{
        編寫(xiě)屬性
        編寫(xiě)方法
    }

類(lèi)名 對(duì)象名 = new 類(lèi)型();
對(duì)象名.屬性=值;
對(duì)象名.方法();
2.2、類(lèi)和對(duì)象的內(nèi)存分配圖
//棧:對(duì)象的引用、局部變量
//堆:對(duì)象和全局變量(屬性)在堆中創(chuàng)建新對(duì)象
//方法區(qū):類(lèi)信息
//語(yǔ)法:類(lèi)名 對(duì)象名=new  類(lèi)名();
Person p1 = new Person(); //該句 首先在內(nèi)存中判斷類(lèi)是否加載 如果沒(méi)有加載 使用類(lèi)加載器加載類(lèi)(到方法區(qū)) 然后在創(chuàng)建對(duì)象
//先去判斷需要的類(lèi)是否已經(jīng)加載,如果已經(jīng)加載了,則無(wú)需再加載,如果沒(méi)有加載,則需要通過(guò)類(lèi)加載器加載類(lèi)信息到方法區(qū)
image

3、類(lèi)的成員之一:屬性

1、屬性的類(lèi)型可以為任意類(lèi)型,包含基本類(lèi)型和引用類(lèi)型 (一個(gè)類(lèi)也可以做屬性)

2、每個(gè)對(duì)象的屬性是獨(dú)立的。其中一個(gè)對(duì)象對(duì)其屬性進(jìn)行更改,不影響另外一個(gè)

3、屬性的定義語(yǔ)法和使用,同變量,也就是本質(zhì)上就是變量

變量根據(jù)作用域不同,可以分為兩類(lèi):全局變量和局部變量

變量的作用域:也就是變量的作用范圍,根據(jù)變量定義的位置決定的,一般是指包含變量定義的最近的大括號(hào)

全局變量:作用域?yàn)檎麄€(gè)類(lèi)體,也就是屬性或成員變量

局部變量:作用域?yàn)榘姆椒ɑ虼a塊中,也就是除了屬性,其他的變量都是局部變量

3.1 全局變量和局部變量
作用域 存儲(chǔ)位置 生命周期 變量重名 默認(rèn)值 訪問(wèn)可見(jiàn)性 修飾符
全局變量 較大,整個(gè)類(lèi) 長(zhǎng) 不能重名 本類(lèi)或者其他類(lèi)
局部變量 較小,方法或者代碼塊 局部有交集不能重名 但是一個(gè)全局和一個(gè)局部可以重名 遵循就近原則 b本類(lèi)的方法或者代碼

4、類(lèi)的成員之二:方法

4.1、方法的理解和好處

理解

方法 :定義在類(lèi)體中,描述了一組對(duì)象的行為或功能。又稱為函數(shù)。

好處:

1、對(duì)于調(diào)用者來(lái)講,不關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié),調(diào)用比較方便,只需要關(guān)心
“叫什么”和“干什么”。

從一定程度上來(lái)講,提高了安全性和封裝性

2、對(duì)于設(shè)計(jì)者來(lái)講,提高代碼的重用性和維護(hù)性

4.2、方法的五要素★

1、修飾符
? 可選

2、返回類(lèi)型
? 特點(diǎn):某個(gè)方法執(zhí)行結(jié)束后需要返回給調(diào)用方一個(gè)結(jié)果,則該方法需要設(shè)計(jì)成帶返回值的方法
?

① 一個(gè)方法至多有一個(gè)返回值
②返回類(lèi)型可以為任意數(shù)據(jù)類(lèi)型,包含基本類(lèi)型或引用類(lèi)型
public int method(){}
public Person method(){}
public int[] method(){}

③如果方法沒(méi)有返回值,則返回類(lèi)型寫(xiě)void,方法體中不需要return語(yǔ)句
如果方法有返回值,則返回類(lèi)型寫(xiě)返回值的類(lèi)型(一致或兼容),方法體中必須寫(xiě)上return 值;

public void method(){
    syso();
    
}
public int method(){
    syso();
    return a;
    
}

④如果方法有返回值,則要保證方法體的執(zhí)行語(yǔ)句最后一句肯定為return語(yǔ)句

public int method(){
    if(){
        return 100;
    }
}

3、方法名

4、參數(shù)列表
? 特點(diǎn):有的行為的執(zhí)行,需要調(diào)用方在最開(kāi)始傳入一些值,才能執(zhí)行,這些值稱為參數(shù)

①參數(shù)可以有0個(gè)或多個(gè),具體語(yǔ)法

(參數(shù)類(lèi)型 參數(shù)名,參數(shù)類(lèi)型 參數(shù)名)

②參數(shù)類(lèi)型 可以為任意類(lèi)型,包含基本類(lèi)型或引用類(lèi)型

public void method(int a,String b,int[] arr,Person per){}

③調(diào)用帶參數(shù)的方法時(shí),必須傳入指定類(lèi)型的參數(shù),否則報(bào)錯(cuò)!

5、方法體

特點(diǎn):描述功能或行為具體實(shí)現(xiàn)的步驟,里面可以放任意邏輯語(yǔ)句,輸入、輸出、變量、循環(huán)、方法的調(diào)用等,但不能放方法的定義
4.3、方法的聲明 ★
語(yǔ)法:

修飾符  返回值類(lèi)型  方法名 ( 參數(shù)列表) {
     方法體語(yǔ)句;
} 

具體形式:

1.無(wú)返回?zé)o參
2.有返回?zé)o參
3.無(wú)返回有參
4.有返回有參
4.4、方法的調(diào)用 ★
語(yǔ)法:
同一個(gè)類(lèi)中:  
    類(lèi)型 名 = 方法名(參數(shù)列表);

不同類(lèi)中:
    類(lèi)型 名 = 對(duì)象名.方法名(參數(shù)列表);
4.5、方法的調(diào)用機(jī)制 【理解】

棧:先進(jìn)后出

image

? 每次調(diào)用方法,伴隨著“方法入棧”操作,也就是棧中為該方法分配了一塊空間,用于保存該方法中涉及到的變量

每次方法調(diào)用結(jié)束,伴隨著“方法出?!辈僮?,也就是棧中分配的空間被釋放了。

4.6、方法的參數(shù)傳遞 【面試題】 ★
package day08;

/*
 * 此類(lèi)用于演示
 * 一、方法的參數(shù)類(lèi)型為:引用類(lèi)型
 *  ①數(shù)組類(lèi)型
 *  ②對(duì)象類(lèi)型
 * 
 * 二、方法的返回類(lèi)型為:引用類(lèi)型
 *  ①數(shù)組類(lèi)型
 *  ②對(duì)象類(lèi)型
 * 
 * 
 */

public class TestArgs {
    
    public static void main(String[] args) {
        MyUtils mu = new MyUtils();
        //調(diào)用數(shù)組類(lèi)型做參數(shù)的方法
        double[] arr={100,2,5.8,980.5,89};
        double max = mu.getMax(arr);
        System.out.println(max);
        System.out.println("====================");
        
        //調(diào)用對(duì)象類(lèi)型做參數(shù)的方法
        Book book = new Book();
        book.price=900;
        book.name="葵花寶典";
        mu.setBookPrice(book);
        System.out.println(book.name+"\t"+book.price);      
        System.out.println("====================");
        
        //調(diào)用數(shù)組類(lèi)型做返回的方法
        int[] src={2,3,4};
        int[] dest = mu.arrayCopy(src, src.length);
        for (int i = 0; i < dest.length; i++) {
            System.out.print(dest[i]);
            System.out.println();
        }
        System.out.println("====================");
        
        //調(diào)用對(duì)象類(lèi)型做返回的方法
        Book copyBook = mu.copyBook(book);
        System.out.println(copyBook.name+"\t"+copyBook.price);
    }
    

    }

    
class MyUtils{
    //參數(shù)類(lèi)型:數(shù)組類(lèi)型
    //定義方法,實(shí)現(xiàn)求某個(gè)double數(shù)組的最大值,并返回
    public double getMax(double[] arr){
        double max = arr[0];
        for(int i = 0;i<arr.length;i++){
            if(max<arr[i])
                max = arr[i];
        }
        return max;
    }
    //參數(shù)類(lèi)型:對(duì)象類(lèi)型
    //實(shí)現(xiàn)更改某本書(shū)的價(jià)格,具體:如果價(jià)格>150,則更改為150,如果價(jià)格>100,更改為100,否則不變
    public void setBookPrice(Book book){
        if(book.price>150){
            book.price = 150;
        }else if(book.price>100){
            book.price=100;
        }
    }
    
    //返回類(lèi)型:數(shù)組類(lèi)型
    //  場(chǎng)景:實(shí)現(xiàn)數(shù)組的復(fù)制功能,根據(jù)舊數(shù)組和指定長(zhǎng)度,返回一個(gè)新數(shù)組,元素和舊數(shù)組一樣
    public int[] arrayCopy(int[] src, int  len){
        int [] dest = new int[len];
        int length = len<src.length?len:src.length;
        for(int i=0; i<src.length;i++){
            dest[i] = src[i];
        }
        return dest;
    }
    //返回類(lèi)型:對(duì)象類(lèi)型
    //場(chǎng)景:實(shí)現(xiàn)Book對(duì)象的復(fù)制,新Book的書(shū)名和舊Book一樣,價(jià)格為舊Book的2倍
    public Book copyBook(Book book){
        Book newBook = new Book();
        newBook.name=book.name;
        newBook.price=book.price*2;
        return newBook;
    }
    
}

class Book{
    String name;
    double price;
}

當(dāng)調(diào)用方法時(shí),將實(shí)參傳遞給形參(參數(shù)的賦值)的過(guò)程,稱為方法的傳參。

特點(diǎn):★
? 基本類(lèi)型做參數(shù),傳遞的是值,形參的改變不影響實(shí)參
? 引用類(lèi)型做參數(shù),傳遞的是地址,形參的改變(成員)影響實(shí)參\

注意:
當(dāng)引用類(lèi)型做參數(shù)時(shí),如果形參改變的是(地址),則最終不影響實(shí)參(new了一個(gè)新的地址)

image
image
【面試題】java中方法的參數(shù)傳遞的是什么?
java中,方法參數(shù)是按值傳遞!
如果是基本類(lèi)型,則值 代表元素內(nèi)容
如果是引用類(lèi)型,則值 代表地址號(hào)
4.7、方法重載 √

概念:
? java中允許同一個(gè)類(lèi)中,多個(gè)方法的名稱相同,但參數(shù)列表必須不同
? 這種現(xiàn)象稱為重載!

在同一個(gè)類(lèi)中 同名方法情況下 只和參數(shù)有關(guān)

①、必須保證參數(shù)列表中至少有一樣不同(參數(shù)類(lèi)型、參數(shù)個(gè)數(shù)、參數(shù)順序)
②、返回類(lèi)型無(wú)要求
③、修飾符無(wú)要求

4.8、可變參數(shù)的方法 √
jdk5.0出現(xiàn)的新特性。將同一個(gè)類(lèi)中,多個(gè)方法名相同、參數(shù)類(lèi)型相同、返回類(lèi)型相同,僅僅是參數(shù)個(gè)數(shù)不同的方法抽取成一個(gè)方法,這種方法稱為可變參數(shù)的方法

好處:
? 提高代碼的重用性和維護(hù)性

語(yǔ)法:

    修飾符 返回類(lèi)型    方法名(參數(shù)類(lèi)型...參數(shù)名){
        
    }

注意:使用時(shí),將可變長(zhǎng)度的參數(shù)當(dāng)做數(shù)組使用

使用特點(diǎn):

    1、可變參數(shù)的實(shí)參可以為0個(gè)或任意多個(gè)
    2、可變參數(shù)的實(shí)參可以為一維數(shù)組類(lèi)型
    3、可變參數(shù)和普通類(lèi)型參數(shù) 一起使用時(shí),只能放在最后
    4、一個(gè)參數(shù)列表中至多有一個(gè)可變參數(shù)!

5、包的使用

1、類(lèi)似于文件系統(tǒng)的文件夾,可以實(shí)現(xiàn)分類(lèi)管理類(lèi)文件,方便查找
2、解決了同一個(gè)項(xiàng)目中同名類(lèi)的沖突問(wèn)題

命名規(guī)則:
? 標(biāo)識(shí)符+小圓點(diǎn)
? 標(biāo)識(shí)符:只能包含數(shù)字、字母、下劃線和$符號(hào),不能以數(shù)字開(kāi)頭,不能是關(guān)鍵字或保留字
?

寫(xiě)法:標(biāo)識(shí)符.標(biāo)識(shí)符
舉例:
demo.int   ×
java.demo  ×
demo.3a   ×


命名規(guī)范:
建議小寫(xiě)字母,并且采用域名倒置的寫(xiě)法

域名倒置:com.baidu
www.baidu.com
www.atguigu.com

建議寫(xiě)法:

com.公司名.部門(mén)名.項(xiàng)目名.業(yè)務(wù)模塊名;
com.項(xiàng)目名.業(yè)務(wù)模塊名;
com.atguigu.業(yè)務(wù)模塊名;

1、package關(guān)鍵字

①如果某類(lèi)存在于指定包下,則要求類(lèi)的最上方必須添加包的聲明語(yǔ)句,語(yǔ)法如下:

package 包名;

②包的聲明語(yǔ)句在一個(gè)類(lèi)中只可能出現(xiàn)一次
③位置:最上面

2、import關(guān)鍵字

①跨包訪問(wèn)某類(lèi),必須要求導(dǎo)入該類(lèi)所在的包&&該類(lèi)具有跨包訪問(wèn)權(quán)限
語(yǔ)法:
import 包名.類(lèi)名;或
import 包名.*;

②導(dǎo)入包的語(yǔ)句在一個(gè)類(lèi)中可以出現(xiàn)多次,沒(méi)有順序要求

③位置:package——import——class

④如果想訪問(wèn)多個(gè)包中的同名類(lèi),則要注意不能直接類(lèi)上方添加import導(dǎo)包語(yǔ)句,否則有歧義
可以使用全類(lèi)名限定的方式

6、修飾符

image
修飾成員:比如屬性和方法
private     私有的 僅僅本類(lèi)中可以訪問(wèn)
缺省          默認(rèn)的 本包中所有類(lèi)都可以訪問(wèn)
protected   受保護(hù)的    本包中所有類(lèi)以及其他包的子類(lèi)可以使用
public      公共的 所有包中的所有類(lèi)都可以訪問(wèn)
-----------------------------------------------------------------------------------------
修飾類(lèi):只能用public和缺省的修飾類(lèi)
缺省      只有本包中才能訪問(wèn)該類(lèi)
public  所有包中都可以訪問(wèn)該類(lèi)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,436評(píng)論 6 13
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 3,144評(píng)論 2 9
  • 與其說(shuō)整天喝大口大口的毒雞湯,不如想一想讓自己激動(dòng)得睡不著覺(jué)的事情。如果說(shuō)有一些權(quán)利我們明明一直都有,卻沒(méi)有在意它...
    客官酒來(lái)啦閱讀 262評(píng)論 0 0
  • 努力是為了什么?從以前到現(xiàn)在,這個(gè)問(wèn)題一直縈繞在我的耳畔。 孩提時(shí)代,只是嬉戲玩耍,對(duì)于農(nóng)村長(zhǎng)大的我,對(duì)努力并沒(méi)有...
    灰灰_0f95閱讀 322評(píng)論 0 1
  • 晚八點(diǎn),央視跨年晚會(huì)開(kāi)始播出,爸媽看的熱火朝天,我已經(jīng)泡完腳把自己塞進(jìn)了被窩兒,靜靜地寫(xiě)簡(jiǎn)書(shū)。 嗓子上...
    小食光閱讀 166評(píng)論 1 0

友情鏈接更多精彩內(nèi)容