当前位置: 代码迷 >> Java相关 >> 菜鸟笔记(9)粗浅谈谈方法(Method)
  详细解决方案

菜鸟笔记(9)粗浅谈谈方法(Method)

热度:670   发布时间:2004-08-27 21:00:00.0
菜鸟笔记(9)粗浅谈谈方法(Method)

菜鸟笔记(9)方法(Method)

总算学到方法了.没学过方法之前.很多学过知识的例题都看不懂,为什么? 里面掺进方法了~.唉~~~~~~ 另外...我是按照书上学习顺序学习的.我有几本java教学书,有的是先学方法,在学类.有的反过来. 我是安先看简单方法在看类的顺序学习...所以类的一切我还都不知道...开开始接触方法.一上来就 一大堆概念...而且都没听说过...有点晕了...

在菜鸟笔记(8)中我稍微提到过方法.现在来具体说一下. 首先先来闲谈一下: >在以前的学习中偶每次都要用到方法.public static void main()中的mian()应该就是一个方法 {目前的理解大部分后面带()都属于方法.for()等不是..不知道对不对).看看学习以后会有什么新的理解,呵呵. 那么如果一个程序很大.就像一个对象很大我们要把它分成许多小多项处理一样,不然不容易差错,方法也用同样的 道理.我们同样要把大的程序划分成一个一个小的模块,这种技术叫分而治之,程序开发维护维护一个一个小模块 比整个大程序更易于维护管理.那么什么是模块,模块好像就是方法.还有类(目前我还没学到类...) >方法还有一个重复的特性.按照我的理解,程序中有很多东西要重复使用.那么这些东西如果用的少可以每次打 一遍.如果一个程序要用到几十次甚至几百次.那么我门就打几百次几十次同样的代码.显然不行.这时可以用到 方法.把常用的代码写成方法.然后以后只要用到这个方法,就用调用语句把它掉出来.其实就好像你写什么东西 总要用到一段话.那么我门应该提前Ctrl+C给他复制下来,用的时候直接Ctrl+V就OK了.我觉得跟这个意思差不多. >大家都知道java提供了API.他是JDK带的.同时sun在不断更新jdk.现在偶才知道JDK叫J2SE...那么jdk中带有大量的 方法和类.jdk在更新什么?大多数更新的其实只是类库而已.jdk1.5.等大规模的更新除外... 多数一句,大家常说的API好像就是java类库,里面提供了大量的方法说明.程序员自己也可以编写方法.这时肯定的. 不过sun给的类库以基本能应付各种基本的情况.(我猜的...),应该是比较全面了,sun自己也在不断更新嘛. 如果sun的类库里面有就不要自己编写了.耽误时间. >那么大家可以看到API中有方法大量使用的说明,都记下来不可能的.只能随用随找,但API是全英文同样是个 问题,没有别的办法,只能刻苦学习英语,目前我在重新学英语中...有很多人找API翻译过的...不过我听说翻译 的都不行...所以...还是努力学英语吧...其实不仅java.以后很多软件不会用的都要看帮助,帮助同样是全英文 的...要恨只能恨这些东西全是外国出的.我听说其实这个问题说大也很严重,现在国家很多机关都必须用国产软件. 比如放着office不用用wps...为什么,一方面推进国产软件发展.一方面防备万一,万一是说万一国家打仗, 好像是说我们还用外国软件.到时候会全部瘫痪什么的.当然,我也只是听说,并不是来吓人...呵呵.目前我还是 只用原装的.比如收信就用outlook...浏览器只用IE.现在有比IE好的浏览器,但大多数网上吹的神乎其神的大多 比IE差远了.不要详细那些.另外想整理硬盘最好也用开始菜单程序里面的.听说其他软件有的毁硬盘. >举一个最简单的例子说一下大概方法运行的过程.比如说某程序需要调用那个程序的方法.那么可以用调用格式 去调用.(格式现在还没学到...)然后写好调用语句,等程序执行到调用语句的时候,自动跳到调用的方法地方. 开始执行调用的方法.然后执行完方法后可以返回一个值给调用者.而这个值就是我们所需要的,也就是我门 调用方法要用的值.执行完方法后在回到调用语句.然后继续执行调用语句以外的东西.目前只知道返回语句是 return呵呵.方法中到了return以后自动跳转到调用方法的语句.然后自动执行调用方法后面的语句.道理听起来 不难理解,不知道做练习的时候会不会一样.呵呵 >我看过书,方法也有不调用值的,比如public static void main(String[] args )不过这个应该是特殊中的特殊吧 (我猜的),而且只要调用了这个方法,就可以跟着写我最常写的,System...(听说好的编程软件通常都能自定义 某写句子的快捷键,比如就可以把常用的分别定义.)但好像大多数方法调用的目的都是要取个值吧.有的 可以调用的同时给方法参数,比如以前我说过的ADD(i j)给负责加的方法.方法吧i和j相加以后,吧他们相加 的值返回给调用者.这时候调用者应该在用一个新的变量比如k来接受这个值,以后程序在用这个值的时候就用 k就可以了. >方法调用我理解的是.掉用要分为调用者和被调用者.比如大家在学校都做过大扫除.大扫除就是程序 调用者就是老师.老师说,XX去扫地.那么老师第一次可以告诉你扫地的方法,怎么怎么扫,以后再说你去扫地, 你就知道改如何扫了.而不用,说你去扫你,你要XXXXX扫...XX你去擦玻璃..同样的道理.玻璃这里是另一种方法. >书上写到方法的变量都是局部变量.方法中的参数也是局部变量,至于什么是局部变量我也不知道...但猜想 应该是对变量的东西做了限制,或许只有这个方法中才可以用.就像for循环中定义的变量,到了for外面就不能 用了. >另外我记得一个程序至少有一个方法.主方法.main()...可后来听说有的程序并不一定要有方法... 如果真是这样.我还没学到那里,也不着急.但大多数程序应该都至少有一个方法吧呵呵. >到目前为止只是初步的学习一些method的基础概念,给我的感觉也很模糊,也许做做练习会清楚一点.呵呵

