2021-03-04

Java的方法

  1. 什么是方法
  2. 方法定义及调用
  3. 方法重载
  4. 命令行传递参数
  5. 可变参数

何谓方法

System.out.println()

System类 out对象 println()方法

JAVA方法是语句的集合

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

  • 方法包含于类或对象中

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

  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合.

  • 一个方法只完成1个功能,

方法的命名规则

  • 首字母小写
  • 驼峰原则:第2个单词开始首字母为大写字母

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

package com.shifei.struck.way;

import static com.shifei.struck.way.Domo00.add;
    //方法是解决一类问题的步骤的有序组合
public class Domo00 {
    //publi static  修饰词         void 返回值为0      main()方法
    public static void main(String[] args) {
        int sum = add(1, 2);
        System.out.println(sum);//3

    }

    //加法
        //publi static  修饰词         int返回值类型
        public static int add(int a,int b){
        return a+b;     //方法是解决一类问题的步骤的有序组合
        }
}

例2:设计方法的原则:实现某个功能的语句块的集合

main()方法保持简洁

package com.shifei.struck.way;

    //设计方法的原则:实现某个功能的语句块的集合.
public class Domo01 {
    public static void main(String[] args) {
        int sum = add(1, 2);
        System.out.println(sum);//3

        test();
    }

    //加法
    //publi static  修饰词         int返回值类型
    public static int add(int a,int b){
        return a+b;     //方法是解决一类问题的步骤的有序组合


    }

    //方法二
    public static void test(){
        int i=1;
        int sum=0;
        while (i<101){
            sum=sum+i;
            i++;
        }
        System.out.println(sum);//5050
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bptz4Uil-1614818157539)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210218011603391.png)]

方法定义及调用

JAVA的方法类似于其它语言的函数,是–段用来完成特定功能的代码片段。
一个方法包含以下语法:
方法包含-一个方法头和一个方法体.

