首页 > 编程语言 >Java学习笔记(三)java方法

Java学习笔记(三)java方法

时间:2023-03-02 18:35:16浏览次数:37  
标签:Java int void 笔记 method java 方法 public

学习笔记3

Java方法

一、什么是方法

  1. System.out.println() 是什么

    • System是一个类,out是一个对象,println()就是一个方法
    • 意思是调用System中的out对象的println()方法
  2. java方法是语句的集合,他们在一起执行一个功能

    • 方法是解决一类问题的步骤有序组合
    • 方法包含于类或对象中
    • 方法在程序中被创建,在其他地方被引用
  3. 设计方法的原则

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

package com.tyrantblue.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;
    }
    
    //1到1000能被5整除的数
    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("");
                //System.out.print("\n");
            }
        }
    }
}

二、方法的定义及调用

1. 方法的定义

  1. java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含一个方法头和一个方法体,以下是一个方法的所有部分:

    • 修饰符:修饰符是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
    • 返回值类型:方法可能会有返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。
    • 方法名:是方法的实际名称,方法名和参数表共同构成方法签名。
    • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型,顺序和参数的个数,参数是可选的,方法可以不包含任何参数。
      • 形式参数:在方法被调用时用于接受外界输入的数据
      • 实际参数:调用方法时实际传给方法的数据
    • 方法体:方法体包含具体的语句,定义该方法的功能。
  2. 方法定义语法

修饰符 返回值类型 方法名(参数类型 参数名){
    方法体
     
    return 返回值;
}
  1. 例:
package com.tyrantblue.method;

public class Demo02 {
    public static void main(String[] args) {
        int max = max(2,2);
        System.out.println(max);
    }

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

        if(num1>num2){
            result = num1;
        } else {
            result = num2;
        }
        return result;
    }
}

2. 方法的调用

  1. 调用方法:对象名.方法名(实参列表)
  2. Java支持两种调用方法的方式,根据方法是否返回值来选择
  3. 当方法返回一个值的时候,方法调用通常被当作一个值
int max = max(30, 40);
  1. 如果方法返回值是void,方法调用一定是一条语句
System,out,println("一条语句");
  1. 值传递和引用传递
    • java全部都是值传递

三、方法重载

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

  2. 方法的重载的规则:

    • 方法名称必须相同
    • 参数列表必须不同(参数类型不同,参数个数不同,参数排列顺序不同等)
    • 方法的返回值可以相同也可以不同
    • 仅仅返回类型不同不足以成为方法的重载
  3. 实现理论:

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

  4. 例:

package com.tyrantblue.method;

public class Demo02 {
    public static void main(String[] args) {
        int max = max(2,3);
        double doubleMax = max(2.3, 3.2);
        System.out.println(max);//3
        System.out.println(doubleMax);//3.2
        
    }

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

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

        if(num1>num2){
            result = num1;
        } else {
            result = num2;
        }
        return result;
    }
}

四、命令行传参

  • 有时候你希望运行一个程序的时候再给他传递消息,这要靠传递命令行参数给main()函数实现
package com.tyrantblue.method;

public class Demo03 {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]"+args[i]);
        }
    }
}
D:\Code\java\javaSE\基础语法\src\com\tyrantblue\method>javac Demo03.java

D:\Code\java\javaSE\基础语法\src\com\tyrantblue\method>java Demo03.class
错误: 找不到或无法加载主类 Demo03.class
原因: java.lang.ClassNotFoundException: Demo03.class

D:\Code\java\javaSE\基础语法\src\com\tyrantblue\method>cd
D:\Code\java\javaSE\基础语法\src\com\tyrantblue\method

D:\Code\java\javaSE\基础语法\src\com\tyrantblue\method>cd ../

D:\Code\java\javaSE\基础语法\src\com\tyrantblue>cd ../

D:\Code\java\javaSE\基础语法\src\com>cd ../

D:\Code\java\javaSE\基础语法\src>java com.tyrantblue.method.Demo03 not bad good job
args[0]not
args[1]bad
args[2]good
args[3]job

五、可变参数

  1. JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
  2. 在方法声明中,在指定参数后加一个省略号(...)。
  3. 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数都必须在它之前声明。
  4. 例:
package com.tyrantblue.method;

public class Demo04 {
    public static void main(String[] args) {
        Demo04 demo04 = new Demo04();
        demo04.test(1,2,3,4,5);

    }

    //有时重载方法太多,十分麻烦
//    public void method(){}
//    public void method(int i){}
//    public void method(int i,int j){}
//    public void method(int i,double j){}
//    public void method(double i,int j){}


    public void test(int ... i){//实际就是数组
    //public void test(int ... i,int x)    //后面不能再有
        System.out.println(i[0]);
        System.out.println(i[1]);
        System.out.println(i[2]);
        System.out.println(i[3]);
    }
}

六、递归

  1. A方法调用B方法,而递归是A方法调用A方法,自己调用自己
//这是错误递归
package com.tyrantblue.method;

public class Demo05 {
    public static void main(String[] args) {
        Demo05 demo05 = new Demo05();
        demo05.test();//StackOverflowError 栈溢出异常!!!
    }
    public void test(){
        test();
    }
}

  1. 利用递归可以用简单的程序来解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量,递归的能力在于用有限的语句来定义对象的无限集合。

  2. 递归结构分为两个部分:

    • 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
    • 递归体:什么时候需要调用自身方法
  3. 例:

package com.tyrantblue.method;

public class Demo06 {
    //递归思想
    //2! 2*1
    //3! 3*2*1
    //5! 5*4*3*2*1
    public static void main(String[] args) {
        System.out.println(f(100));
    }

