Java学习第八天:方法

文章介绍了Java中的流程控制,如打印三角形的练习,详细解析了代码逻辑。探讨了方法的概念、设计原则和命名规范,并提供了加法方法的示例。文章还讲解了方法的调用、参数类型(形参与实参)、返回值以及方法的重载。此外,提到了命令行传参和可变参数的使用,并给出相关代码实例。
摘要由CSDN通过智能技术生成

流程控制练习

练习:打印三角形(五行)

具体思路:将三角形分成三部分,然后逐步打印

代码实现:

package com.xu.struct;

public class tsxtdemo01 {
    public static void main(String[] args) {
        //打印三角形  5行

        for (int i = 1; i <= 5; i++) {
            for (int j =5;j>=i;j--){
                System.out.print(" ");
            }
            for (int j =1;j<=i;j++){
                System.out.print("*");
            }
            for (int j =1;j<i;j++){
                System.out.print("*");
            }
            System.out.println();
        }


    }
}

解释:在外层for循环行数内存在三个平行的循环,首先打印每行的空格,然后分两次打印对于的星号。

运行结果:

补充:要是对具体流程并不了解,可以使用debug操作

  1. 在外层循环设置断点

  1. 选择idea右上角调试:

  1. 点击步入键进行逐步操作:

方法

什么是方法

System.out.println(),那他是什么呢?

(类)(对象)(方法)

Java方法是语句的集合,他们在一起执行一个功能。

*方法是解决一类问题的步骤的有序组合

*方法包含于类或对象中

*方法在程序中被创建,在其他地方被引用

设计方法的的原则:方法的本意是功能块,就是实现某个功能道德语句块的集合。我们设计方法的时候,最好保持方法的原子性就是一个方法只完成一个功能,这样利于我们后期的扩展

回顾:方法的命名原则?

回顾第四天学习的命名过程:http://t.csdn.cn/2RILx

加法实现:

package com.xu.method;

public class demo01 {
    //main方法
    public static void main(String[] args) {
      int sum = add(1,2);
        System.out.println(sum);

    }

    //加法
    public static int add(int a,int b){
        return a+b;
    }
}

main方法尽量保持简洁干净,复杂程序尽量放到方法中。

我们将for循环中的练习2:用while或者for循环输出1-1000之间能被5整除的数,并且每行输出三个

放置在一个方法中,进行操作:

package com.xu.method;

public class demo01 {
    //main方法
    public static void main(String[] args) {
     // int sum = add(1,2);
       // System.out.println(sum);
        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%15==0){//每行
                System.out.println("\n");
            }
        }
    }
}

在main方法外完成定义后,在main里面我们可以使用test();来完成对于text方法的运行。

方法的定义

Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

方法包括一个方法头和方法体。下面是一个方法的所有部分:

*修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。

*返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。

*方法名:是方法的实际名称。方法名和参数表共同构成方法签名。

*参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为是实参或者变量。参数列表时指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

形式参数:在方法被调用时用于接收外界输入的数据(用来定义作用的)

实参:调用方法时实际传给方法的数据

*方法体:方法体包含具体的语句,定义该方法的功能。

语法:

小问题:在上面的代码中,什么是形参,什么是实参?

答案:形参:a,b;实参:1,2(写方法时写的参数是形参,调用的时候给的是实参

比较大小的方法:

发现报错了:

(return语句一般放在最外层,当有if语句的时候)

报错原因:因为如果if不执行方法就没有返回值了,但是方法需要一个int返回值

但是如果加上else分支也加上return就不会报错了,因为这样所有的分支都有了返回值,自然就不会报错。我们来做一下改进:

这样就没有报错了,因为每一个分支都有了返回值

当然我们也可以做一些改进,比如我们设置一个变量result,将两个数中大的那个数赋值给result,然后再输出result:

补充:return的两个作用:

1.返回值

2.终止方法 例如:return 0; (在后面的相等情况下我们可以看见)

代码实现:

package com.xu.method;

public class demo02 {
    public static void main(String[] args) {
        int max=max(10,20);
        System.out.println(max);

    }
    //比大小
    public  static  int max(int num1,int num2){
        int result = 0 ;
        if (num1>num2){
        result= num1;
        }
        if (num1==num2){
            System.out.println("相等");
            return 0;//终止方法
        } else{
            result=num2;
        }
        return result;

    }
}

运行结果:

方法的调用

调用方法:对象名.方法名(实参列表)

Java支持两种调用的方式,根据方法是否返回值来选择

当方法返回一个值的时候,方法调用通常被当作一个值。例如:

int larger = max(30,40);

如果方法返回值为void,方法调用一定是一条语句。

System.out.println("hello,congxinxiaoxiong!");

课后拓展了解:

值传递(Java)和引用传递

值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。

引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。(C语言中的指针)

具体文章:http://t.csdn.cn/MNr38

方法的重载

重载就是在一个类中,有相同的函数名称,但形参不同的函数

方法的重载的规则:

*方法名称必须相同

*参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)

*方法的返回类型可以相同也可以不相同

*仅仅返回类型不同不足以构成方法的重载

实现理论:

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错

package com.xu.method;

public class demo002 {
    public static void main(String[] args) {
        int max=max(10,20,30);
        System.out.println(max);
    }
    //比大小
    public  static  int max(int num1,int num2){
        int result = 0 ;
        if (num1>num2){
            result= num1;
        }
        if (num1==num2){
            System.out.println("相等");
            return 0;//终止方法
        } else{
            result=num2;
        }
        return result;
    }
    //比大小
    public  static  int max(double num1,double num2){
        int result = 0 ;
        if (num1>num2){
            result= (int)num1;
        }
        if (num1==num2){
            System.out.println("相等");
            return 0;//终止方法
        } else{
            result=(int)num2;
        }
        return result;

    }
    //比大小
    public  static  int max(int num1,int num2,int num3){
        int result = 0 ;
        if (num1>=num2&&num1>=num3){
            result= num1;
        }
        if (num1==num2&&num2==num3){
            System.out.println("相等");
            return 0;//终止方法
        } if(num2>=num1&&num2>=num3){
            result=num2;
        }
        else{
            result=num3;
        }
        return result;

    }
}

我们在这里设置了三种情况,分别是两个int型参数,两个double型参数,三个int型参数

命令行传参

有时候你希望运行一个程序时候再传递给他消息。这要靠传递命令行参数给main函数实现。

package com.xu.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.length 数组长度

我们找到demo03.java文件,然后进入命令行(cmd+空格回车)

输入javac demo03.java生成class文件

然后使用cd../退到src目录下,可以进行执行传参

可变参数

JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

在方法声明中,在指定参数类型后加一个省略号(...)

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

package com.xu.method;

public class demo04 {
    public static void main(String[] args) {
     demo04 demo04=new demo04();
     demo04.test();
    }
public void test(int... i){
    System.out.println(i);
}

}

输出了一个对象的地址

例:排序

package com.xu.method;

public class demo05 {
    public static void main(String[] args) {
        //调用可变参数的方法
        printMax(34,3,3,2,56,2);
        printMax(new double[]{1,2,3});

    }
    public static void printMax(double...numbers){
        if(numbers.length==0){
            System.out.println("no");
            return;
        }
        double result = numbers[0];
        //排序
        for (int i = 1; i <numbers.length ; i++) {
            if(numbers[i]>result){
                result=numbers[i];
            }
        }
        System.out.println(result);
    }
}

明天我们将会进行递归和数组的学习。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值