java数组最大下标_【Java视频教程】day09-面向对象
面向?qū)ο蠼榻B
- 面向?qū)ο笠?/li>
需求:求數(shù)組{1,2,3,4,8,7,6,5}的最大值;
public static void main(String[] args) {// 需求:求數(shù)組{1,2,3,4,8,7,6,5}的最大值;/** 解決問(wèn)題的思路: 1、明確需求:搞清楚、確認(rèn)清楚,到底要我們做什么事; 2、需求分析:如何實(shí)現(xiàn)需求(這個(gè)事情到底該怎么做);* a:創(chuàng)建一個(gè)數(shù)組,把需求中的數(shù)據(jù)保存到數(shù)組中; b:定義一個(gè)int型變量max,表示最大的值;* c:將數(shù)組中0下標(biāo)的數(shù)據(jù)賦值該上一步的變量,表示默認(rèn)0下標(biāo)數(shù)據(jù)是最大值; d:從1下標(biāo)開(kāi)始遍歷數(shù)組,拿到數(shù)組中每一個(gè)數(shù)據(jù),和變量max的值比較;* 如果變量max中的數(shù)據(jù)比數(shù)組某個(gè)下標(biāo)的數(shù)據(jù)小,就把該下標(biāo)的數(shù)據(jù)賦值給變量max; e:循環(huán)結(jié)束,變量max中就是要求的最大值* 3、編碼實(shí)現(xiàn):具體開(kāi)始做事情; 4、測(cè)試:執(zhí)行代碼,看看事情到底有沒(méi)有做成、有沒(méi)有問(wèn)題;*/// a:創(chuàng)建一個(gè)數(shù)組,把需求中的數(shù)據(jù)保存到數(shù)組中;int[] arr = new int[] {11,2,3,4,8,7,6,5};// b:定義一個(gè)int型變量max,表示最大的值;int max;// c:將數(shù)組中0下標(biāo)的數(shù)據(jù)賦值該上一步的變量,表示默認(rèn)0下標(biāo)數(shù)據(jù)是最大值;max = arr[0];// d:從1下標(biāo)開(kāi)始遍歷數(shù)組,拿到數(shù)組中每一個(gè)數(shù)據(jù),和變量max的值比較;for (int i = 1; i < arr.length; i++) {// 如果變量max中的數(shù)據(jù)比數(shù)組某個(gè)下標(biāo)的數(shù)據(jù)小,就把該下標(biāo)的數(shù)據(jù)賦值給變量max;if(max < arr[i]) {max = arr[i];}}// e:循環(huán)結(jié)束,變量max中就是要求的最大值System.out.println("數(shù)組中最大值是:" + max);}隨著時(shí)間往后發(fā)展,可能在一個(gè)類(lèi)中多次需要用到求數(shù)組最大值的功能。
如果每一次出現(xiàn)數(shù)組求最大值的功能,都像上面一樣在寫(xiě)一遍代碼,就很麻煩,而且代碼復(fù)用性差,后期維護(hù)就難;
為了解決這個(gè)問(wèn)題,我們可以使用函數(shù)來(lái)實(shí)現(xiàn):
需求:有可能在不同的程序中都出現(xiàn)這個(gè)功能:求數(shù)組的最大值;
思考:如果可以將函數(shù)抽取出來(lái),放到某一個(gè)地方,然后在提供一種方法,讓所有需要使用這個(gè)函數(shù)的地方都可以調(diào)用這個(gè)函數(shù),就能解決在不同的類(lèi)中出現(xiàn)相同函數(shù)代碼的問(wèn)題;
因?yàn)楹瘮?shù)是定義在類(lèi)中的獨(dú)立代碼,所以要抽出來(lái),也只能放到某一個(gè)類(lèi)中;
問(wèn)題:一個(gè)類(lèi)中不能直接使用其他類(lèi)的函數(shù);如何解決這個(gè)問(wèn)題?
解決辦法:Java中通過(guò) 類(lèi)名.函數(shù)名(實(shí)參) 的方式,可以調(diào)用其他類(lèi)中的函數(shù);
本類(lèi)中:
方法放在了Tools.java這個(gè)類(lèi)中;
在其他類(lèi)中要想調(diào)用,應(yīng)該這么寫(xiě):
Tools.arrayMax(具體的數(shù)組);
像最后這種方式,就使用了面向?qū)ο蟮乃枷?#xff1b;
https://www.zhihu.com/video/1065593352904314880面向過(guò)程
- 什么是過(guò)程:
過(guò)程就是做一件事情的先后經(jīng)過(guò);
生活中的過(guò)程:
泡面:1、買(mǎi)面;2、燒開(kāi)水;3、拆包裝,把面放到開(kāi)水中,加入調(diào)料,蓋上;4、吃面;
- 程序的過(guò)程:
java中的過(guò)程,程序執(zhí)行的先后經(jīng)過(guò),先執(zhí)行哪行,后執(zhí)行哪行;
- 什么是面向過(guò)程:
就是一種解決問(wèn)題的思想;
使用這種思想解決問(wèn)題,我們關(guān)心的是事情中有哪幾步組成, 然后一步步實(shí)現(xiàn);
使用面向過(guò)程寫(xiě)程序,我們首先要分析需求由那些功能組成,然后寫(xiě)函數(shù)實(shí)現(xiàn)各個(gè)功能,最后根據(jù)需求依次調(diào)用各個(gè)函數(shù);
在這個(gè)過(guò)程中,開(kāi)發(fā)者需要參與到實(shí)現(xiàn)的每一步中,就是勞動(dòng)者;
前面幾天都是按照面向過(guò)程的思想寫(xiě)程序;
面向過(guò)程的好處:在需求簡(jiǎn)單的時(shí)候,程序簡(jiǎn)單明了,結(jié)構(gòu)清晰;
弊端:在需求復(fù)雜的時(shí)候,就會(huì)非常麻煩,開(kāi)發(fā)和維護(hù)都很困難;
面向?qū)ο?/h2>- 什么是對(duì)象:
指的是生活中實(shí)際存在的事物;
- 生活中的對(duì)象:
冰箱;被子;錢(qián);電腦;手機(jī);椅子;桌子;地板;電燈;空氣;霧霾;地球;太陽(yáng);……
- 什么是面向?qū)ο?#xff1a;
也是一種解決問(wèn)題的思想;
使用這種思想解決問(wèn)題,我們關(guān)心的是事情中有那些參與者;
使用這種思想寫(xiě)程序,首先分析需求有那些功能,然后找有沒(méi)有已經(jīng)實(shí)現(xiàn)好功能的類(lèi),
如果有,就直接拿來(lái),創(chuàng)建它的對(duì)象,通過(guò)對(duì)象調(diào)用功能;
如果沒(méi)有,就需要自己寫(xiě)一個(gè)類(lèi),然后在類(lèi)中書(shū)寫(xiě)實(shí)現(xiàn)功能的函數(shù)【面向過(guò)程】,然后創(chuàng)建這個(gè)類(lèi)的對(duì)象,通過(guò)對(duì)象調(diào)用功能;
面向?qū)ο蟮乃枷?#xff0c;更符合我們現(xiàn)實(shí)生活情況,也更適合開(kāi)發(fā)復(fù)雜的功能;
在面向過(guò)程中,程序的基本單位是函數(shù);面向?qū)ο?#xff0c;程序的基本組成就是類(lèi);
https://www.zhihu.com/video/1065593911182999553類(lèi)與對(duì)象
- 類(lèi)
- 類(lèi)的概念
類(lèi):表示一類(lèi)具有共同屬性和行為的事物,是一種抽象的概念。
例如,生活中我們經(jīng)常說(shuō)的一個(gè)詞,“電話”,指的就是所有具有打電話功能的東西,而不是指代具體某一部電話;
- 類(lèi)的寫(xiě)法
在Java中采用class關(guān)鍵字定義類(lèi)。定義類(lèi)的格式:
修飾符 class 類(lèi)名{類(lèi)中的內(nèi)容 }修飾符:public、default(默認(rèn)的)、private、static(內(nèi)部類(lèi)),如果省略不寫(xiě),那就是默認(rèn)的修飾符(default)。
類(lèi)名:必須符合標(biāo)識(shí)符的定義語(yǔ)法要求,同時(shí)還要滿足如果是多個(gè)單詞每個(gè)單詞首字母大寫(xiě)。
類(lèi)中的內(nèi)容:主要根據(jù)類(lèi)的描述信息進(jìn)行具體的書(shū)寫(xiě)。后面詳細(xì)講解。
- 類(lèi)的成員
一個(gè)類(lèi)可以表示同一類(lèi)事物的共有屬性和功能;
事物的屬性使用類(lèi)中的變量表示,事物的功能使用類(lèi)中的函數(shù)表示;
例如,創(chuàng)建一個(gè)類(lèi)表示人:
class Person{ 年齡; 性別; 姓名; 地址; …… 吃飯 睡覺(jué) 說(shuō)話 ……}https://www.zhihu.com/video/1065594261700911104對(duì)象
- 對(duì)象的概念
在現(xiàn)實(shí)生活中,對(duì)象指的是實(shí)際存在的事物;
在Java中,對(duì)象指的是在堆內(nèi)存中開(kāi)辟的一塊空間;例如數(shù)組就是一個(gè)對(duì)象;
對(duì)象都是根據(jù)類(lèi)創(chuàng)建出來(lái)的;
- 對(duì)象的創(chuàng)建
Java中對(duì)象的創(chuàng)建,有五種方式:
其中,最常用、最簡(jiǎn)單的方式,就是使用new關(guān)鍵字創(chuàng)建對(duì)象;
格式:
new 類(lèi)名();
對(duì)象的使用
- 通過(guò)對(duì)象名使用:
類(lèi)和對(duì)象的關(guān)系
類(lèi)是抽象的概念,表示的是同一類(lèi)事物共同的屬性和行為;
事物的屬性使用類(lèi)中的成員變量表示,事物的行為使用類(lèi)中的函數(shù)表示;
對(duì)象是根據(jù)類(lèi)的描述在堆內(nèi)存中開(kāi)辟的一塊空間,表示的是一個(gè)具體的事物;
對(duì)象是根據(jù)類(lèi)創(chuàng)建的,先有類(lèi),后有對(duì)象。類(lèi)是抽象的,對(duì)象是具體的;
https://www.zhihu.com/video/1065594978910318592面向?qū)ο缶毩?xí):
使用Java代碼描述 貓抓老鼠的場(chǎng)景;
貓的名字叫湯姆,老鼠的名字叫杰瑞;具體的場(chǎng)景輸出應(yīng)該是:
湯姆看見(jiàn)杰瑞在偷吃奶酪;
湯姆追杰瑞,杰瑞逃跑;
湯姆抓住杰瑞,杰瑞叫:啊,要死啦!
使用面向?qū)ο笏枷虢鉀Q問(wèn)題,
- 第一步:分析需求,找到對(duì)象;
找對(duì)象的方法:名詞提煉法;就是觀察需求描述的文字,找到里面的名詞;名詞表示的就是實(shí)際的事物,也就是對(duì)象;
分析可知,這個(gè)例子中,有三個(gè)對(duì)象:貓;老鼠;奶酪;
因?yàn)槟汤也粎⑴c其他活動(dòng),所以為了簡(jiǎn)單,這里就用一個(gè)字符串表示奶酪;
所以需要?jiǎng)?chuàng)建兩個(gè)類(lèi),分別表示貓和老鼠;
- 第二步:使用偽代碼描述上面找到的對(duì)象;
描述對(duì)象的原則:只需要描述和需求有關(guān)的屬性和行為;
偽代碼,就是不是真實(shí)的代碼;就是程序員自己寫(xiě)的自己能看懂的符號(hào),例如中文……
貓{屬性:名字;行為: 看見(jiàn)(老鼠){老鼠的吃(“奶酪”); } 追(老鼠){老鼠的逃跑(); } 抓住(老鼠){老鼠的叫(“啊,要死啦!”); } } 老鼠{屬性:名字;行為:吃(奶酪){}跑(){}叫(叫的內(nèi)容){} }第三步:使用偽代碼描述場(chǎng)景:
貓 t = new 貓(); 老鼠 l = new 老鼠(); t的名字 = “湯姆”; l的名字 = “杰瑞”;t.看見(jiàn)(l); t.追(l); t.抓住(l);第四步:書(shū)寫(xiě)代碼:
表示貓的類(lèi):
/*** * Cat* 表示貓的類(lèi)* @author 快學(xué)大數(shù)據(jù)* 2018年6月14日 上午11:51:38*/ public class Cat {String name;/*** 貓看見(jiàn)老鼠的功能* @param m*/public void see(Mouse m) {System.out.print(name + "看見(jiàn)");//老鼠在吃奶酪m.eat("奶酪");}/*** 貓追老鼠的功能* @param m*/public void zhui(Mouse m) {System.out.println(name + "開(kāi)始追"+m.name);//調(diào)用老鼠對(duì)象的方法,表示老鼠在逃跑m.run();}/*** 表示貓抓住老鼠的功能* @param m*/public void catchMouse(Mouse m) {System.out.println(name + "抓住了"+m.name);//調(diào)用老鼠對(duì)象的方法,表示老鼠被抓住后的慘叫m.say("啊,要死啦!");} }表示老鼠的類(lèi):
/*** * Mouse* 表示老鼠的類(lèi)* @author 快學(xué)大數(shù)據(jù)* 2018年6月14日 上午11:52:26*/ public class Mouse {String name;//老鼠的名字/*** 老鼠吃東西的功能* @param food*/public void eat(String food) {System.out.println(name + "在吃" + food);}/*** 老鼠逃跑的功能*/public void run() {System.out.println(name + "正在瘋狂的逃跑……");}/*** 老鼠叫的功能* @param str*/public void say(String str) {System.out.println(name + "大聲的說(shuō):"+str);} }模擬場(chǎng)景的類(lèi):
/*** * Test* 測(cè)試貓抓老鼠的場(chǎng)景類(lèi)* @author 快學(xué)大數(shù)據(jù)* 2018年6月14日 上午11:58:10*/ public class Test {public static void main(String[] args) {//1、先創(chuàng)建一個(gè)貓對(duì)象Cat cat = new Cat();//2、給這個(gè)貓起個(gè)名字cat.name = "湯姆";//3、創(chuàng)建一個(gè)老鼠對(duì)象Mouse m = new Mouse();//4、給這個(gè)老鼠起個(gè)名字m.name = "杰瑞";//調(diào)用方法,輸出場(chǎng)景要求cat.see(m);cat.zhui(m);cat.catchMouse(m);} }https://www.zhihu.com/video/1065595884678664192局部變量和成員變量
- 局部位置:局部是指某個(gè)范圍。例如:方法的大括號(hào)中的這些個(gè)范圍,它就是一個(gè)局部范圍。
- 成員位置:在定義好類(lèi)之后,在類(lèi)的大括號(hào)內(nèi)部的范圍。
成員變量的位置在堆內(nèi)存,所以都有默認(rèn)值,使用之前可以先不賦值;
生命周期(內(nèi)存的聲明周期就是指內(nèi)存的分配到回收):
- 局部變量:局部變量的內(nèi)存在棧內(nèi)存的方法里面,函數(shù)進(jìn)棧開(kāi)始分配空間;函數(shù)出棧內(nèi)存被釋放;
- 成員變量:成員變量在堆內(nèi)存中;創(chuàng)建對(duì)象時(shí)分配內(nèi)存;對(duì)象成為垃圾空間被回收時(shí)釋放;
- 局部變量:在局部范圍中定義的變量,它們?nèi)繉儆诰植孔兞?#xff0c;并且它的使用范圍就在從定義的位置往下到范圍結(jié)束。
- 成員變量:直接在類(lèi)的成員位置上定義的變量。這些變量不受位置的限制,可以在任何方法中被使用。但是建議將所有的變量定義在類(lèi)的最前面位置。
總結(jié)
以上是生活随笔為你收集整理的java数组最大下标_【Java视频教程】day09-面向对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 域名服务器的配置文档,配置自己的域名服务
- 下一篇: android 类似按键精灵脚本_按键精