1 必须在本类的另一个构造方法中使用
2 必须是第一条语句 否则编译报错
public class Student{
//定义一个私有的成员变量number 类型int 默认初始化为0
private int number;
//定义一个私有成员变量score 类型double 默认初始化为0.0
private double score;]
//无参数构造方法
public Student(){
this(1000,80.0);//使用this关键字调用带参数的构造方法
}
//带参数的构造方法
public Student(int number,double score){
this.number = number;
this.score = score;
}
}
在上述代码中 在无参构造方法中使用this(1000,80.0)调用有参构造方法,并且将number初始化为1000,score初始化为80.0
public class Student{
public static void main(String[] args){
Student s1 = new Student();//调用上面代码中的无参数构造方法
System.out.println("Student 1:Number-" + s1.getNumber()+",Score-" + s1.getScore());
Student s2 = new Student(12345,85.5);//调用带参数的构造方法
System.out.println("Student2:Number"+s2.getNumber()+",Score-"+s2.getScore());
}
}
输出结果将是:
Student 1: Number- 1000, Score- 80.0
Student 2: Number- 12345, Score- 85.5
this
关键字确实可以用来在一个构造方法中调用另一个构造方法,但要注意它是用来在同一个类的不同构造方法之间进行调用,而且这种用法通常是通过this()
形式出现的,例如在构造方法中使用this()
来调用本类的另一个构造方法。
在以下三种this关键字的使用方式中this均作为“当前对象”。当前对象"是指正在执行代码的实例或对象。在面向对象编程中,类定义了对象的属性和行为,而实例是类的一个具体实现。当在方法内部或构造方法内部编写代码时,使用关键字this可以引用当前对象,即正在调用该方法或成员变量的对象。
public Student(int myNumber, double myScore) {
number = myNumber;
score = myScore;
}
想要修改参数名与成员变量number 、score一致时会出现局部变量屏蔽成员变量的情况
public Student(int number , double score ) {
number = number ;//局部变量
score = score ;//局部变量
}
需要在构造方法内部使用this关键字调用被屏蔽的同名成员变量
public Student(int myNumber, double myScore) {
this.number = myNumber;
this.score = myScore;
}
当使用this关键字时,它将帮助区分成员变量和参数,确保正确地将参数值分配给成员变量。这是因为在方法或构造方法中,如果参数和成员变量具有相同的名称,JAVA将默认选择访问局部变量(参数)而不是成员变量。因此,通过使用this关键字,可以显式地指示使用成员变量而不是参数。
这样,当你使用带参数的构造方法创建Student对象时,构造方法中的number参数值将被赋值给成员变量number,而score参数值将被赋值给成员变量score。Setter方法也可以用类似的方式进行修改,增加代码的可读性
public void setNumber(intnumber){
this.number = number;
}
public void setScore(doublescore){
this.score = score;
}
}
添加了一个名为displayInfo()的成员方法,它用于显示学生对象的信息(学号和分数)。然后,使用this关键字在另一个成员方法updateInfo()中调用了displayInfo()方法。
updateInfo()方法接收一个学号和分数作为参数,并使用this关键字将参数赋值给当前对象的成员变量number和score。然后,通过使用this.displayInfo(),调用了当前对象的displayInfo()方法,显示更新后的学生信息。
public class Student{
private int number;
private double score;
//成员方法
public void displayInfo(){
System.out.println("Number:"+this.number);
System.out.println("Score:"+this.score);
}
//使用this关键字调用成员方法
public void updateInfo(int number,double score){
this.number = number;
this.score = score;
this.displayInfo();//使用this关键字调用当前对象的displayInfo方法
}
}
成员方法中,成员变量和成员方法的访问默认会隐藏this关键字。当在成员方法中引用一个成员变量或调用一个成员方法时,编译器会自动在内部插入this关键字,以指示当前实例,this关键字表示当前对象。
当在成员方法中调用其他方法时,有时需要将当前对象作为参数传递给这些方法。这样可以使其他方法能够访问当前对象的属性和方法。
将使用this关键字作为实参访问当前实例的引用,以展示如何在一个成员方法内部将当前对象作为参数传递给其他方法。
public class Student{
private int number;
private double score;
//无参数构造方法
public Student(){
this(1000,80.0);//使用this关键字调用带参数的构造方法
}
//带参数的构造方法
public Student(int number,double score){
this.number = number;
this.score = score;
}
//成员方法,将当前对象作为参数传递给其他方法
public void displayInfo(){
calculateGrade(this);//将当前对象作为参数传递给calculateGrade方法
}
//接收Student对象作为参数,计算成绩等级并输出
private void calculateGrade(Student student){
if(student.score>=90){
System.out.println("Grade:A");
}else if(student.score >= 80){
System.out.println("Grade:B");
}else if(student.score >= 70){
System.out.println("Grade:C");
}else if(student.score >= 60){
System.out.println("Grade:D");
}else{
System.out.println("Grade:F");
}
}
}
在上述代码中,添加了一个新的成员方法displayInfo(),它将当前对象作为参数传递给另一个方法calculateGrade()。calculateGrade()方法接收一个Student对象作为参数,并根据学生的分数计算和输出成绩等级。
public class Main{
public static void main(String[]args){
Student student=new Student();
student.displayInfo();
}
}
在上述示例中,创建了一个Student对象,并调用了displayInfo()方法。displayInfo()方法内部将当前对象作为参数传递给calculateGrade()方法
输出结果将是:
Grade:B
通过将当前对象作为实参传递给其他方法,可以在方法之间共享对象的引用,并在其他方法中对其进行操作。这样可以实现更复杂的逻辑和功能,使对象的方法能够相互协作和交互
方法重载( overload ):对于类的方法,如果有两个方法的方法名相同,但参数不同,一个方法被称为另一个方法的重载方法。
1 同一个类
2 方法名相同
3 方法的参数类型 个数 顺序 至少有一个不同(参数列表不同)
1 方法的返回类型可以不同
2 方法的修饰符可以不同
3 同一个类中不允许出现两个名称 参数完全相同的方法
示例如下
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
在上面的例子中,Calculator类中定义了三个add方法进行重载。第一个add方法接受两个整数作为参数并返回它们的和;第二个add方法接受两个double类型的参数并返回它们的和;第三个add方法接受三个整数参数并返回它们的和。在main方法中,创建了Calculator 对象并分别调用了这三个不同版本的add方法。
利用参数区分调用的是哪个重载方法
方法的实参与形参类型相同或兼容、个数相同、顺序一致示例代码
Calculator calculator=new Calculator();
int sum1=calculator.add(1,2);
double sum2=calculator.add(1.5,2.5);
int sum3=calculator.add(1,2,3);
System.out.println("Sum1:"+sum1);
System.out.println("Sum2:"+sum2);
System.out.println("Sum3:"+sum3);
重载方法允许根据不同的参数类型和数量来选择合适的方法进行调用,提供了更灵活和方便的方法重用方式。
与不同方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法。如前面构造方法中案例就是构造方法的重载形式。
public class Student{
private int number;
private double score;
//无参数构造方法
public Student(){
//可以在构造方法中进行一些初始化操作
number=0;
score=0.0;
}
//带参数的构造方法
public Student(int myNumber,double myScore){
number = myNumber;
score = myScore;
}
}