方法传参
一、基本&引用数据类型
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.先写Student
和ChangeScore
类
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();(调用 方法)
}
}
错误:构造函数类没有返回值类