方法与方法重载

本文深入讲解Java中的方法定义与调用、对象数组使用、参数传递机制、构造方法、this关键字及方法重载等内容,并对比成员变量与局部变量的区别。

带参数的方法

1、定义带参数的方法
访问修饰符 返回类型 方法名(形式参数列表){
//方法的主体
}
2、调用带参数的方法
对象名.方法名(参数1,参数2…参数n)

public void zha(String fruit){
    System.out.println(fruit+"汁");
    }
public void zha(String fruit,int cup){
    System.out.println(cup+"杯"+fruit+"汁");
    }
public static void main(String[] args) {
     Machine m =new Machine();
     m.zha("苹果");
     m.zha("苹果",2);
    }

运行
在这里插入图片描述

综合案例

添加学生姓名,指定区间查找

public class Students {
    public String[] names=new String[5];//属性名 names  类型是String[]
    public void addName(String name){
        int flag=0;//标志位来判断数组空间已满
        for (int i = 0; i < names.length; i++) {
            if (null==names[i]){
                names[i]=name;
                System.out.println(name+"成功进班,学号是:"+(i+1));
                flag++;
                break;
            }
        }
        if (flag==0) {
            System.out.println("当前班级已满,请下次预定");
        }
    }
    public void show(){
        System.out.print("[");
        for (int i = 0; i < names.length; i++) {
            if (null==names[i]){
                System.out.print("]");
                break;
            }else if (i==names.length-1){
                System.out.println(names[i]+"]");
                break;
            }
            System.out.print(names[i]+",");
        }
    }
    public  int search(String name,int start,int end){
        if (name==null) {
            return -names.length;
        }
        int num=-1;//start end 是数组的下标
        if (start<0 ||end>=names.length||start>end){
            return -1;
        }
        for (int i = start; i <=end; i++) {
            if (name.equals(names[i])){
                num=i;
            }
        }
        return num;
    }
}
public class TestStudents {
    public static void main(String[] args) {
        Students ss= new Students();
        ss.addName("赵琪");
        ss.addName("王哲");
        ss.addName("黄哲");
        ss.addName("陈星杰");
        ss.addName("zzz");
        ss.addName("sss");
        ss.show();
        String a="dddd";
        int  rst=ss.search(a,1,4);
        System.out.println(rst==-1?"未找到该学员"+a:rst==-1*ss.names.length?"输入不能为空":"在下标"+rst+"处找到"+a);
    }
}

对象数组

public class Student {
    public String name;
    public int num;
    public int age;
    public  String  gender="男";
    public int score;
    public void show(){
        System.out.println("我叫"+name+",学号是:"+num+",今年"+age+"岁,我是"+gender);
    }
}

public class TestStu {
    Student[] stus = new Student[5];//创建对象数组
    public void addStudent(Student a){
        int flag=0;
        for (int i = 0; i < stus.length; i++) {
            if (null==stus[i]){
                stus[i]=a;
                flag++;
                break;
            }
        }
        if (flag==0){
            System.out.println("满了");
        }
    }
    public void print(){
        for (Student s : stus) {
            if (s==null){
                break;
            }
            s.show();
        }
    }

    public static void main(String[] args) {
        TestStu tStu = new TestStu();
        Student stu = new Student();
        tStu.addStudent(stu);
        stu.name="zzz";
        stu.age=15;
        stu.num=1;
        tStu.print();
    }
}

参数传递

     public class Test {
         public void calc1(int num){
                  num=num+1;
          }
          public void calc2(Student student){
                  student.age=student.age+1;
          }
}
//测试类
Test test=new Test();
int n=8;
test.calc1(n);
Student stu=new Student();
stu.age=18;
test.calc2(stu);
System.out.println(n+"---"+stu.age);

输出结果是8–19
如果是基本数据类型,传递的是值;
如果是引用数据类型,传递的是地址

public class Demo1 {
    /**
     * 要对学员数组进行分数求和,求平均值,判断平均值
     * 小于60,对象中每个元素的分数都+2
     * @param stus 对象数组,数组中的每一个元素是该类型的对象
     *              正常需要判空
     */
    public void addScores(Student[] stus){
        //判断数组是否为空
        if (null==stus) {
            System.out.println("数组为空,没有成绩");
            return;//break是跳出循环、switch
        }
        int sum=0;
        int cnt=0;
        for (int i = 0; i < stus.length; i++) {
            //找出每个对象 找出对象的成绩 求和
            if (null==stus[i]){
                continue;
            }else {
                sum+=stus[i].score;
                cnt++;
            }
        }
        double avg=sum/(double)cnt;
        if (avg<60){
            for (int i = 0; i < stus.length; i++) {
                if (null==stus[i]) {
                    continue;
                }else{
                    stus[i].score+=2;
                }
            }
        }


    }

    public static void main(String[] args) {
        Demo1 d= new Demo1();
        Student[] s=new Student[5];
        for (int i = 0; i < s.length; i++) {
            s[i]=new Student();
            s[i].score=(int)(Math.random()*60);
        }
        for (Student i : s) {
            System.out.print(i.score+",");
        }
        System.out.println();
        d.addScores(s);
        for (Student i : s) {
            System.out.print(i.score+",");
        }
    }
}

构造方法-对象初始化

