一.什么是方法
所谓方法就是用来解决一类问题的代码的有序集合,是一个功能模块。
二.方法声明
访问修饰符:public/private/protected
返回类型:void及各种数据类型;
方法名:和变量一样
三.方法分类
方法在类的内部定义
1.无参无返回值:
1 packagecom.imooc.function;2
3 public classMethodDemo1 {4 //打印星号
5 public voidprintStar(){6 System.out.println("********************");7 }8
9 public static voidmain(String[] args) {10 //TODO Auto-generated method stub
11 MethodDemo1 myMethod=newMethodDemo1();12 myMethod.printStar();13 System.out.println("哈哈");14 myMethod.printStar();15
16 }17
18 }
View Code
2.无参带返回值:
1 packagecom.imooc.function;2
3 public classMethodDemo1 {4 //打印星号
5 public intRectangle(){6 int length=10,width=3;7 int getArea=length*width;8 returngetArea;9 }10
11 public static voidmain(String[] args) {12 //TODO Auto-generated method stub
13 intresult;14 MethodDemo1 myMethod=newMethodDemo1();15 System.out.println("面积为:"+myMethod.Rectangle());16 }17
18 }
View Code
3.带参无返回值:
1 packagecom.imooc.function;2
3 public classMethodDemo1 {4 public float max(float a,floatb){5 floatmax;6 if(a>b){7 max=a;8 }9 else{10 max=b;11 }12 SYstem.out.print(a+"和"+b+"的最大值是:"+max);13 }14
15 public static voidmain(String[] args) {16 //TODO Auto-generated method stub
17 MethodDemo1 myMethod=newMethodDemo1();18 float a=10.45f,b=5.12f;19 myMethod.max(a, b);20 }21
22 }
View Code
4.带参带返回值:
1 packagecom.imooc.function;2
3 public classMethodDemo1 {4 public int fac(intn){5 int s=1;6 int sum=0;7 for(int i=1;i<=n;i++){8 for(int j=1;j<=i;j++){9 s*=j;10 }11 sum+=s;12 s=1;13 }14 returnsum;15 }16
17 public static voidmain(String[] args) {18 //TODO Auto-generated method stub
19 MethodDemo1 myMethod=newMethodDemo1();20 System.out.println("大的为为:"+myMethod.fac(3));21 }22
23 }
View Code
注:Java方法不能嵌套定义(而Python可以)
四.数组作为参数
例:
1 packagecom.imooc.function;2
3 importjava.util.Scanner;4
5 public classGetValue {6 public boolean search(int n,int[] arr){7 boolean flag=false;8 for(intval:arr){9 if(val==n){10 flag=true;11 break;12 }13 }14 returnflag;15 }16 public static voidmain(String[] args) {17 //TODO Auto-generated method stub
18 System.out.println("请输入要查找的数据:");19 intnum;20 booleanflag;21 Scanner sc=newScanner(System.in);22 num=sc.nextInt();23 int[] arr={1,3,5,7,8,2,10,20};24 GetValue getvalue=newGetValue();25 flag=getvalue.search(num, arr);26 if(flag){27 System.out.print("找到了");28 }29 else{30 System.out.print("未找到");31 }32
33
34 }35
36 }
View Code
五.方法重载
方法名相同,参数列表不同。
例:
1 packagecom.imooc.function;2
3 public classMathAdd {4 //求int类型和
5 public int plus(int m,intn){6 return m+n;7 }8 //求double类型和
9 public double plus(double m,doublen){10 return m+n;11 }12 //q求数组元素累加和
13 public int plus(int[] arr){14 int sum=0;15 for(intn:arr){16 sum+=n;17 }18 returnsum;19 }20 public static voidmain(String[] args) {21 MathAdd mathadd=newMathAdd();22 //int型
23 int intplus=mathadd.plus(1,2);24 System.out.println("int型和:"+intplus);25 double doubleplus=mathadd.plus(1.23,3.468);26 System.out.println("double型和:"+doubleplus);27 int[] arr={1,2,3,4,5,6};28 int arrplus=mathadd.plus(arr);29 System.out.println("数组型和:"+arrplus);30
31
32
33 }34
35 }
View Code
六.传值
如果在同一个类里面,某一个方法(非main方法)要调用其他方法,直接调用,而不需要创建对象。
交换值例(基本数据类型):主方法中的m,n值不会变(方法中的值改变不会影响主方法的),只是把值传递给a,b
1 packagecom.imooc.function;2
3 public classSwapDemo {4
5 public void swap(int a,intb){6 System.out.println("交换前:a="+a+"n="+b);7 inttemp;8 temp=a;9 a=b;10 b=temp;11 System.out.println("交换后:a="+a+"b="+b);12
13 }14 public static voidmain(String[] args) {15 int m=3,n=5;16 SwapDemo swapdemo=newSwapDemo();17 System.out.println("交换前:m="+m+"n="+n);18 swapdemo.swap(m, n);19 System.out.println("交换后:m="+m+"n="+n);20
21 }22
23 }
View Code
数组传值(引用数据类型)例:
1 packagecom.imooc.function;2
3 public classListDemo {4
5 public void change(int[] arr){6 arr[3]=-1;7 System.out.println("arr修改数据后:");8 for(intn:arr){9 System.out.print(n+" ");10 }11 System.out.println();12
13 }14
15 public static voidmain(String[] args) {16 int[] a={1,2,3,4,5,6,7};17 ListDemo listdemo=newListDemo();18 System.out.println("a修改前:");19 for(intn:a){20 System.out.print(n+" ");21 }22 System.out.println();23 listdemo.change(a);24 System.out.println("a修改后:");25 for(intn:a){26 System.out.print(n+" ");27 }28
29 }30
31 }32 /*
33 输出:34 a修改前:35 1 2 3 4 5 6 736 arr修改数据后:37 1 2 3 -1 5 6 738 a修改后:39 1 2 3 -1 5 6 740 */
View Code
Java中参数都是值传递:
注:Python中都是共享变量
七.可变参数列表
可变参数列表:如int...n(参数中如果有两个以上参数,可变参数一定是放在最后的位置。且可以把数组的值传递给可变参数列表,但是数组作为参数时不可以将多个值传递给数组,一个方法中只能有一个可变参数)
注:Python为(*args【元组】,**kwargs【字典】)
1 packagecom.imooc.function;2
3 public classArgsDemo {4
5 public void sum(int...n){6 int sum=0;7 for(inti:n){8 sum+=i;9 }10 System.out.println("sum="+sum);11 }12 public static voidmain(String[] args) {13 ArgsDemo argsdemo=newArgsDemo();14 argsdemo.sum(1);15 argsdemo.sum(1,2);16 argsdemo.sum(1,2,3);17
18
19 }20
21 }22 /*
23 输出:24 sum=125 sum=326 sum=627
28
29 */
View Code
可变参数重载问题:可变参数列表所在方法是最后被访问的
1 packagecom.imooc.function;2
3 public classArgsdemo4 {4 public int plus(int a,intb){5 System.out.println("不可变参数方法被调用");6 return a+b;7 }8 public int plus(int...n){9 System.out.println("可变参数列表方法被调用");10 int sum=0;11 for(inti:n){12 sum+=i;13 }14 returnsum;15 }16 public static voidmain(String[] args){17 Argsdemo4 argsdemo=newArgsdemo4();18 System.out.print("和为:"+argsdemo.plus(1,2));19 }20 }21 /*输出:22 不可变参数方法被调用23 和为:324 */
View Code
文档注释:/**(可以使用javadoc命令获取文档注释生成帮助文档)
标签描述示例
@author
标识一个类的作者
@author description
@deprecated
指名一个过期的类或成员
@deprecated description
{@docRoot}
指明当前文档根目录的路径
Directory Path
@exception
标志一个类抛出的异常
@exception exception-name explanation
{@inheritDoc}
从直接父类继承的注释
Inherits a comment from the immediate surperclass.
{@link}
插入一个到另一个主题的链接
{@link name text}
{@linkplain}
插入一个到另一个主题的链接,但是该链接显示纯文本字体
Inserts an in-line link to another topic.
@param
说明一个方法的参数
@param parameter-name explanation
@return
说明返回值类型
@return explanation
@see
指定一个到另一个主题的链接
@see anchor
@serial
说明一个序列化属性
@serial description
@serialData
说明通过writeObject( ) 和 writeExternal( )方法写的数据
@serialData description
@serialField
说明一个ObjectStreamField组件
@serialField name type description
@since
标记当引入一个特定的变化时
@since release
@throws
和 @exception标签一样.
The @throws tag has the same meaning as the @exception tag.
{@value}
显示常量的值,该常量必须是static属性。
Displays the value of a constant, which must be a static field.
@version
指定类的版本
@version info
方法的调式:F5进入方法,F7由方法内部放回调用处
八.实现简单综合例子
1 packagecom.imooc.function;2
3 importjava.util.Scanner;4
5 public classTotalDemo {6 //在末尾插入数据
7 public int[] insertData(int[] arr){8 Scanner sc=newScanner(System.in);9 for(int i=0;i
15 }16 //展示数据
17 public void showData(int[] arr,intlength){18 if(length<=arr.length){19 System.out.println("数组的前"+length+"个数为:");20 for(int i=0;i
23 }24 }25 else{26 System.out.println("数组长度越界了!");27 }28 System.out.println();29 }30 //在指定位置插入数据
31 public int[] insertatArray(int[] arr,int n,intk){32 for(int i=arr.length-1;i>n;i--){33 arr[i]=arr[i-1];34 }35 arr[n]=k;36 returnarr;37 }38 //查询能被n整除的数
39 public void div(int[] arr,intn){40 for(inti:arr){41 if(i%n==0){42 System.out.print(i+" ");43 }44 }45 System.out.println();46 }47 public voidnotice(){48 System.out.println("***************************");49 System.out.println(" 1-插入数据 ");50 System.out.println(" 2-显示数据 ");51 System.out.println(" 3-在指定位置插入数据 ");52 System.out.println(" 4-查询能被n整除数据 ");53 System.out.println(" 0-退出");54 System.out.println("***************************");55
56
57 }58 public static voidmain(String[] args) {59 //实现增删改查
60 TotalDemo total=newTotalDemo();61 Scanner sc=newScanner(System.in);62 int[] arr=new int[10];63 while(true){64 total.notice();65 int n=sc.nextInt();66 if(n==0){67 System.out.println("您退出了");68 break;69
70 }71 switch(n){72 case 1:{arr=total.insertData(arr);break;}73 case 2:total.showData(arr, arr.length);break;74 case 3:{75 System.out.println("请输入插入的位置:");76 int n1=sc.nextInt();77 System.out.println("请输入插入的值:");78 int k1=sc.nextInt();79 total.insertatArray(arr, n1, k1);80 break;}81 case 4:{82 System.out.println("请输入被除数:");83 int n1=sc.nextInt();84 total.div(arr, n);85 break;86 }87 default:{88 System.out.println("输入错误");break;89 }90
91 }92 }93
94 }95
96 }
View Code