Java基礎(chǔ)四

對(duì)應(yīng)代碼鏈接

數(shù)組原理內(nèi)存圖

為了提高運(yùn)算效率蛀骇,就對(duì)空間進(jìn)行了不同區(qū)域的劃分鞍匾,因?yàn)槊恳黄獏^(qū)域都有特定的出來數(shù)據(jù)方式和內(nèi)存管理方式绊诲。

棧的特點(diǎn):先進(jìn)后出

  • JVM的內(nèi)存劃分:
區(qū)域名稱 作用
寄存器 給CPU使用策彤,和我們開發(fā)無關(guān)
本地方法棧 JYM在使用操作系統(tǒng)功能的時(shí)候使用愁拭,和我們開發(fā)無關(guān)
方法區(qū) 存儲(chǔ)可運(yùn)行的class文件
堆內(nèi)存 存儲(chǔ)對(duì)象或數(shù)組讲逛,new來創(chuàng)建的,都存儲(chǔ)在堆內(nèi)存
方法棧 方法運(yùn)行時(shí)使用的內(nèi)存岭埠,比如main方法運(yùn)行盏混,進(jìn)入方法棧中執(zhí)行

1. 輸出數(shù)組地址

        int[] arr = new int[4];
        int[] arr2 = new int[3];
        System.out.println(arr);            
        //輸出的是數(shù)組的地址值 :[I@1b6d3586
        System.out.println(arr2);           
        //[I@4554617c
ArrayDemo01

2.兩個(gè)變量指向同一個(gè)數(shù)組

public class ArrayDemo02 {
    public static void main(String[] args) {
        //定義數(shù)組
        int[] arr = new int[3];
        //對(duì)數(shù)組進(jìn)行賦值操作
        for (int i = 0; i < arr.length; i++) {
              arr[i]=6;
        }
        //賦值
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //定義數(shù)組變量arr2,將arr的地址賦值為arr2
        int[] arr2 = arr;
        //修改arr2的第二個(gè)元素為8
        arr2[1]= 8;
        System.out.println(arr[1]);
}
}
兩個(gè)變量指向同一個(gè)數(shù)組

3.數(shù)組異常及遍歷

(1)數(shù)組越界

1.數(shù)組下標(biāo)超出范圍 
2.數(shù)組中沒有空間
 System.out.println(arr[3]);   //ArrayIndexOutOfBoundsException

(2)數(shù)組的空指針異常

意味著arr 將不會(huì)保存數(shù)組的地址了惜论,也就是不允許再操作數(shù)組了
        arr = null;         //NullPointerException
        System.out.println(arr[0]);

(3) 數(shù)組遍歷

        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }

4. 求數(shù)組中的最大值

public class ArrayDemo03 {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)數(shù)組
        int[] arr = {5, 15, 2000, 10000, 100, 4000};
        //求 arr 中最大的值
        //定義一個(gè)變量许赃,存儲(chǔ)輸出中最大的值,假設(shè)arr中第一個(gè)元素是最大的
        int max = arr[0];
        // 遍歷數(shù)組来涨,取出每一個(gè)元素图焰, 讓每一個(gè)元素個(gè)max進(jìn)行比較
        for (int i = 0; i < arr.length; i++) {
            // 遍歷元素和max進(jìn)行比較,如果大于max蹦掐,就更新max的值
            if (arr[i] > max)
                max = arr[i];
            //max始終是記錄最大的值
        }
        System.out.println("數(shù)組中最大的值是"+ max);
    }
}

5. 對(duì)數(shù)組進(jìn)行反轉(zhuǎn)

  • 方法一
public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr2 = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr2[i] = arr[arr.length-i-1];
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr2[i] + "\t");
        }
}
  • 方法二
public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        for (int i = 0; i < arr.length/2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length-i-1];
            arr[arr.length-i-1] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
}
  • 方法三