一个方法的所有部分:

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

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

  • 方法名:是方法的实际名称。

  • 参数类型:参数像是一个占位符.当方法被调用时,传递值给参数.这个值被称为实参或变量.

    形式参数:用于定义作用。例如:public static int add(int a,int b){

    实参:实际调用传递给它的参数。例如:int sum = add(1, 2);

  • 参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

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

格式:

修饰符 返回值类型 方法名(参数类型、参数名){。。。方法体。。。return 返回值;}

例3:比大小

package com.shifei.struck.way;

    //比大小
public class Domo03 {
    public static void main(String[] args) {
        int max = max(10, 20);
        System.out.println(max);//20
    }

    //比大小
public static int max(int a,int b) {
       int result=0;

        if (a==b){
            System.out.println("a=b");
            return 0;
        }if (a>b){
            result=a;
        }else {
            result=b;
        }

        return result;
    }
}

package com.shifei.struck.way;

    //比大小
public class Domo03 {
    public static void main(String[] args) {
        int max = max(20, 20);
        System.out.println(max);//20
    }

    //比大小
public static int max(int a,int b) {
       int result=0;

        if (a==b){
            System.out.println("a=b");
            return 0;
        }if (a>b){
            result=a;
        }else {
            result=b;
        }

        return result;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEplXcUZ-1614818157541)(C:\Users\Administrator\Desktop\360截图20210218030112040.jpg)]

方法调用

调用方法:对象名.(方法名(实参列表)
JAVA支持两种调用方法的方式,根据方法是否返回值来选择.
当方法返回-个值的时候,方法调用通常被当做一个值.例如:int larger = max(30, 40);INT=最大值(30,40);
如果方法返回值是void,方法调用定是一条语句.System. out. print1n( “hj”);
课后拓展了解:值传递和引用传递

值传递和引用传递

值传递:

方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

package com.oop;

    //值传递
public class Demo01 {
        public static void main(String[] args) {
            int a=1;//1
            System.out.println(a);
            Demo01.change(a);
            System.out.println(a);//1
        }

    public static void change(int a){//
        a=10;
    }
}

引用传递:

也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
**在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中*对引用的操作*将会影响到实际对象

package com.oop;

    //引用传递
public class Demo02 {
        public static void main(String[] args) {
            preson preson = new preson();//实例化过程
            System.out.println(preson.name);//null
            Demo02.change(preson);
            System.out.println(preson.name);
        }
        public static void change(preson preson){
            //Perosn是--个对象:措向的->Perosn perosn=New Perosn();这是一个具体的人,可以改变属性!
            preson.name="dsdd";
        }

}
//定义类有一个属性
class preson{
    String name;//默认值null
}

方法重载

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

规则:

  • 方法名称必须相同.
  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
  • 方法的返回类型可以相同也可以不相同.
  • 仅仅返回类型不同不足以成为方法的重载.

实现理论:

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

例如:

package com.shifei.struck.way;

public class Domo03 {
    public static void main(String[] args) {
        int sum = add(1, 2);
        System.out.println(sum);//3
        add();
        add();}
    //加法
    //publi static  修饰词         int返回值类型
    public static int add(int a,int b){
        return a+b;     //方法是解决一类问题的步骤的有序组合

        //加法
        //publi static  修饰词         int返回值类型
        public static int add(int a,int b,int c){
            return a+b+c;     //方法是解决一类问题的步骤的有序组合

            //加法
            //publi static  修饰词         int返回值类型
            public static int add(double a,double b){
                return (int) (a+b);     //方法是解决一类问题的步骤的有序组合
    }
}
  • public static int add(int a,int b){

  • public static int add(int a,int b,int c){

  • public static int add(double a,double b){

命令行传递参数

希望运行一个程序传递消息 靠传递命令行参数给函数实现

package com.shifei.struck.way;

    //命令行传递参数
public class Domo03 {
    public static void main(String[] args) {
        //args.length数组长度
        for (int i=0; i<args.length;i++){
            System.out.println("args[" +i+ "]:" +args[i]);
        }
    }
}

进入文档,在导航栏输入cmd -----Javac Domo03.java------创建.class文件

cd…/返回上一级文件目录------返回到src-----java com.shifei.struck.way.Domo03----java com.shifei.struck.way.Domo03 this is shifei

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCAm3U20-1614818157543)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210218160546651.png)]

错误: 编码GBK的不可映射字符

解决方法:javac -encoding UTF-8 Domo03.java 成功创建.class文件

可变参数

  • JAVA支持传递同类型的可变参数给一个方法。

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

    例如(int…1)省略号三个点

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

    例如:(int x,int…1);

    package com.shifei.struck.way;
    
    public class Domo04 {
        public static void main(String[] args) {
            Domo04 domo04 = new Domo04();
            domo04.test(1,2,3,4);
    
        }
        public void test(int x,int...i){
            System.out.println(i[0]);//2
            System.out.println(i[2]);//4
        }
    }
    
package com.shifei.struck.way;

    //可变参数
public class Domo05 {
    public static void main(String[] args) {
        printMax(4545,451,54,445);
        printMax(new double[]{ });//参数内容可以为空
    }
    public static void printMax(double ...numbers){
        //判断传递参数是否为o
        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("The Max is "+result);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkXVIvxF-1614818157545)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210218165723245.png)]

递归

A方法调用A方法
递归结构包括两个部分:
递归头:什么时候不调用自身方法.如果没有头,将陷入死循环.
递归体:什么时候需要调用自身方法.

例:阶乘

package com.shifei.struck.way;

    //阶乘n*(n-)
public class Domo06 {
    public static void main(String[] args) {
        System.out.println(f(5));
        /* 基数小时可用递归
        大计算时不建议 内存过大会溢出
         */

    }
    public  static  int f(int n){
        if(n==1){
            return 1;//1的阶乘为1
        }
        else{
            return n*f(n-1);//f(1)-f(2)-f(3)-f(4)之间的值为递归
            //120
        }
    }
}

练习:计算器,实现加减乘除运算。可循环计算

  • 使用Scanner对象交互

  • 定义字符串

  • 可循环计算while语句

    输入Y时,循环进行一遍程序

    输入N时,输出结束语

  • 当输入Y时,定义输入格式

    数值一:i1 运算符:oper 数值三:i2 结果:result

  • 通过符号判断

package com.shifei.struck.way;

import java.util.Scanner;

    //计算器 calculator
public class Domo07
{
    public static void main(String[] args)
    {
        System.out.println("计算器 calculator");
        Scanner scanner = new Scanner(System.in); // 创建一个扫描器,
        String isNext ="Y";//定义字符串,作为while初始执行条件
        while (isNext.equals("Y")) {//是否继续计算?(输入y继续,其他任意键结束)
            double i1 = 0;//操作数1
            double i2 = 0;//操作数2
            double result = 0;//结果
            String oper = "+";//运算符,通过switch
            System.out.println("请输入第一个操作数:");
            i1 = scanner.nextDouble();   //程序会等待用户输入完毕
            System.out.println("请输入运算符:");
            oper = scanner.next();       //程序会等待用户输入完毕
            System.out.println("请输入第二个操作数:");
            i2 = scanner.nextDouble();     //程序会等待用户输入完毕
            switch (oper) {      //判定运算符符号
                case "+":
                    System.out.println("您选择" + oper + "运算符:");
                    result = add(i1, i2);//第一个方法:加法
                    System.out.println("结果为" + i1 + oper + i2 + "=" + result);
                    break;
                case "-":
                    System.out.println("您选择" + oper + "运算符:");
                    result = sub(i1, i2);//第二个方法:减法
                    System.out.println("结果为" + i1 + oper + i2 + "=" + result);
                    break;
                case "*":
                    System.out.println("您选择" + oper + "运算符:");
                    result = mul(i1, i2);//第三个方法:乘法
                    System.out.println("结果为" + i1 + oper + i2 + "=" + result);
                    break;
                case "/":
                    if (i2==0){//第四种情况:除法(除数不能为0)
                    System.out.println("除数不能为0");//当判断为0时
                }else{
                    System.out.println("您选择" + oper + "运算符:");//当不为o时
                    result = div(i1, i2);
                    System.out.println("结果为" + i1 + oper + i2 + "=" + result);
                }
                break;
                default://其他运算符判定为错误
                    System.out.println("输入运算符错误!");
                    break;
            }
            System.out.println("是否继续计算?(输入Y继续,其他任意键结束):");
            isNext = scanner.next();//终止条件
        }
        System.out.println("感谢使用本计算器!");//不输入Y,执行输出
        scanner.close(); //凡是属于io流的类,如果不关闭会一直占用资源
    }


    //方法一:加
    public static double add(double num1,double num2) {
        return num1 + num2;
    }
    //方法一:减
    public static double sub(double num1,double num2) {
        return num1 - num2;
    }

    //方法一:乘
    public static double mul(double num1,double num2) {
        return num1 * num2;
    }


    //方法一:除
    public static double div(double num1,double num2) {
        return num1 / num2;
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值