java-10方法带参

声明

Statement

文章用于本人个人学习记录,目前大一正处于学习之阶段,文章内容如引起不适请见谅。
img

本章核心内容

  • 方法代参
  • 方法参数传递
  • 方法重载
  • 面向对象和对象过程的区别

方法代参

1.构造方法带参

减少创建多个对象,减少代码的冗余

public class 类名{
    //成员变量
    private int id;
    private int age;
    private String name;
    
    //如果只定义了带参数的构造方法,会导致不会生成默认的无参构造方法
    //导致不能使用 类名 对象名 = new 类名();  定义需要代对应参数
    public 类名(){
        
    }
    
    public 类名(int id,int age,String name){
        this.id=id;
        this.age=age;
        this.name=name;
    }
}

创建对象时,输入的参数列表要与构造参数的参数类别一一对应

如:类名 object = new 类名(101,18,简-Jane);

2.方法带参

语法

访问修饰符 返回值类型 方法名(数据类型1 变量名1,数据类型2 变量名2,……){
    [return 返回值;]
}
//带参方法调用
对象名.方法名(参数类表);

return关键字的作用:给出方法的执行结果,结束代码

*如果一个带参的方法返回类型不为void,要给每一个分支情况给与一个返回值*

public int calculate(){
    switch(operator){
        case "+":
            return n1+n2;
        case "-":
            return n1-n2;
        case "*":
            return n1*n2;
        case "/":
            return n1/n2;
            
        //没有default 如operator有其他case,方法无返回值,会报错
        default: 
            return 0;
    }
}

3.对象数组

public class Student{
    private int id;
    private int age;
    private String name;
    
    public Student(){}
    
    public Student(int id,int age,String name){
        this.id=id;
        this.age=age;
        this.name=name;
    }
}
public studentTest(){
    public static void main(String[] args) {
        Student[] students = new Student[2];
        students[0] = new Student(01,18,"张三");
        students[1] = new Student(02,18,"李四");
    }
}

img

4.引用数据类型作为方法的参数

对象可以作为方法的参数被对象调用,当对象没有传入参数时为空,表示为null。

主要出现在一类对象对其他一类对象进行操作

如:老师要录入学生的成绩,要调用student中的参数

Teacher t1 =new Teacher();
//
……获取学生学号,年龄,姓名,用id,age,name保存数据
//
t.addStu(new Stu(id,age,name))
public Teacher(){
    ……
    public Stu[] stus={};
    public addStu(Stu stu){
        stus=Arrays.copyof(stus,stus.length+1);//让stus扩容
        stus[stus.length-1]=stu;//添加学生到末尾
    }
}

5.方法参数传递规则

方法内部改变输入参数,不会改变基本数据类型参数,如:int,double……

改变引用数据类型参数,会改变原先数据,如:String,object

个人认为

前者本质上传入的是数据的拷贝,所以形式上只是一个副本,副本改变原先值不改变

后者传入一个对应的地址,会将地址进行传递,方法通过地址就能改变传入的数据


方法重载

1.概念

在同一个类中,方法名相同,参数列表不同的多个方法构成方法重载

2.示例

public class calculate{
    public int sum(int a,int b){
        return a+b;
    }
    public int sum(int a,int b,int c){
        return a+b+c;
    }    
}
public class calculate{
    public int sum(int a,int b){
        return a+b;
    }
    public double sum(double a,double b){
        return a+b;
    }    
}

3.误区

  • 1.参数类表相同,返回值不同,会报错
public class calculate{
    public int sum(int a,int b){
        return a+b;
    }
    public double sum(int a,int b){
        return a+b;
    }    
}
  • 2.换汤不换药,方法重复
public class calculate{
    public int sum(int a,int b){
        return a+b;
    }
    public int sum(int c,int d){
        return c+d;
    }    
}

4.构造方法也可以重载

通过this可以调用其他构造函数

如下文的:this(1,18,100.0);

*this()调用构造方法必须是这个构造方法的第一句语句*


public class Stu{
    int id;
    int age;
    double score;
    
