【Java知识点整理】方法/函数篇

Java方法详解

  • 生活中的方法
  • Java中的方法……实现某种功能(如main方法

1、什么是方法?

  • Java中的方法是语句的集合,在一块可以执行某个功能。

    • 1 方法是解决一类问题的步骤的有序组合
    • 2 包含于类和对象
    • 3 在程序中被创建,在其他的地方被引用
    public class Demo01 {
        public static void main(String[] args) {
            traingle(10);//引用方法traingle,并且输入行高
        }
    
        public static void traingle(int h) {
            //测试 引用之前的例题 生成h行的正三角形图案
            for (int i = 1; i <= h; i++) {  //行高多少就有几行,每行循环1次
                for (int k = h; k > i; k--) {
                    //先输出空格
                    System.out.print(" ");
                }
                for (int pic = 1; pic <= ((2 * i) - 1); pic++) {
                    System.out.print("%");//输出图案
                }
                System.out.println();
            }
        }
    }
    

设计方法的原则:

  • 设计方法的原则:
    • 方法的本意是功能块,就是实现某个功能的语句块的集合;
    • 设计方法时要保持原子性:
      • 即:一个方法只做一个功能
      • 有利于后期的拓展

方法的命名规则

  • 首字母小写+驼峰原则

2、方法的定义和调用

  • Java的方法 类似于 其他语言的函数功能,都是一段用来完成特定功能的代码片段。

2.1、定义方法需要包含的语法:

修饰符 返回值类型 方法名(参数类型  参数名){
    ...
    方法体
    ...
    return 返回值;    
}  
  1. 修饰符:可选的,高速编译器如何调用该方法。并且定义了访问的类型。(public、private、protected和static等

  2. 返回值类型:定义方法可能返回值的数据类型。

    • 当没有返回值时,使用关键字void
  3. 方法名:是方法的实际名称。和参数表共同构成方法签名

  4. 参数类型:参数像是一个占位符。参数是可选的。当方法被调用时,传递值给参数。

    • 分为形式参数和实参:

      • 形式参数:在方法被调用时,用于接收外界输入的数据。

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

      • //设计一个两数相加的方法
        public class Demo02 {
            public static void main(String[] args) {
                int sum=add(10,20);          //实参10和20 
                System.out.println(sum);
            }
            public static int add(int a,int b){   //形式参数a和b
                //注意,定义多个形式参数之间要用逗号“,”隔开
                return a+b;
            }
        }
        
  5. 方法体:就是包含的语句,定义了方法的功能。

##练习:设定一个比大小的方法。

//设计一个比大小的方法
public class Demo03 {
    public static void main(String[] args) {
        compare_01(3,5);
        System.out.println(compare_02(3,5));
        System.out.println("测试大小相同的情况:");
        compare_01(5,5);
        System.out.println(compare_02(5,5));
        //测试通过

    }
    //方法一、直接输出语句显示结果。
    public static void compare_01(int a,int b){
        if(a==b){
            System.out.println(a+"=="+b);
        }else if(a > b){
            System.out.println(a+">"+b);
        }else{
            System.out.println(a+"<"+b);
        }
    }
    //方法二、返回大的值作为结果
    public static int compare_02(int a,int b) {
        int num = 0;//方法内的变量 也需要初始化 
        if (a == b) {
            System.out.println(a + "==" + b);
            return 0;//输出的结果里会多一个0? 这个解决。。。
        } else if (a > b) {
            num = a;
        } else {
            num = b;
        }
        return num;
    }
}

2.2、方法调用

  • 前面已经有大量应用了

  • 语法

    对象名.方法名 ??

  • 当方法有返回值时,**方法调用通常被当做一个值。**如

    int max=compare_02(3,5);

  • 当方法返回值是void时,**方法调用一定是一条语句。**如

    System.out.println("Hello!") ;

    • (其中println就是一个方法)
  • 对象名.方法名 ??:需要用到 new

2.3 拓展:值传递 和引用传递(面试会考

简单理解Java都是值传递。

  • 可以拓展在网上理解。

3、方法的重载

简单来说,两个相同的类拥有一样的名字,但是参数(数据类型、参数的数量!)不同,两者可以同时存在,并且根据参数选择进行调用。

3.1方法重载的规则

  1. 方法的名称必须相同;
  2. 参数列表必须不同;(个数、类型、排列顺序不同等)
  3. 返回值则不做要求;

3.2实现理论:

方法名称相同时,编译器会根据参数列表逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。


基础阶段先掌握概念,后期可以通过分析源码来加深认识


#练习:设计一个可以2个、3个、4个数相加的方法

public class Demo04 {
    public static void main(String[] args) {
        System.out.println(add(5,3));
        System.out.println(add(5,3,1.5));
        System.out.println(add(5,3,1.5,2.3));
        //结果正确
    }
    public static int add(int a,int b){   //形式参数a和b
        //注意,定义多个形式参数之间要用逗号“,”隔开
        return a+b;
    }
    public static double add(double a,double b){
        return a+b;
    }
    public static double add(double a,double b, double c){
        return a+b+c;
    }
    public static double add(double a,double b, double c,double d){
        return a+b+c+d;
    }
}

结果测试正确。

4、命令行传递参数

当希望运行一个程序时再传递给它信息,就要靠传递命令行参数给main()函数实现。

举例,并通过cmd执行
//通过main方法传递东西
public class Demo {
    public static void main(String[] args) {
        //args.length数组长度
        for (int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]:"+args[i]);
            //args[i]表示数组对应的元素
        }
    }
}

方法1:尝试使用IDEA自带的Terminal(终端,在下面)功能调用cmd功能,进行测试。

方法2:可以直接在文件夹目录前加入cmd+空格,调出CMD窗口进行测试。

  • 直接输入“javac com.zhc.method.Demo”尝试直接运行程序。/错误
PS I:\JavaProject\JavaSE> javac com.zhc.method.Demo
错误: 仅当显式请求注释处理时才接受类名称 'com.zhc.method.Demo'
1 个错误      
  • 进入文件夹目录后,输入“javac Demo.java”. /成功!
    • 注意 语句涉及中文需要加入参数“ -encoding UTF-8”才能成功.
I:\JavaProject\JavaSE\基础语法\src\com\zhc\method>javac Demo.java -encoding UTF-8

//成功则没有提示;并且文件夹会生成 Demo.class
###如何运行?
  • 方法一:直接输入“java Demo” //错误

    I:\JavaProject\JavaSE\基础语法\src\com\zhc\method>java Demo
    错误: 找不到或无法加载主类 Demo
    
  • 方法二:使用“cd…”指令返回上级,到src文件夹。再输入“java ” +目录“com.zhc.method.Demo ”

    • 成功,但是我们需要传递一个数组进入args内
    • 故在cmd 后再加入几个数or字符串即可输出如下:
I:\JavaProject\JavaSE\基础语法\src>java com.zhc.method.Demo

I:\JavaProject\JavaSE\基础语法\src>java com.zhc.method.Demo 10 20 30
args[0]:10
args[1]:20
args[2]:30
    
I:\JavaProject\JavaSE\基础语法\src>java com.zhc.method.Demo I am fine !
args[0]:I
args[1]:am
args[2]:fine
args[3]:

5、可变参数

  • 简单理解:精简多个重载数组

  • 用法:在方法声明中,在制定参数类型后加一个省略号“…”

  • 注意:一个方法中只能制定一个可变参数,他必须是方法的最后一个参数(也就是说,任何普通参数必须在他之前声明)。

    • 例如

      public static void printMax( duoble... numbers){
          //这里的double...就是可变参数
      }
      
  • 其实可变参数的思想就是数组,后续会讲到。

    • 标记一下例题讲解 后续回看:例题

6、!!递归

  • 如果想要直接自己调用自己的方法 ,会爆内存,报错:StackOverflowError (堆栈溢出错误)

java用栈比较多

什么是递归?

递归就是:A方法调用A方法,自己调用自己。

需要注意的是

  • 递归必须包含两个部分:

    • 递归头:什么时候不调用自身的方法(类似判断语句
    • 递归体:什么时候,调用自身的方法(类似循环体
  • 缺点:占用内存,能不用就不用!!

例题:用递归的方法实现“阶乘”的计算。
public class Demo {
    public static void main(String[] args) {
        System.out.println(d(5));//调用方法d
    }
    public static int d(int a){
        int sum=1;
        //先设定递归头
        if(a==1){
            return sum;
        }
        if(a > 1){
            sum = a*d(a-1); //再设定递归体
        }
        return sum;
    }
}

7、作业:编写计算器

2022年4月9日

题目:写一个计算器,要求实现加减乘除功能,并且能够循环接受新的数据,通过用户交互实现。

思路的推荐:

  • 写4个方法:加减乘除;
  • 利用循环+switch进行用户交互
  • 传递需要操作的两个数
  • 输出结果
package com.zhc.method;
/*
题目:
写一个计算器,要求实现加减乘除功能,
并且能够循环接受新的数据,通过用户交互实现。
要求:
- 写4个方法:加减乘除;
- 利用循环+switch进行用户交互
- 传递需要操作的两个数
- 输出结果
 */
     /*
    分析:首先要有什么部分?
    1、用户交互:需要输入 两个数 以及 运算符号,最终经过计算 再输出 结果即可。 (success
    2、内部运算:按题目要求,分别编写四个方法  (sucess 但是可以优化?
    3、检查:用户输入错误的内容,需要反馈错误?  (怎么实现?最简单的 if语句判断,但是很冗长
    4、实现循环使用,(用循环结构?)判断能否结束程序。 (想着很简单,其实很难
     */

import java.util.Scanner;

public class Demo04 {

    //我们先实现1和2
    public static void main(String[] args) {
        System.out.println("计算器已启动,请输入一个数:");
        Scanner scanner = new Scanner(System.in);  //启动scanner
        double num1 = scanner.nextDouble();
        System.out.println("您成功输入了:"+num1);
        System.out.println("请输入运算符号(+ - * /)");
        String test = scanner.next();              //获取运算符号
        System.out.println("您成功输入了"+num1+test);
        System.out.println("请输入下一个数:");
        double num2 = scanner.nextDouble();
        System.out.println("您成功输入了:"+num1+test+num2);
        //---------------------------------------------------

        //实现计算功能并返回结果
        double re=0;
        switch (test){
            case "+":
                re=add(num1,num2);
                System.out.println("输出的结果为:"+re);
                break;
            case "-":
                re=sub(num1,num2);
                System.out.println("输出的结果为:"+re);
                break;
            case "*":
                re=mul(num1,num2);
                System.out.println("输出的结果为:"+re);
                break;
            case "/":
                re=div(num1,num2);
                System.out.println("输出的结果为:"+re);
                break;
            default:
                System.out.println("您输入的运算符有误");
                break;
        }
     scanner.close();
    }

    static public double add(double a,double b){
        return a+b;
    }
    static public double sub(double a,double b){
        return a-b;
    }
    static public double mul(double a,double b){
        return a*b;
    }
    static public double div(double a,double b){
        return a/b;
    }

}

。。。未完待续。。检查和循环的功能还没设计好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
java核心知识点整理 1.Java没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定类的main方法的代码开始执行,因此,执行代码必须有一个main函数。 3.Java是典型的强类型语言,即必须声明变量的类型,Java有8种类型,6种数值类型(4个整数型和2个浮点型)、一个字符类型和一个boolean类型。 想学习java可以来这个群,首先是二二零,间是一四二,最后是九零六,里面有大量的学习资料可以下载。 4.强制类型转换: int nx = (int) x; // (语法:用圆括号将目标类型括起来,后面跟上要转换的变量); 5.Java不能为单独的方法,如main方法,定义局部常量,而只能为类定义常量,供该类的所有方法使用,所以,通常称之为类常量。如: class UsersConstants{ 2public static final double g = 32; public static final double main(String[] args){ System.out.println(g); } } 注意:常量定义于main方法的外边,而且必须有关键字 static final; 6.字符串的子串: String str = hello”“; String str1 = str.substring(0,4); //输出hell 7.不要用==运算符来测试两个字符串是否相等,该运算符只能判断两个字符串是否存在同一个位置。 用equals. String str = “hello”; str.equals(”hell”); // return false; 8.对象的行为、状态、标识 9.面向过程与OOP

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xcong_Zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值