关于概念我只会这么多,下面来具体说一下方法.关于方法至少要知道方法的声明 方法的调用.方法的重载也要知道. 首先是声明 声明格式如下: [modifiers] type methodName (parametertype1 parametername1,paratype2,paraname2…) { methodBody }

翻译过来: 修饰词 方法返回类型 方法名(参数类型1 参数名称1,参数类型2 参数名称2.....) {方法主体

}

关于这里的笔记我一直没想好怎么记.所以来了最简单的练习.在从练习中解释吧. 另外这个练习的目的只是让初学熟悉一下方法,并不要求掌握.方法好像和类关联特别大,所以 还是等学了类以后在详细介绍方法吧.稍微了解一点方法,就能学习retrun还有try等等了. public class Zzz { public static void main(String[] args){ int total=0; for(int i=1;i<=10;i++){ total=cheng(i); System.out.print(total+" "); } } public static int cheng(int x){ return x*x; } }

提前说明一下,目前我是先学的方法在再类.那么类的一切我现在都不知道...也就是说关于修饰符部分. 我这里只说我会的部分.等到类那里在详细学习. 这是前两天在论坛上看到别人问题.改了改.由于我也是初学...不懂的只能按自己意思理解... 第1行:不用多说声明公共类,类名Zzz //其实就是"Zzz"睡觉~~偶长期处于半睡眠状态~~ 第2行:public static void mian(String[] args){ 这行重点说一下,目前我学到的东西还没有脱离开这句,这也是我前面学习唯一用到的方法. >public和static是modifiers(修饰词),public的意思是公共的,在这之前我只见到过它修饰class ,第一次见到它修饰method...按照我的理解应该是公共的方法...听说后面有什么访问权限,那我猜 带public一定是谁都可以使用的. >后面的static目前还只知道是静态的.书上写的是这个method不会有更改,调用这类method时候,所有对象所 使用的都是同一段代码,meihod内容完全相同.我看到后面说好处是直接以类名调用就可以使用,而不需要 产生任何对象.常用的System.out.print().这时我才想起print()也是一个方法...它是System类调用的.. 中间的out好像是向外.那out.print就是向外面输出了呵呵.偶感觉这种方法真方便. >void是不返回任何值.应该是这个方法不用返回任何值吧.大多数方法好像后面都要加return返回值. 我看了下后面,如果要有返回值的时候那么type类型中不能填void.要返回int就填写int,其他就填其他 >methodname.方法名字.我目前只知道它是方法中的一个特殊方法.而且程序是从这里开始执行的. 看书上说其他方法都可以随意取名字(关键字以外),只有main等几个特殊的不能改变.后来我曾很愚蠢 的试了一下把mian改成别的.然后编译...居然还成功了...可惜解析以后的结果是: "Exception in thread "main" java.lang.NoSuchMethodError:main" 呵呵.错误... 后来我不死心...把新写的cheng方法名字改成main,结果得到的是同样的结果...至此我明白除了主方法 以外其他方法的名字都不能用main了... >parametertype parametername:参数类型,参数名称.类型这里是string.而里面是一个数组.我见到带 []只知道它是数组...我曾经试着改过main的参数类型,得到的是上面同样的结果.但是我改数组名称时候 发现不影响程序.目前我只试出来主方法除了数组名称以外其他均不能改...一改就...error..呵呵. 我也把pulbic去掉过,得到的是main method not public...还没学到权限那部分,也不知道它有什么权限. 学过方法然后就到类了,呵呵.到时候就知道了. 第3行:声明一个名称为total的int变量,初始是1. 第4行:for循环.没什么好说的. 第5行:这一行应该是调用语句.调用后面的方法.这里提前说一点.学类以后我会说到调用方法的格式 是类名.方法名 但这里为什么可以这么写呢?它算不算调用方法的语句呢?答案是它是调用方法的语句. 因为方法在同一个类.(这里是Zzz类)的时候可以这样写~目前知道这些就可以了.本篇只是熟悉一下方法. 简单介绍一下.另外有一点要知道,那就是运算过程.这一部是将cheng(i)的值,传给第9行方法中的x. 开始我还以为是做到这部直接就跳转到第9行的方法.但是我忽略了,在第9行中方法中参数的值是怎么来的? x的值是怎么来的?后来知道原来是i赋值过来的...然后在计算x*x最后return... 这也是我刚看别人帖子发现的错误.如果后面有不对的地方.请自动更正. 第6行:print方法输出. 第7,8行:大括号... 第9行:好,终于说到另一个重点了.这个是我自己加入的方法...public static int cheng(int x) >public static:应该和mian方法意思查不多,而我又没学到访问权限那里,也不敢多说.不过public和static 只是修饰词,不是必须加的.不过这里要加.我猜可能要不设public不能从主方法里面调用这个.因为我试过 去掉修饰词.得到的是non-static method cheng(int) cannot be referenced from a static context >int是返回数据类型了.main()这里是void.它不需要返回数据.而这里要返回一个int型数据. >cheng这个是乘...的拼音...这里是方法名 >int y这里应该是参数,参数的类型和参数的值.在第5行说过,这里的y参数是被第5行i给赋值了,然后在进行 第10行运算. 第10行: return x*x: return这个词我见过很多次了,开始只知道它是返回.现在终于知道,在方法 中只要见到retrun,那么立刻跳到调用方法处.然后执行调用方法处后面的语句.returen后面是一个expression (表达式)这个格式必须是方法声明中的数据类型.我理解应该是把x*x赋值给第9行方法里面的x 第11,12:两个大括号~~