    public Stu(){
//        this.id=1;
//        this.age=18;
//        this.score=100.0;
        this(1,18,100.0);
    }
    public Stu(int id,int age,double score){
        this.id=id;
        this.age=age;
        this.score=score;
    }
}

面向过程和面向对象的区别

*Procedure Oriented Programming (POP)*

*vs*

*Object Oriented Programming (OOP)*

示例

POP
import java.util.Scanner;
/**
 * Procedure Oriented Programming 面向过程编程
 */
public class POP {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("1.学生成绩管理");
            System.out.println("2.学生选课管理");
            System.out.println("3.退出系统");
            System.out.println("请选择菜单编号:");
            int number = sc.nextInt();
            if(number == 1){
                outer:
                while (true){
                    System.out.println("1.增加成绩");
                    System.out.println("2.修改成绩");
                    System.out.println("3.删除成绩");
                    System.out.println("4.查询成绩");
                    System.out.println("5.返回主菜单");
                    System.out.println("请选择菜单编号:");
                    int order= sc.nextInt();
                    switch (order){
                        case 1:
                            System.out.println("你选择了增加成绩");
                            break;
                        case 2:
                            System.out.println("你选择了修改成绩");
                            break;
                        case 3:
                            System.out.println("你选择了删除成绩");
                            break;
                        case 4:
                            System.out.println("你选择了查询成绩");
                            break;
                        case 5:
                            break outer;
                    }
                }
            } else if(number == 2){
                System.out.println("你选择了学生选课管理");
            } else {
                System.out.println("感谢使用XXX系统");
                break;
            }
        }
    }
}
OOP

分析:

  1. 该过程涉及的对象有两类,菜单和用户
  2. 用户有执行增删改查的行为
public class Menu {
    public int order; //编号
    public String name; //名称
    public Menu(int order, String name){
        this.order = order;
        this.name = name;
    }
    public void show(){
        System.out.println(order + "." + name);
    }
}
public class User {
    public void addScore(){
        System.out.println("你选择了增加成绩");
    }
    public void deleteScore(){
        System.out.println("你选择了删除成绩");
    }
    public void updateScore(){
        System.out.println("你选择了修改成绩");
    }
    public void searchScore(){
        System.out.println("你选择了查询成绩");
    }
}
import java.util.Scanner;
/**
 * Object Oriented Programming 面向对象编程
 */
public class OOP {
    public static Menu[] mainMenus = {
            new Menu(1, "学生成绩管理"),
            new Menu(2, "学生选课管理"),
            new Menu(3, "退出系统")
    };
    public static Menu[] secondMenus = {
            new Menu(1, "增加成绩"),
            new Menu(2, "修改成绩"),
            new Menu(3, "删除成绩"),
            new Menu(4, "查询成绩"),
            new Menu(5, "返回主菜单")
    };
    public static Scanner sc = new Scanner(System.in);
    public static User user = new User();
    public static void main(String[] args) {
        gotoMain();
    }
    //去主菜单
    public static void gotoMain(){
        showMenus(mainMenus);//显示主菜单
        int number = sc.nextInt();
        if(number == 1){
            gotoSecond();
        } else if(number == 2){
            System.out.println("你选择了学生选课管理");
            gotoMain(); //去主菜单
        } else {
            System.out.println("感谢使用XXX系统");
        }
    }
    //去二级菜单
    public static void gotoSecond(){
        showMenus(secondMenus);//显示二级菜单
        int order = sc.nextInt();
        switch (order){
            case 1:
                user.addScore();//用户增加成绩
                gotoSecond();
                break;
            case 2:
                user.updateScore();//用户修改成绩
                gotoSecond();
                break;
            case 3:user.deleteScore();//用户删除成绩
                gotoSecond();
                break;
            case 4:
                user.searchScore();//用户查询成绩
                gotoSecond();
                break;
            case 5:
                gotoMain();
                break;
        }
    }
    public static void showMenus(Menu[] menus){
        for(int i=0; i<menus.length; i++){
            menus[i].show();
        }
        System.out.println("请选择菜单编号:");
    }
}

对比

面向过程侧重在过程中的实现上,面向对象侧重在对象上,需要利用对象的行为组装完成过程的组装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值