Java基础学习:8、构造器(构造方法)和this

一、构造器:

1、定义:构造器是类的特殊方法,它的主要作用是完成对象的初始化。

           即在创建对象时初始化对象。

      本质是方法。

2、特点:

  a、方法名和类名一致。

  b、无返回值。

  c、构造器的调用由系统完成。

  d、构造器修饰符可以默认也可以指定。

3、基本语法:

public class Overload {
  public static void main(String[] args) {
    Person person = new Person("张三", 20);
    System.out.println(person.name);
    System.out.println(person.age);
  }
}

class Person {
  String name;
  int age;
  /*
  1、构造器无返回值,也不能写void。
  2、构造器名称和类名一样。
  3、(String pName, int pAge)形参列表。
  * */
  public Person(String pName, int pAge) {
    name = pName;
    age = pAge;
  }
}

  

4、注意事项:

  a、一个类可以定义多个不同构造器,即构造器重载。构造器本质是方法,可以进行重载。

public class Overload {
  public static void main(String[] args) {
    Person person = new Person("张三", 20);
    Person person2= new Person("张三");

  }
}

class Person {
  String name;
  int age;
  public Person(String pName, int pAge) {
    name = pName;
    age = pAge;
  }
  public Person(String pName) {
    name = pName;
  }
}

  b、构造器是完成对象的初始化,而不是创建对象。

  c、如果没有定义构造器,系统默认生成一个无参构造器。

public class Overload {
  public static void main(String[] args) {
    Person person = new Person();
  }
}

class Person {
  String name;
  int age;
}

  

  d、一旦定义了构造器,默认构造器就被覆盖了,就不能再使用了,除非自己显示的定义一下。

  如何显示定义:

  修饰符 类名() {};

 

对象创建流程内存图:

具体实现步骤:

1、加载person类信息(Person.class),只会加载一次。

2、在堆中分配空间(地址)。

3、完成对象的初始化:

  a、默认初始化:age=0 name=null

  b、显示初始化:age = 90 name = null

  c、构造器初始化:age=20 name=小倩

4、把对象在堆中的地址返回给栈中的 p (p是对象名,也可以理解为对象的应用)。真正的对象实在堆中new出来的那个。

 

二、this:

1、定义:

      每一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this,

      this代表的就是当前对象。

简单的说:哪个对象调用,this就代表哪个对象。

 

2、注意细节:

  a、this关键字可以用来访问本类的属性、方法、构造器。

  b、this用于区分当前类的属性和局部变量。

  c、在本类方法中访问另外方法:this.方法名(参数列表)。this写在第一行。

 

class Person {
  public int sum(int n1, int n2) {
    this.cla(12,22);
    return n1 + n2;
  }

  public int cla(int a1, int a2) {
    this.sum(12, 22);
    return a1 - a2;
  }
}

 

  

 

  d、在构造器中访问另一个构造器:this(参数列表)。this要放在第一条语句,只能在构造器中访问另一个构造器。

 

class Person {
  String name;
  int age;
  public Person(String pName, int pAge) {
    this("jack");
    name = pName;
    age = pAge;
  }
  public Person(String pName) {
    name = pName;
  }
}

 

  e、this不能在类定义的外部使用,只能在类定义的方法中使用。

   f、this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关          联,而不和类关联,同一个类的不同对象有不同的this。

 

 

 

 

 

posted @ 2021-07-22 18:46  Y字仇杀队  阅读(109)  评论(0编辑  收藏  举报