各行解释完了,然后我们来看一下运行的顺序.从第3行开始说.程序先执行第3行,让后进入第4行的for循环. for循环的判断句i<=10是true,那么继续执行for后面的第5行.这里是调用方法.首先它要吧cheng(i)中i的值 赋值给下面cheng方法中的参数x,这时候x的到参数,继续进行下面的retrun x*x.执行完了以后return应该带 着这个值.回到第5行,也就是total=cheng(i)这里.并将x值返回给cheng里面的i.然后在吧i的值赋值给total. 这样total得到值以后继续执行System.out.print(total);执行完以后,for循环第一轮就结束了. 直到最后一轮循环结束,程序也结束了.

搜索更多相关的解决方案: Method  笔记  粗浅  

----------------解决方案--------------------------------------------------------
写太多...一贴放不下了...

这个练习我就是上面那样理解的...呵呵,下面说说写方法容易写错的几个地方.

在说几个容易错误之前说下return.这个刚才并没有介绍过. return:按照英文的理解就是回来.返回.所以也叫返回语句.return只能用于方法中. 大家知道方法有调用方法语句和方法部分.他们是分开的.retrun在方法部分里面.当方法中碰到retrun 时候自动跳出该方法,返回到调用方法语句部分.然后继续执行后面的语句. 格式为 return [表达式]; 感觉有点返回部分有点像带了标号的continue...

