什么是方法?
声明: public static void main(String[] args){ 方法体 }
声明: 访问修饰符 返回类型 方法名(参数列表){ 方法体 }
public static 访问修饰符
void 返回类型 (void表示不返回)
main 方法名
(String[] args) 参数列表
方法main 主方法是JAVA中特殊的方法 执行的入口
方法不支持嵌套
方法调用 使用对象名调用方法 例:
Scanner sc = new Scanner(System.in);
sc.nextInt();
sc.next();
所谓的方法,解决一类问题的代码的有序组合,是个功能模块
方法分类4类
无参无返回值方法
public class JiechenghDemo {
public void printStar() {
System.out.println("--------------"); }
public static void main(String[] args) {
//创建一个JiechenghDemo类的对象jiechenghDemo
JiechenghDemo jiechengDemo = new JiechenghDemo();
//使用对象名.方法名()去调用方法
for(int i=1;i<5;i++){
jiechengDemo.printStar();
}}}
无参带返回值方法
public class JiechenghDemo {
//求长方形面积的方法
public int area() {
int length=5;
int width=3;
int getarea = length*width;
return getarea; //返回语句
}
public static void main(String[] args) {
JiechenghDemo jiechengDoem = new JiechenghDemo();
System.out.print("长方形的面积为"+jiechengDoem.area());
}}
带参无返回值方法
public class JiechenghDemo {
//求最大值
public void max(float a,float b) {
float max;
if(a>b) {
max=a;
}else {
max=b;
}
System.out.print("a和b的最大值="+max);
}
public static void main(String[] args) {
JiechenghDemo jiechengDoem = new JiechenghDemo();
float a=15,b=23;
jiechengDoem.max(a, b);
}}
带参带返回值方法
public class JiechenghDemo {
//求阶乘的方法 n!=1×2×3×...×n //方法不能嵌套定义
public int fac(int n) {
int s=1;
for (int i=1;i<=n;i++) {
s=s*i; //s*=i
}
return s;
}
public static void main(String[] args) {
JiechenghDemo jiechenghDemo = new JiechenghDemo();
int fac = jiechenghDemo.fac(5);
System.out.println("5!="+fac);
//求阶乘和1到5的阶乘和
int sum=0; //存放和
for(int i=1;i<=5;i++) {
fac = jiechenghDemo.fac(i); //当i=1就得出1!的值 是2时2!的值
sum=sum+fac;
}
System.out.println("1!+2!+3!+4!5!="+sum);
}
}
结果:
5!=120
1!+2!+3!+4!5!=153
方法调用打印输出一维数组元素的所有值
public class JiechenghDemo {
//打印输出数组元素的值
public void printArray(int[] arr) {
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
JiechenghDemo jiechenghDemo = new JiechenghDemo();
int[] arr = {33,44,77,8,99,12,32};
jiechenghDemo.printArray(arr);
}
}
查找一维数组元素值的方法
public class JiechenghDemo {
//查找一维数组元素值的方法
public boolean search(int n,int[] arr) {
boolean flag = false; //默认是没找到 返回false;
for(int i=0;i<arr.length;i++) {
if(arr[i] ==n) {
flag = true;//找到了 就要break跳出循环
break;
} }
return flag; }
public static void main(String[] args) {
int[] arr1 = {2,3,4,5,6};
int n = 1;
JiechenghDemo jiechenghDemo = new JiechenghDemo();
System.out.println(jiechenghDemo.search(n, arr1));
}
}
方法重载
方法名相同,参数列表不同叫重载
调用的时候定义相同方法名但是参数列表比如一个是int 一个是double
例public void plus(int a,int b)
public double plus(double m, double n)
方法调用的时候 给的参数如下:
int m=5,n=10;
Demo.plus(m,n);则调用的public void plus(int a,int b)
Demo.plus(5.4,8.2);则调用的public double plus(double m, double n)
方法传值
普通变量传值 主方法定义m,n 赋给调用方法定义a,b
不管调用方法中a,b值怎么处理
都不会影响到主方法m,n的实际值
数组传值则 同时也可以修改主方法的数值 案例:
public class JiechenghDemo {
public void updateArray(int[] a) {
a[3]=15; //修改数组中的值
System.out.println("数组a的元素为");
for(int n:a) {
System.out.print(n+" ");
}
System.out.println();
}
public static void main(String[] args) {
int a1[] = {1,2,3,4,5,6};
System.out.println("方法调用前数组a1的元素为:");
for(int n:a1) {
System.out.print(n+" ");
}
System.out.println();
JiechenghDemo jc = new JiechenghDemo();
jc.updateArray(a1);
System.out.println("方法调用前数组a1的元素为:");
for(int n:a1) {
System.out.print(n+" ");
}
}
}
输出结果:
方法调用前数组a1的元素为:
1 2 3 4 5 6
数组a的元素为
1 2 3 15 5 6
方法调用前数组a1的元素为:
1 2 3 15 5 6
可变参数列表
例:public void sum(int… n){} //可变参数列表所在的方法是最后被访问的
/**
* 文档注释 关于可变参数和重载的问题
* @author admin
* @version 1.0
*/
public class JiechenghDemo {
//可变参数列表所在的方法是最后被访问的
public int plus(int a,int b) {
System.out.println("不带可变参数的方法被调用!");
return a+b;
}
public int plus(int... a) {
int sum = 0;
for(int n:a) {
sum=sum+n;
}
System.out.println("带可变参数的方法被调用!");
return sum;
}
public static void main(String[] args) {
JiechenghDemo jiechenghDemo = new JiechenghDemo();
System.out.println(jiechenghDemo.plus(1,2));
System.out.println(jiechenghDemo.plus(1,2,3));
}
}
不带可变参数的方法被调用!3
带可变参数的方法被调用!6