public static void main(String[] args) {
     /**
         * for (初始化條件1,初始化條件2; 循環(huán)條件; 步進(jìn)運(yùn)算1,步進(jìn)運(yùn)算2)
         * 定義 min = 0 最小索引值技羔, max = arr.length-1 最大索引值
         */
        int[] arr = new int[]{1,2,3,4,5};
        for (int min =0,max = arr.length-1;min <= max; min++ , max--){
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        // 重新遍歷反轉(zhuǎn)的數(shù)組
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }

6.數(shù)組作為方法的參數(shù)進(jìn)行傳遞

public class ArrayDemo05 {
    public static void main(String[] args) {
        sayHello("韓梅梅");
        int[] arr = {1, 3, 5, 7, 9};
        printArray(arr);
    }
    public static void sayHello(String name){
        System.out.println("Hello" + name);
    }

    //之前我們看到的方法都是基本數(shù)據(jù)類型作為參數(shù)的
    //使用數(shù)組作為方法的參數(shù)
//    public static void printArray(形參 實(shí)參){}
//    public static void printArray(數(shù)據(jù)類型 變量值){}
    public static void printArray(int[] arr){
        // 想要打印出數(shù)組,我們可以使用for循環(huán)遍歷
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

對(duì)應(yīng)JVM內(nèi)存圖


數(shù)組作為方法的參數(shù)傳遞

7.數(shù)組作為方法的返回值

public class ArrayDemo06 {
    public static void main(String[] args) {
        int[] arr = getArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    //void 無返回值
    public static int[] getArray(){
        int[] arr = {1, 2, 3, 4, 5};
        //返回?cái)?shù)組的地址卧抗,返回給調(diào)用者
        return arr;
    }
}

案例

public class ArrayDemo07 {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a);//1
        System.out.println(b);//2
        change(a, b);
        System.out.println(a);//1
        System.out.println(b);//2
        //change(a,b)沒有返回藤滥,a,b不變
        int[] arr = {1, 3, 5};
        System.out.println(arr[0]);//1
        change2(arr);
        System.out.println(arr[0]);//200
    }
    public static void change(int a ,int b){
        a = a + b;
        b = b + a;
//        System.out.println(a);
//        System.out.println(b);

    }
    public static void change2(int arr[]){
        arr[0] = 200;
    }
}
ArrayDemo07

面向?qū)ο缶幊?/h2>
  • 對(duì)象: 泛指現(xiàn)實(shí)中一切的事物, 每個(gè)事物都有自己的【屬性】和【行為】
    強(qiáng)調(diào):通過調(diào)用對(duì)象的行為去實(shí)現(xiàn)功能社裆,而不是自己去一步一步實(shí)現(xiàn)

舉例:洗衣服:
1.面向過程:把衣服脫掉-->盆-->加水-->泡-->洗拙绊。。。(強(qiáng)調(diào)步驟)
2.面向?qū)ο螅喊岩路摰?->打開全自動(dòng)洗衣機(jī)-->放衣服-->開關(guān)-->晾衣服(強(qiáng)調(diào)對(duì)象)

  • 面向?qū)ο筇攸c(diǎn):將復(fù)雜的事情簡(jiǎn)單化标沪,我們從執(zhí)行者變成了指揮者(完成一個(gè)項(xiàng)目花錢雇人完成而不是自己做)
  • 面向?qū)ο蟀蠡咎卣鳎悍庋b榄攀,繼承,多態(tài)

類和對(duì)象
  • 類 : 可以看成一類事物的模板金句,在面向?qū)ο缶幊讨虚萦褂脤傩院托袨閬砻枋鲱?/li>

在現(xiàn)實(shí)中:

  • 屬性: 該事物的狀態(tài)信息
  • 行為: 該事物能干什么
  • 對(duì)象:是一類事物的具體體現(xiàn)
  • 對(duì)象是類的換一個(gè)實(shí)例,對(duì)象就必然具備該類事物的屬性和行為
  • 類和對(duì)象的關(guān)系
  • 類是對(duì)一類事物的描述违寞,抽象的
  • 對(duì)象是一類事物的實(shí)例 具體的
  • 類是對(duì)象的模板贞瞒, 對(duì)象是類的實(shí)體
  • 類在java中的定義 : 現(xiàn)實(shí)中的一類事物
  • java和現(xiàn)實(shí)是一致的
  • 成員變量:對(duì)應(yīng)事物的屬性,成員方法:對(duì)象事物的行為
  • 成員變量:和之前定義變量一樣趁曼,只不過位置變了军浆, 在類中,方法外
  • 成員方法:只不過我們要將以前 方法static去掉(static是面向過程的)
public class 類名{
    // 成員變量
    // 成員方法
    //類名使用大駝峰方式
}
  • 類的使用

Java中通過創(chuàng)建對(duì)象去使用類
格式:
類名 對(duì)象名 = new 類名()
返回值類型 具體的對(duì)象名字 = new 類();

我們通過對(duì)象去訪問類中的成員
對(duì)象名.成員變量
對(duì)象名.成員方法()

成員變量和全局變量的區(qū)別
成員變量和全局變量的區(qū)別
成員變量的默認(rèn)值
成員變量默認(rèn)值

案例

一.student類