说一下retrun的两种格式 (1)return [表达式];第一种最常见,刚才的练习已经解释过很多遍了. (2)return;下面来说说第2中用法.其实这个根本没用,但是大家最好知道. 格式大家看到了为retrun; retrun后面没有expression(表达式),也就是说么有返回的值. 它的意思只是说方法没有返回的值,和void一起用.其实该方法是void时候,可以不写return,写不写都无所谓.. 所以几乎没人写...如果写了retrun当本方法看到retrun以后自动退出方法.而不写return的话,本方法执行到 最后的}也自动退出方法. 大家可以看看这两个 one: public class Cy{

public static void main(String args[]) { return; } }

tw public static void cheng(){ return; }

这两个都是retrun不带表达式的用法.这两个地方加不加retrun都可以... 这两个retrun;都不用写.知道写了也不范语法错误就可以了.由于他们为void不返回值,那么他们的作用只是 退出本方法.

另外有地方初写者容易写错,这两个标识符不能一起用. void和return(返回值的).void表示的是方法中不返回任何值,而return本身就要呆着方法中执行的值返回给调用者. 这两个词本身就是矛盾的.如果您既打了return又有void,编译以后会显示 "<idnetifier> expected" error 这样标识符部分就有错误了.

这里来说说方法中常见的错误,都是最基本的错误. Q:怎么回事invalid method declaration; return type required A:出现这个是您没有设置方法的返回类型.invalid method declaration告诉你错误方法. retrun type required 必须有返回类型.

Q: missing return statement A:这还是return的问题,没有return声明.解决办法就是加上retrun 在有void的语句中,不能带返回值的retrun,事实上有void的语句就不用写retrun,画蛇添足就是这个意思. 但是在没有void的语句中,一定要有retrun.

Q:方法中多个参数的设置. A:方法中多个参数之间要用","隔离. public static int cheng(int x,int y){ return x*x;

} 比如上面那个,中间要有,分开.另外在方法参数中每个变量,开头都要有类型.不能(int x,y) 这个是错误的,会得到<identifier> expected.应为作为参数没个参数多需要明确声明类型. 还有即使这个方法没有参数,方法后面的括号也是不能省略的. 比如public static void cheng{ }

在cheng后面必须加(),如果没有会得到 '(' expected

Q:这个 x is already defined in cheng(int,int)

方法为 public static int cheng(int x,int x){ return x*x; } A:错误很明显x已经定义在cheng方法中.但是如果在方法外就没有限制了.我听说过局部变量. 那我猜应该是方法中参数x,只在本方法中不能重复,放到其他方法中不会发生冲突,比如. public class Zzz { public static void main(String[] args){ int total=0; int x=555; for(int i=1;i<=10;i++){ total=cheng(i); System.out.print(total+" "); } System.out.print(x);

} public static int cheng(int x){ return x*x; } }

您可以看到,倒数4行里面参数有个X,而主方法main()里面也有个int的x,但是他们并不冲突.呵呵~

Q: public static void a(){ public static void b(){ } }

A:我们以前学过循环,学过分支结构,回忆一下.他们都可以欠套.那么方法可不可以呢?可以想象一下. 给我的感觉是可以的.如果按照上面写就是方法欠套了.b欠套在a中.但是试过以后发现不行. 得到的结果是 illegal start of expression 表达式违反规则. 多说一句,方法体也叫块,就是block.(如果你打过mairo(马力奥),它顶的那个东西就是block了~~)

Q:还有一个关于retrun的错误,刚才没提到好像. A:retrun在方法中只能够放在方法最后,也就是最末尾. 如果放在中间.而后面还有执行的语句那是错误的.它不像switch中case的break一样. 这点知道就可以了.

Q:有一点要说,大家都知道分支中有switch和if,大家还知道,break可以用在switch的case中. 那break都可以用到分支语句中,return能不能呢?答案是肯定的.

A:大家看看这个,我刚写的练习. public class Zzz { public static void main(String[] args){ int total; for(int i=-10;i<=10;i++){ total=cheng(i); System.out.print(total+" "); }

} public static int cheng(int x){ if(x>0) return x; else return -x; } }

还是简单说一下这个执行顺序吧:

先定义int的total,然后for循环(具体不说了),接下来total=cheng(i).其中吧i给下面方法的 cheng(int x)里面的x.在用x进行x*x.得到的结果跟return一起返回给total=cheng(i)里面的i 在把i赋值给total.然后执行System语句.这样第一轮循环结束.然后第2轮,直到结束...

