构造器|构造函数|构造方法(this关键字)

构造器|构造函数|构造方法

  • new做3件事情:
  •  1.堆中开辟空间,成员属性跟随对象进入堆内存并附默认值
    
  •  2.调用构造器为对象初始化信息
    
  •  3.将地址返回给引用
    
  • 构造器:
  •  特殊的方法,作用就是用来为对象初始化对象信息,不是用来创建对象
    
  • 定义:
  •  修饰符  类名([参数列表]){
    
  •  	....
    
  •  }
    
  •  构造器没有返回值,不需要void,可以写return但是不必要
    
  • 使用:
  •  只能跟随new一起使用,没有办法调用
    
  •  构造器不能和static,fianl,abstract一起使用
    
  • 如果没有自定义构造器,编译器会自动为你添加一个空构造
  • 如果存在自定义构造器,编译器都不会再为你提供任何构造器
  • 构造器也是方法,可以构造器的重载,根据创建对象后面的()–>构造器的参数列表
  • 以后定义自定义模板类,最好至少提供一个构造
  • 举例:
  • package com.shsxt.constructor02;

import java.util.Scanner;

  • public class ConstructorDemo {
    public static void main(String[] args) {
    Dog dog=new Dog(“张二狗”,“柴犬”,“土黄色”); //()匹配构造器的参数列表
    dog.Dog();
    // dog.color=“白色”;
    // dog.type=“萨摩耶”;
    // dog.name=“二狗子”;
    dog.Dog();

// Dog dog2=new Dog();
//ctrl+1 提示
Scanner sc=new Scanner(System.in);
}

}

class Dog{
String name;
String type;
String color;

/*public Dog(){
	System.out.println("没有参数的构造器---空构造");
}
public Dog(String dogName){
	name=dogName;
}*/

public Dog(String dogName,String dogType,String dogColor){
	name=dogName;
	type=dogType;
	color=dogColor;
}

public void Dog(){
	System.out.println(name+"-->"+color+"-->"+type);
}

}

========================================================================================
this关键字

  • this指代当前对象(new的对象),代表对象的地址
  • 调用本类中的其他构造器
  •  this([参数列表]); 
    
  •  要求再构造器的首行使用this调用其他构造器
    
  •  两个构造器不能相互调用,会造成死循环
    
  • 区分同名变量问题
  •  区分成员变量和局部变量之间同名的问题
    
  •  构造器中区分成员变量和参数之间同名问题.默认就近原则,如果调用成员,this.属性名,因为this中存放的是当前调用构造器的对象的地址
    
  •  this再成员方法中指代当前调用成员方法的对象
    
  •  如果不存同名变量问题,在使用成员变量的时候默认前面省略了this,this可以省略
    
  • 举例:
  • public class ThisDemo {
    public static void main(String[] args) {
    Person p=new Person(“张三”,18,181);
    System.out.println§;
    p.info(333);
    }
    }

class Person{
String name;
int age;
int height;

public Person() {
	System.out.println("我是空构造");
}

public Person(String personName) {
	name=personName;
	System.out.println("我是带参构造器 name");
}
public Person(String name,int age) {
	this();
	this.name=name;
	this.age=age;
	System.out.println("我是带参构造器 name  age");
}
public Person(String name,int age,int height) {

// name=personName;
// age=personAge;
this(name,age); //调用奔雷其他构造器,至其他构造器的代码
this.height=height;
System.out.println(“我是带参构造器 name age height”);
System.out.println(this);
}
public void info(int age){
System.out.println(this.name+"–>"+this.age+"–>"+height);
System.out.println(this);
this.haha();
}

public void haha(){
	System.out.println(name+"hhhhhhhhhhh");
}

}

猜你喜欢

转载自blog.csdn.net/PussyCatsss/article/details/90722085