什么是构造器,this关键字是什么

1.什么是构造器

一个在创建对象时被自动调用的特殊方法。

目的:用构造器确保初始化。在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java 就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。

Person p1 = new Person();

其中Person()就是调用类的构造器的意思。

2.构造器的使用

(1)语法格式:
修饰符 类名 (参数列表) {
初始化语句;
}

(2)注意事项

  • 1.构造器的修饰符可以是默认的
  • 2.构造器没有返回值
  • 3.方法名和类的名字必须一样
  • 4.参数列表和成员方法一样的规则
  • 5.构造器的调用,由系统来完成的
  • 6.Java语言中,每个类都至少有一个构造器
  • 7.默认构造器的修饰符与所属类的修饰符一致
  • 8.一旦显式定义了构造器,则系统不再提供默认构造器
  • 9.一个类可以创建多个重载的构造器
  • 10.父类的构造器不可被子类继承
  • 11.不能写void
class Person {
    
    
    String name;  //null
    int age;            //0

    //构造器
    public Person(String name, int age) {
    
    
        System.out.println("构造器被调用~~完成对象的初始化");
        this.name = name;
        this.age = age;
    }

    public Person(String pName){
    
    
        System.out.println("只有名字的构造器被调用");
        name=pName;
    }
    public Person() {
    
    
        //这个就是无参构造器
        age = 18;
    }
}

3.this关键字

(1)作用
(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

Public Class Student {
    
     
 String name; //定义一个成员变量name
 private void SetName(String name) {
    
     //定义一个参数(局部变量)name
  this.name=name; //将局部变量的值传递给成员变量
 }
}

(2)this关键字注意事项

  • 1.this关键字可以访问本类中的属性,方法,构造器

  • 2.this用于区分当前类的属性和局部变量

  • 3.访问this成员的方法:this.方法名(参数列表)

  • 4.访问构造器的语法:this(参数列表);

    注意只能在构造器中使用,只能在构造器中访问另外一个构造器,必须放在第一条语句中

  • 5.this关键字只能在方法内使用,方法外使用是编译不通过的!!!

public static void main(String[] args) {
    
    
	Dog dog1 = new Dog("大壮", 3); 
	System.out.println("dog1 的 hashcode=" + dog1.hashCode());
 	//dog1 调用了 info()方法 dog1.info(); 
 	System.out.println("============"); 
	Dog dog2 = new Dog("大黄", 2); 
	System.out.println("dog2 的 hashcode=" + dog2.hashCode()); 
	dog2.info(); 
} 

class Dog{
    
    
    String name;
    int age;

    //public Dog(String dName,int dAge){//构造器
    //    name = dName;
    //    age = dAge;
    //}
    //如果我们构造器的形参,能够直接写成属性名,就更好了
    //但是出现了一个问题,根据变量的作用域原则 
    //构造器的 name 是局部变量,而不是属性 
    //构造器的 age 是局部变量,而不是属性 
    //==> 引出 this 关键字来解决
    public Dog(String name, int age) {
    
    //构造器
        //this.name 就是当前对象的属性 name 
        this.name = name; 
        //this.age 就是当前对象的属性 age 
        this.age = age; 
        System.out.println("this.hashCode=" + this.hashCode()); 
    }
    public void info() {
    
    //成员方法,输出属性 x 信息 
        System.out.println("this.hashCode=" + this.hashCode()); 
        System.out.println(name + "\t" + age + "\t");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_52682014/article/details/127560874