Q:还有一点需要知道.在方法中的参数不可以赋值,比如这样就是错的. public static int cheng(int x=5){ return x*x; } A:那为什么错了.我想应该是上面调用方法的i把值要赋给方法里面的y,那么这里是y=5,没有变量了. 所以出错.不过可以在方法括号外面赋值,大家只要知道不能在方法括号里面给变量赋值就可以了. 写成这样完全没有问题 public static int cheng(int x){ y=5; return x*x; } 但大家也同样看到,y先得到i的值1,又被重新赋值y=5,这样重复多少次都是y*y永远等于25. 这样写就没有意义了,当然,这只是让大家知道一下就可以了...罗搜一句,第2行y已经被定义为int 以后直接赋值就可以,如果再写int y=5就画蛇添足了就得到了 y is already defined in cheng(int) y这个变量已经再cheng赋值为int~^_^

当然在方法里面可以随便定义变量了.而且return x*x;后面可以随意加东西 想怎么写都行呀. public static int cheng(int x){ int y=2; int k=-23; int m=2; return x*x+666+y+k/m; } 这个胡写的,大家知道就OK了.

另外还有重要的一点 调用方法的入口参数类型必须与方法中定义的参数类型相同。这个以后我在给贴吧.

另注:这次主要是简单的介绍一下方法.不做深入学习,只是看看张什么样.我还是打算先学类在学方法. 简单知道一下方法就行了. 作为简单知道一下方法这次说的我感觉不少了~~..^.^ 呵呵.还有1,2点以后我在跟贴.今天没时间打了. 但客观原因今天比续灌上去~~...哈哈~~

感觉方法这个东西真是方便,这样分开写程序也不乱,如果几个方法全写在一起那程序真的就乱套了~~ 就算有错查也够呛...够大家晕一阵的.而且方法本身不支持欠套...好棒的设计,我感觉是避免程序 乱套~~哈哈~~

这次是我写的字数最多的一次~估计也是里面错误最多的一次...汗...错字就够..XXX个了... 我以后一定会再认真一些,我想我也必须再认真一些.否则我真的对不起 Ivony大人,对不起雨伞版主. 对不起 蓝色地平线版主~~

(哈哈,我再QQ那个java web上经常看到雨伞和蓝色地平线版主呢. 可是很少见他们聊天呀....不过雨伞版主的QQ头像...好可怕...雨伞版主的论坛头像也好可怕... ...准确的说是好吓人...哈哈.别生气呀,雨伞版主~~~开玩笑~)

也同样对不起jellen(类痴狂人 ) tempnetbar(J湖散人 )和Anstey 还对不起J全道~~//它给了偶很大的鼓励.J全道可是很爱国的人呀,上次跟我说到他最喜欢看金武门 ,喜欢陈真,但我不知道...我问他金武门是什么...陈真从没听说过...他好像差点晕死... 还对不起...一直支持我的朋友门...还对不起............................................. ..................................................................................... ..................................................................................... (请润许我再此处省略XXXX万字...)

所以我一定要学好java.倘若我有机会学好java,我一定编一个小游戏,把你们都克化成游戏中的主角. 而J全道我把它设计成爱国主义者,设计成战士,最后壮烈牺牲的英雄吧~~(开玩笑~~) 哈哈,版主和各位前辈们是不是后悔教偶学习了~~~

呵呵,一下砍了这么多~~~~(旁人:死菜鸟~还不快下去,我们的耳朵都快炸了~!!!) (小菜菜:可我还有XXXXXXX字没说完呢)(众人怒~:"磨刀霍霍向菜鸟") 汗...那就到这里吧~~小菜菜告退~~~


----------------解决方案--------------------------------------------------------

好文....GOOD


----------------解决方案--------------------------------------------------------

版主太客气了...

首先,精华100%不配.

对我来说给点鼓励,(不需要表扬,真的),仅仅是鼓励我知足了.

对我来说能有个地方灌就痛快...汗...

再说那里面bug无数~~还没被骂就知足了~


----------------解决方案--------------------------------------------------------

厉害!我看完了,我觉得你太厉害了!

如果学JAVA都有你这样的耐心与毅力,我想每个人都能学会!而且你的学习方法也值得我借鉴!~


----------------解决方案--------------------------------------------------------

谢谢你的耐性!


----------------解决方案--------------------------------------------------------
  相关解决方案