1、系统默认提供无参构造方法

 String username;
 public User(){
     System.out.println("这是无参构造方法");
    };
User u =new User();

2、当类中定义了构造方法,原先的默认构造方法不再提供

public class User {
    String username;
//    public User(){
//        System.out.println("这是无参构造方法");
//    };
    public User(String name){
        username=name;
    }
    //只要在类中定义了构造方法,原先系统默认的无参构造方法不再提供
    public static void main(String[] args) {
        User u =new User();
        User user = new User("张");
        System.out.println(user.username);

    }
}

User u =new User(); 提示:报错
3、构造方法的结构:
无返回值类型
方法名和类名相同
可以指定参数
public 类名(){
代码
}

this关键字

public Batman(int attack, int defence, int health, String name) {
        this.attack = attack;
        this.defence = defence;
        this.health = health;
        this.name = name;
    }

带参构造方法this关键字是对一个对象的默认引用这里用以区分同名成员变量
1、调用属性
this.health=“11”;
2、调用方法
this.print();
3、调用构造方法
this();
this(111,222,333,“ss”);如果使用,必须是构造方法中的第一条语句

方法重载

同一个类中
方法名相同
参数列表不同(参数个数、类型、顺序)
与返回值、访问修饰符无关

public int cal(int a,int b){
        return a+b;
    }
public double cal(double a,double b,double c){
        return a+b+c;
    }

成员变量和局部变量

变量声明的位置决定变量作用域
变量作用域确定可在程序中按变量名访问该变量的区域
作用域不同:
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
初始值不同:
Java会给成员变量一个初始值
Java不会给局部变量赋予初始值
在同一个方法中,不允许有同名局部变量
在不同的方法中,可以有同名局部变量
在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

本研究基于扩展卡尔曼滤波(EKF)方法,构建了一套用于航天器姿态轨道协同控制的仿真系统。该系统采用参数化编程设计,具备清晰的逻辑结构和详细的代码注释,便于用户根据具体需求调整参数。所提供的案例数据可直接在MATLAB环境中运行,无需额外预处理步骤,适用于计算机科学、电子信息工程及数学等相关专业学生的课程设计、综合实践或毕业课题。 在航天工程实践中,精确的姿态轨道控制是保障深空探测、卫星组网及空间设施建设等任务成功实施的基础。扩展卡尔曼滤波作为一种适用于非线性动态系统的状态估计算法,能够有效处理系统模型中的不确定性测量噪声,因此在航天器耦合控制领域具有重要应用价值。本研究实现的系统通过模块化设计,支持用户针对不同航天器平台或任务场景进行灵活配置,例如卫星轨道维持、飞行器交会对接或地外天体定点着陆等控制问题。 为提升系统的易用性教学适用性,代码中关键算法步骤均附有说明性注释,有助于用户理解滤波器的初始化、状态预测、观测更新等核心流程。同时,系统兼容多个MATLAB版本(包括2014a、2019b及2024b),可适应不同的软件环境。通过实际操作该仿真系统,学生不仅能够深化对航天动力学控制理论的认识,还可培养工程编程能力实际问题分析技能,为后续从事相关技术研究或工程开发奠定基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### Java方法方法重载笔记 #### 方法重载的定义 在Java程序里,同一个类下,方法名相同,参数列表不同(参数类型、位置(形参顺序)、个数不同都视为不同),返回值和修饰符无关的两个或多个方法,称为方法间的互为重载。本质上,重载方法是完全不同的方法,只是名称相同而已 [^1]。 #### 不构成重载的情况 若两个方法不在同一个类中,则不构成重载。例如以下代码,`sum` 方法分别在 `Text1` 和 `Text2` 类中,不构成重载 [^2]。 ```java public class Text1 { public static void sum(int a, int b) { } } public class Text2 { public static void sum(int a, int b, int c) { } } ``` #### 方法重载示例 以下示例在 `Methods` 类中定义了三个重载方法 `M`,分别接收一个 `int` 参数、两个 `int` 参数、一个字符串参数。在主类的 `main` 方法中根据参数区别调用这三个方法 [^3]。 ```java public class OverLoadExercise { public static void main(String[] args) { Methodes me = new Methodes(); me.M(10); // 调用计算平方的方法 me.M(20, 15); // 调用计算两数相乘的方法 me.M("Hello"); // 调用打印字符串的方法 } } class Methodes { // 平方运算 public int M(int n1) { System.out.println("平方=" + (n1 * n1)); } // 相乘 public int M(int n1, int n2) { System.out.println("相乘=" + (n1 * n2)); } // 输出字符串信息 public String M(String a) { System.out.println("字符串=" + a); } } ``` #### 基于参数顺序的方法重载 `disp()` 方法可根据参数的数据类型顺序进行重载,只要两种方法在参数列表中有不同的数据类型顺序即可。例如,第一种方法的参数列表为 `(char,int)`,第二种方法的参数为 `(int,char)`,由于顺序不同,该方法可以重载且不会出现问题 [^5]。 #### 重载重写的区别 重载是同一个类内部的多个成员方法互为重载方法,重写是子类的成员方法重写了父类的成员方法重载一般是为了创建一组要完成相似任务的成员方法,重写的目的是为了实现多态,实现多态有3个条件:继承、重写、向上转型,缺一不可 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值