春丈目里
什么是方法
System.out.println() //System是系统的类 out是System下的一个输出对象
//printl是一个方法
package Method;
public class Demo01 {
//main方法
public static void main(String[] args){
int add = add(1,2);
System.out.println(add);
}
//加法
public static int add(int a,int b){ //为了方便调用,加static
return a+b;
}
}
结果:
3
方法在程序中被创建,在其他地方被引用
方法是语句的集合,在一起执行一个功能——功能块
设计的时候保持方法的原子性:一个方法完成一个功能,利于后期的拓展
package Method;
public class Demo01 {
//main方法
public static void main(String[] args){
// int add = add(1,2); 把这两行没有用的加法方法“注掉”
// System.out.println(add);
test();
}
//加法
public static int add(int a,int b){
return a+b;
}
public static void test(){
for (int i = 0; i < 1000; i++) {
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){
System.out.println();
}
}
}
}
该程序没有把输出函数放进main方法,保持main方法的整洁干净
方法的定义和调用
Java的方法类似其他语言的函数,用代码片段完成特定功能
Java方法应该包含的部分:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
- 修饰符:可选
- 参数类型
- 形式参数 用来定义参数的:(int a,int b)
- 实参 实际调用传递给他的参数:(a:1,b:2)
- 如果需要返回值,使用return
package Method;
public class Demo02 {
public static void main(String[] args){
int max = max(210,210);
System.out.println(max);
}
//比大小
public static int max(int number1,int number2){
int result = -100;
if(number1==number2){
System.out.println("number1 == number2");
return 0 ; //终止方法
}
if (number1>number2){
result = number1;
}else
{
result = number2;
}
return result;
}
}
结果:
number1 == number2
0
方法调用
-
当方法返回一个值的时候,方法调用通常被当作一个值
int max = max(210,210);
-
当方法返回值是void,方法调用是一条语句
System.out.println("Hello,World!")
方法的重载
- 方法名相同
- 参数列表不同(个数,类型,参数排列顺序)
- 返回值类型无所谓
- 匹配失败会报错
命令行传递参数
main函数也是可以传递参数的, 程序运行时给它传递信息
package Method;
public class Demo03 {
public static void main(String[] args){
//args.length 数组长度
for(int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]:"+args[i]);
}
}
}
用cmd的方式执行:
在Explorer里执行
通过 javac Dem03.java 进行编译,生成了Demo03.class
尝试执行Demo03,会无法运行
因为要回退到src目录下才能执行
没结果是因为没给他加参数,这个程序要是输入数组
可变参数/不定项参数
在制定参数类型后面加一个省略号(…)。
一个方法中只能制定一个可变参数。普通参数必须在此之前声明,可变参数必须是该方法的最后一个参数。
package Method;
public class Demo04 {
public static void main(String[] args){
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,5);
}
public void test(int x,int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(x);
}
}
结果:
2
3
4
5
1
package Method;
public class Demo04 {
public static void main(String[] args){
//调用可变参数的方法
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});//double[] b = {1,2,3}; printMax(b);
}
public static void printMax(double... numbers){//改成(double a,double b,double... numbers) 结果可能会有变化
if(numbers.length == 0){
System.out.println("No argument passed");
return;
}
double result = numbers[0]; //声明一个1*1数组来当结果变量
//遍历数组找出最大值,赋值给result
for (int i = 1;i< numbers.length;i++){
if(result<numbers[i]){
result = numbers[i];
}
}
System.out.println("The max value is "+result);
}
}
结果:
The max value is 56.5
The max value is 3.0
递归
自己调用自己
可以将大型程序转化成相似但是规模较小的程序,大大减少代码量
递归结构:
- 递归头:指明什么时候不调用自身方法
- 递归体:
package Method;
public class Demo06 {
//阶乘
public static void main(String[] args){
System.out.println(f(4));
}
public static int f(int n){
if(n == 1){
return 1;
}else{
return n*f(n-1);
}
}
}
结果:
24