方法传参&构造方法

方法传参

一、基本&引用数据类型

public class Demo {
    public static void main(string[] args) {
//测试类
        Test test = new Test();
        int n = 8;
        test.calc1(n);//参数类型为基本数据类型,int char double boolean float
        Student stu = new Student;
        stu.age = 18;
        test.calc2(stu);//参数类型为引用数据类型,自定义数据类型数组―接口		
        System.out.print1n(n+"---"+stu.age);
    }
}	


//calc2方法
public void calc2(Student student) {//在这里传入的是Student类
    student.age = student.age + 1;//改变的是Student类中的age,在上边stu.age=18赋值
}

解释:test.calc1(n)中n传递的是n=8中8的数值,传递到方法中仅仅只是改变了方法中8的数值(值传递)

test.calc2(stu)中的stu传递的是原本的Student类

基本数据类型,操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。(值传递)

引用数据类型(类、数组和接口),赋值是把原对象的引用(可理解为内存地址)传递给另一个引用(引用传递:传递的是数据的地址,改变的是原数值)

二、对象数组

案例:

使用学员对象数组作为参数,实现学员成绩修改
如果学员成绩小于60,将其成绩提高2分

分析:通过类创建多个对象,再将多个对象放进对象数组中,然后通过对对象数组中的各个对象的某个属性进行操作

1.先写StudentChangeScore

public class Student {
    String name;
    int age;
    int score;


    public void ScoreShowInfo(){
        System.out.println(name+"的成绩是"+score);
    }
}
public class ChangeScore {

    //修改成绩
    public void changeScore(Student[] stu) {//传入的是对象数组
        for (int i = 0; i < stu.length; i++) {
            if (stu[i].score < 60) {//stu[i].Score为Student对象数组中的第i个对象的score属性
                stu[i].score += 2;
            }
        }
    }

    public void showStuInfo(Student[] stu) {
        for (Student student : stu) {
            student.ScoreShowInfo();
        }
    }
}

2.在TestStu类中进行初始化

public class TestStu {
    public static void main(String[] args) {
        ChangeScore changeScore = new ChangeScore();//声明对象,通过对象调用方法
        //初始化多个学生对象
        Student stu1 = new Student();
        stu1.name = "张三";
        stu1.score = 34;
        Student stu2 = new Student();
        stu2.name = "张三";
        stu2.score = 34;
        Student stu3 = new Student();
        stu3.name = "张三";
        stu3.score = 34;
        //创建学生对象数组,将初始化好的学生对象压入对象数组
        Student[] stus = new Student[3];
        stus[0]=stu1;//将学生对象赋值给对象数组
        stus[1]=stu2;
        stus[2]=stu3;
        changeScore.showStuInfo(stus);//将对象数组传入方法中(这里的传入是引用传递,可以直接改变原始数值)
        changeScore.changeScore(stus);
        changeScore.showStuInfo(stus);

    }
}

构造方法

一.构造方法

Student s1 = new Student();

其中Student()是一种构造方法,方法名和类名相同,这个是一种无参构造方法

访问修饰符    构造方法名(){
    //初始化代码
}

构造方法的作用

1.对象初始化

2.每个类有默认的无参构造方法

3.可以自定义构造方法,但默认无参构造方法,系统不再提供,需显示声明

this关键字

1.对当前对象的引用

2.对方法的调用

3.对构造函数的调用

public class Student {
    String name;
    int age;
    int score;

    //系统默认提供一个无参构造方法
    public Student() {
        //如果使用了带参构造方法,系统将不再默认无参构造方法,需要程序员自己显示声明一个无参构造方法
    }

    //带参构造方法     this关键字指代当前对象(调用 属性)
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    //通过this调用构造方法(调用 构造方法)
    public Student(String name, int score, int age) {
        //调用构造方法Student(String name, int score)减少代码冗余
        //并且this(name,score);只能放在第一行
        this(name, score);
        this.age = age;
    }

    public void ScoreShowInfo() {
        System.out.println(name + "的成绩是" + score);
    }

    public void test1() {
        ScoreShowInfo();
        //等同于this.ScoreShowInfo();(调用 方法)
    }
}

在这里插入图片描述

错误:构造函数类没有返回值类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值