    public static int f(int n){
        if (n == 1){
            return 1;
        } else {
            return n*f(n-1);
        }

    }
}

6.实例 简易计算器

package com.tyrantblue.method;

import java.util.Scanner;

public class Computer {
    public static void main(String[] args) {
        computer();
    }

    //加法
    public static double plus(double... x){
        double sum = 0;
        if (x.length<=1){
            System.out.println("请输入两个数以上哟~");
            return 0;
        }
        for (int i = 0; i < x.length; i++) {
            sum += x[i];
        }
        return sum;
    }

    //减法
    public static double minus(double x, double y){

        x = x-y;

        return x;
    }

    //乘法
    //除法
    public static double times(double... x){
        double sum = 1;
        if (x.length<=1){
            System.out.println("请输入两个数以上哟~");
            return 0;
        }
        for (int i = 0; i < x.length; i++) {
            sum = sum*x[i];
        }
        return sum;
    }

    public static double divided(double x, double y){

        x = x/y;

        return x;
    }
    public static void computer(){
        Scanner scanner = new Scanner(System.in);

        int x = 0;
        int y = 0;

        for(boolean flag = false;flag == false;){
            menu();
            if(scanner.hasNextInt()){
                switch(scanner.nextInt()){
                    case 1:
                        System.out.print("请输入第一个加数:");
                        x = scanner.nextInt();
                        System.out.print("请输入第二个加数:");
                        y = scanner.nextInt();
                        System.out.println("结果为:"+plus(x,y));
                        break;
                    case 2:
                        System.out.print("请输入被减数:");
                        x = scanner.nextInt();
                        System.out.print("请输入减数数:");
                        y = scanner.nextInt();
                        System.out.println("结果为:"+minus(x,y));
                        break;
                    case 3:
                        System.out.print("请输入第一个乘数:");
                        x = scanner.nextInt();
                        System.out.print("请输入第二个乘数:");
                        y = scanner.nextInt();
                        System.out.println("结果为:"+times(x,y));
                        break;
                    case 4:
                        System.out.print("请输入被除数:");
                        x = scanner.nextInt();
                        System.out.print("请输入除数:");
                        y = scanner.nextInt();

                        System.out.println("结果为:"+divided(x,y));
                        break;
                    case 5:
                        flag = true;
                        break;

                    default :
                        System.out.println("输入不合法,请重新输入:");
                        break;
                }
            }else {
                System.out.println("输入不合法,请重新输入:");
            }
        }
        System.out.println("输入结束");
    }

    public static void menu(){
        System.out.println("请输入对应序号进行你的运算:");
        System.out.println("1. 加法\t2. 减法\t3. 乘法\t4. 除法\t5. 退出");
    }

}

  • 遇到的问题:
    1. 在switch里不知道如何跳出外面的循环,最后是用了一个boolean类型的flag来判断是否跳出
    2. 只能输入两个数,不能输入多个数
    3. 有些地方不够严谨,比如判断输入的方面

标签:Java,int,void,笔记,method,java,方法,public
From: https://www.cnblogs.com/tyrantblue/p/17172931.html

相关文章

  • 《大型分布式网站架构设计与实践》阅读笔记
    本书主要介绍了如何设计和构建大型分布式网站的架构,内容包括分布式系统的基础知识、分布式系统架构设计的原则和方法、分布式系统的核心技术和实践等方面。1.分布式系统基......
  • java转换
    16进制转十进制:inti= Integer.parseInt(str,16);Integer.parseInt(str.substring(2),16);带有0x标识的十六进制数,需要截去前面两位标识。十进制转二......
  • gpgpu-sim 源码学习笔记
    gpgpu-sim源码学习笔记sourcecode1.docuserguidemainpageisca2012tutorialmicro2012-tutorialfunction提供cycles精确的GPGPU仿真模型支持PTX功能模拟......
  • java - Random18
    猜数字案例packagecom.demo.test;importjava.util.Random;importjava.util.Scanner;publicclassrr{publicstaticvoidmain(String[]args){......
  • 对JAVA Doc的笔记以及之前学习的记录
      /**加enter能够在代码中快速生成图中的参数信息 要求:加在需要注释的代码上方  在所开发项目文件夹中打开cmd输入javadoc-encodingUTF-8-charsetUTF-8Doc.......
  • Java上传二进制(multipart/form-data)_Demo
    这里做个记录,通过此次问题的解决,弄清POST同时传文件及参数时,底层到底是怎么组成,文件流及参数是怎么分隔组成,及分隔符如何写入流。好,废话不多说,直接上代码,此代码配置好自己......
  • 《领域驱动设计精粹》读书笔记
    第一章DDD对我而言还可以指引构建正确软件模型的方向。领域驱动对团队人的要求较高:具备深厚的业务能力(领域专家)具备业务抽象能力;具备技术抽象能力DDD领域驱动设计可以实现......
  • Java应用【Ⅺ】在 Java 中使用MyBatis框架进行关系型数据库操作
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!相关阅读:​​Java应用【......
  • MySQL学习笔记-多表查询(下)
    多表查询(下)一.联合查询联合查询:将多次查询结果合并,形成新的查询结果集select{字段列表}from{表A}...union[all]select{字段列表}from{表B}...;unio......
  • 前端三件套--读书笔记(一)HTML
    前端三件套--读书笔记(一)HTML摘要:书名:《网页设计与编程》-------耿增民内容:HTML的基本标签一、HTML标签语法:注释标签:<!--注释标签-->标签的属性:<标签名......