public class Student {
    //成員變量:
    String name;        //姓名
    int age;        //年齡
    //成員方法
    //愛學(xué)習(xí)的方法
    public void study(){
        System.out.println("Good Good Study,Day Day Up!");
    }
    //吃飯的方法
    public void eat(){
        System.out.println("學(xué)習(xí)餓了就得吃飯");
    }
}
//測(cè)試類
public class Test01_Student {
    //類的使用
    //Java中通過創(chuàng)建對(duì)象去使用類
    //格式:
    //類名 對(duì)象名 = new 類名()
    //返回值類型   具體的對(duì)象名字 = new 類();
    //我們通過對(duì)象去訪問類中的成員
    //對(duì)象名.成員變量
    //對(duì)象名.成員方法()挡闰;
    public static void main(String[] args) {
        //調(diào)用 學(xué)生類
        //1乒融、創(chuàng)建類:類名 對(duì)象名 = new 類名()
        Student s = new Student();
        //2、打印這個(gè)對(duì)象
        System.out.println(s);  //返回包名+16進(jìn)制地址
        //3尿这、訪問其中的成員扁蕾
        System.out.println("姓名" + s.name);
        System.out.println("年齡" + s.age);
        //4簇抵、給成員變量進(jìn)行賦值
        s.name = "悟空";
        s.age = 500;
        //5、再次輸出變量
        System.out.println("姓名" + s.name);
        System.out.println("年齡" + s.age);
        System.out.println("------------------------");
        //6射众、調(diào)用成員方法
        s.study();
        s.eat();
    }
}

二. Phone類

public class Phone {
//    成員變量
    String brand;   //品牌
    int  price;     //價(jià)格
    String color;   //顏色
    //成員方法
    //給name打電話
    public void Called(String  name){
        System.out.println("給"+name+"打電話");
    }
    //發(fā)短信
    public void SendMessage(){
        System.out.println("發(fā)短信");
    }
}
//測(cè)試類
public class Test02_Phone {
    public static void main(String[] args) {
        //創(chuàng)建對(duì)象
        Phone p = new Phone();
        //輸出成員變量
        System.out.println("品牌:"+ p.brand);
        System.out.println("價(jià)格:"+ p.price);
        System.out.println("顏色:"+ p.color);
        System.out.println("---------------------");
        //賦值
        p.brand = "華為";
        p.color = "green";
        p.price = 6666;
        //再次輸出
        System.out.println("品牌:"+ p.brand);
        System.out.println("價(jià)格:"+ p.price);
        System.out.println("顏色:"+ p.color);
        System.out.println("---------------------");
        //調(diào)用方法
        p.Called("石浩博");
        p.SendMessage();
        show(p);        //調(diào)用show方法
    }
//    對(duì)象作為參數(shù)進(jìn)行傳遞
    public static void show(Phone p){
        System.out.println(p.brand +"  "+ p.price+"     "+ p.color);
    }
}
Phone類對(duì)應(yīng)內(nèi)存圖

面向?qū)ο蟮娜筇卣?/h2>

1.封裝

封裝實(shí)際上是將屬性封裝起來碟摆,屬性變?yōu)樗接械模峁┕灿械姆椒▽?duì)其進(jìn)行訪問
private代表最小權(quán)限
可以修飾成員變量和成員方法
被private修飾的成員變量和成員方法叨橱,只有在本類才能訪問

案例:通過方法訪問或改變成員變量
public class StudentInfo {
    private String name;
    private int age;

    //為成員方法提供共有的set, get方法(訪問典蜕,修改)
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age = age;
    }

}

this的含義
this代表所在類的當(dāng)前對(duì)象的引用(地址值),及對(duì)象自己的引用
方法被哪個(gè)對(duì)象調(diào)用,方法中的this就代表哪個(gè)對(duì)象罗洗,
即誰在調(diào)用愉舔,this就代表誰

public class Test03_StudentInfo {
    public static void main(String[] args) {
        StudentInfo studentInfo = new StudentInfo();
        System.out.println(studentInfo.getName());
        //調(diào)用方法
        studentInfo.setName("石浩博");
        studentInfo.setAge(21);
        //輸出
        System.out.println(studentInfo.getName());
        System.out.println(studentInfo.getAge());
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伙菜,隨后出現(xiàn)的幾起案子轩缤,更是在濱河造成了極大的恐慌,老刑警劉巖贩绕,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件火的,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淑倾,警方通過查閱死者的電腦和手機(jī)馏鹤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娇哆,“玉大人湃累,你說我怎么就攤上這事勃救。” “怎么了治力?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蒙秒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宵统,道長(zhǎng)税肪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任榜田,我火速辦了婚禮,結(jié)果婚禮上锻梳,老公的妹妹穿的比我還像新娘箭券。我一直安慰自己,他們只是感情好疑枯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布辩块。 她就那樣靜靜地躺著,像睡著了一般荆永。 火紅的嫁衣襯著肌膚如雪废亭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天具钥,我揣著相機(jī)與錄音豆村,去河邊找鬼。 笑死骂删,一個(gè)胖子當(dāng)著我的面吹牛掌动,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宁玫,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粗恢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了欧瘪?” 一聲冷哼從身側(cè)響起眷射,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佛掖,沒想到半個(gè)月后妖碉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苦囱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年嗅绸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撕彤。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鱼鸠,死狀恐怖猛拴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚀狰,我是刑警寧澤愉昆,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站麻蹋,受9級(jí)特大地震影響跛溉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扮授,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一芳室、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刹勃,春花似錦堪侯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乏梁,卻和暖如春次洼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遇骑。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工卖毁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人质蕉。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓势篡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親模暗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禁悠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354