什么是方法?
所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块
内容梗概:
方法的声明和调用
方法的重载
1. 无参无返回值的方法
packagecom.vip.method;public classMethodDemo {//public static void main(String[] args) {// //不使用方法输出//System.out.println("***************");//System.out.println("hello world!");//System.out.println("***************");//}//用方法输出一行星号
public voidprintStar(){
System.out.println("*************");
}public static voidmain(String[] args) {//类的实例化||||创建对象
MethodDemo myMethod = newMethodDemo();
myMethod.printStar();//调用方法
System.out.println("hello world!");
myMethod.printStar();//调用方法
}
}
2.无参带返回值的方法
packagecom.vip.method;public classRecrangle {//求矩形面积的方法
public intarea(){int length = 10; //定义长
int width = 5; //定义宽
int getArea = length * width; //面积
return getArea; //返回语句中的变量类型要跟方法定义的值一样
}public static voidmain(String[] args) {
Recrangle r= newRecrangle();
System.out.println("矩形面积为:"+r.area());
}
}
3.带参无返回值的方法
定义一个求两个float类型数据最大值的方法,在方法中将最大值打印输出
packagecom.vip.method;public classMaxDemo {//求最大值的放大
public void max(float a,floatb){floatmax;if(a>b){
max=a;
}else{
max=b;
}
System.out.println("两个数的最大值为:"+max);
}public static voidmain(String[] args) {
MaxDemo md= newMaxDemo();
md.max(1111,21); //调用方法并传参
}
}
4.带参有返回值的方法
定义一个求n!(阶乘)的方法,然后再求1!+2!+3!+4!+5!
packagecom.vip.method;public classFacDemo {//求阶乘的方法
public int fac(intn){int s = 1;for(int i=1;i<=n;i++){
s= s*i;
}returns;
}public static voidmain(String[] args) {
FacDemo fc= newFacDemo();int sum = 0;//求5以内的整数阶乘之和
for(int i=1;i<=5;i++){int fac = fc.fac(i); //调用方法
sum = sum+fac;
}
System.out.println(sum);
}
}
5. 数组作为方法参数
packagecom.vip.method;public classArrayMethod {//打印输出数组元素的值
public void printArry(int[] arr){for(int i=0;i
System.out.print(arr[i]+" ");
}
System.out.println();
}public static voidmain(String[] args) {int[] arr = {10,2,30,4,50,6};
ArrayMethod am= newArrayMethod();
am.printArry(arr);
}
}
packagecom.vip.method;importjava.util.Scanner;public classArrayMethod2 {//查找数组元素值的方法
public boolean search(int n, int[] arr){boolean flag = false;for(int i=0;i
flag= true;//System.out.println("找到了");
break;
}
}returnflag;
}public static voidmain(String[] args) {int[] arr = {11,22,33,44,55,66};
Scanner sc= newScanner(System.in);
System.out.println("请输入要查找的数据:");int n =sc.nextInt();
ArrayMethod2 am2= newArrayMethod2();boolean flag =am2.search(n,arr);if(flag){
System.out.println("找到了");
}else{
System.out.println("未找到");
}
}
}
6. 方法重载
什么是方法重载:
方法名相同,参数列表不同(当调用方法时给与不同传参,会自行调用相应的重载方法)
例题:定义三个方法,实现int、double和数组类型和的问题
packagecom.vip.method;public classMathDemo {//求两个int类型数的和
public int plus(int m, intn){return m+n;
}//求两个double类型数的和
public double plus(double m,doublen){return m+n;
}//求数组元素的累加和
public int plus(int[] arr){int sum = 0;for(int i=0;i
sum= sum +arr[i];
}returnsum;
}public static voidmain(String[] args) {
MathDemo md= newMathDemo();int m=5,n=10;int[] arr = {1,3,5,7,9,11};
System.out.println("int类型和:"+md.plus(m,n));
System.out.println("数组元素累加和:"+md.plus(arr));
System.out.println("double类型和:"+ md.plus(m,1.1));
}
}
7. 方法传值
基本数据类型传值,在主方法中调用,值不会影响
引用数据类型(对象和数组都属于引用数据类型)传值,在主方法中调用,值会受影响
不受影响的基本数据类型举例
packagecom.vip.method;public classExchangeDemo {//交换方法
public void swap(int a,intb){inttemp;
System.out.println("交换前:a="+a+",b="+b);
temp=a;
a=b;
b=temp;
System.out.println("交换后:a="+a+",b="+b);
}public static voidmain(String[] args) {int m=4,n=5;
ExchangeDemo ed= newExchangeDemo();
System.out.println("主方法交换前:m="+m+",n="+n);
ed.swap(m,n);
System.out.println("主方法交换前:m="+m+",n="+n);
}
}
运行结果是:
主方法===方法调用前数组a1的元素为:1 2 3 4 5数组a的元素为:1 2 3 12 5主方法==方法调用后数组a1的元素为:1 2 3 12 5Process finished with exit code0
受影响的引用数据类型举例(数组)
packagecom.vip.method;public classArrayDemo {//定义一个用于修改某个数组元素值的放大
public void updateArray(int[] a){
a[3] = 12;
System.out.println("数组a的元素为:");for(intn:a){
System.out.print(n+ " ");
}
System.out.println();
}public static voidmain(String[] args) {
ArrayDemo ad= newArrayDemo();int[] a1 = {1,2,3,4,5};
System.out.println("主方法===方法调用前数组a1的元素为:");for(int n:a1){System.out.print(n + " ");}
System.out.println();
ad.updateArray(a1);
System.out.println("主方法==方法调用后数组a1的元素为:");for(int n:a1){System.out.print(n + " ");}
}
}
运行结果为:
主方法===方法调用前数组a1的元素为:1 2 3 4 5数组a的元素为:1 2 3 12 5主方法==方法调用后数组a1的元素为:1 2 3 12 5Process finished with exit code0
8. 可变参数列表(传参的数量不确定,可以发生变化)
一个参数列表中只能存在一个可变参数列表
public void sum(int... n){}
注意:数组可以作为可变参数的传值,当定义的方法参数为可变参数时,可以直接传入数组调用
反之可变参数不能作为数组的传值,当定义的方法参数为数组时,不可以直接传入可变参数调用
packagecom.vip.method;public classArgsDemo1 {//查找//如果参数列表中有两个以上参数,可变参数一定是在最后的!
public void search(int n,int... a){boolean flag = false;for(inta1:a){if(a1==n){
flag= true;break;
}
}if(flag){
System.out.println("找到了"+n);
}else{
System.out.println("没找到"+n);
}
}public static voidmain(String[] args) {
ArgsDemo1 ad1= newArgsDemo1();
ad1.search(3,1,2,3,4,5);int[] b = {1,2,3,4,5,6};
ad1.search(4,b); //数组可以作为可变参数列表的传参
}
}
9. 可变参数列表作为方法参数的重载问题
packagecom.vip.method;/*** 文档注释(可以生成帮助文档)
* 关于可变参数列表的重载问题
*@authorxxxxxxx
*@version1.0
**/
public classArgsDemo3 {public int plus(int a,intb){
System.out.println("不带可变参数的方法被调用!");return a+b;
}public int plus(int... a){int sum = 0;for(intn:a){
sum= sum+n;
}
System.out.println("带可变参数的方法被调用!");returnsum;
}public static voidmain(String[] args) {
ArgsDemo3 ad3= newArgsDemo3();
System.out.println(ad3.plus(1,2)); //可变参数列表所在的方法是最后被访问的,只要有其他方法,就优先调用其他的
}
}