Java:构造方法,this

1.构造方法

在一个类中定义的方法如果满足以下三个条件,该方法称为构造方法,具体如下:

  1. 方法名与类名同名
  2. 在方法名的前面没有返回值类型声明
  3. 在方法中不能使用return语句返回

无参的构造方法

class Student{
	public Student() {
		System.out.println("无参的构造方法被调用");
	}
}
public class text3 {

	public static void main(String[] args) {
		Student s = new Student();

	}

}

程序运行结果

从代码可以看出,“new Student()”除了实例化对象,还调用了构造方法Student();


有参的构造方法

class Person{
	int age;
	public Person(int a) {
		age=a;
	}
	public void speak() {
		System.out.println("小明的年龄是"+age+"岁");
	}
}
public class Text1 {
	public static void main(String[] args) {
		Person p2 = new Person(20);
		p2.speak();
		
	}
}

程序运行的结果


从代码可以看到“Person(int a)”这是一个有参的构造方法,在“new Person(20)”实例化对象的同时把参数传给a赋值给age并调用了speak()这个构造方法。


构造方法的重载

构造方法也可以重载,在一个中只要构造方法的参数类型或参数个数不同即可。用不同的构造方法可以给不同的属性赋值。

class People{
	String name;
	int age;
	public People(String con_name,int con_age) {
		name = con_name;
		age = con_age;
	}
	public People(String con_name) {
		name = con_name;
	}
	public void speak() {
		System.out.println("我叫"+name+"今年"+age+"岁");
	}
}

public class text2 {

	public static void main(String[] args) {
		People p1 = new People("李白");
		People p2 = new People("李青",19);
		p1.speak();
		p2.speak();
	}

}

根据代码看出People类中定义了两个构造方法,它们构成了重载。在创建p1和p2时根据不同的参数,分别调用了不同的构造方法。根据结果看出这两个构造方法针对不同参数赋值。其中一个仅为name赋值而age属性默认为0.

易错


该代码Person构造方法是有参的构造方法,实例化中没有参数,导致系统找不到无参的构造方法,并且系统不在自动生成无参的构造方法。


因为构造方法是私有的不被外界调用,也就无法在类的外部创建该类的实例化对象。因此,为了方便实例化对象,实例化对象同常用private来修饰。

2.this

  • 通过this可以明确去访问一个类的成员变量,解决与局部变量名称冲突问题。
class Animal{
	int age;
	public Animal(int age) {
		this.age=age;
	}
	public int getAge() {
		return this.age;
	}
}

在构造方法中访问age是局部变量,如果访问成员变量就要使用“this.age”来访问

  • 通过this调用成员方法
class Animal{
	public void song() {
		System.out.println("");
	}
	public void sing() {
		this.song();
	}
}
  • 构造方法是在实例化对象时被虚拟机自动调用,在程序中不能像调用其他方法一样去调用构造方法,,但是可以在一个构造方法中使用“this([参数1,参数2······])”的形式来调用其它的构造方法。
    package text;
    
    class Animal{
    	public Animal() {
    		System.out.println("无参的构造方法被调用");
    	}
    	public Animal(String name) {
    		this();
    		System.out.println("有参的构造方法被调用"+name+"");
    	}
    }
    public class text4 {
    
    	public static void main(String[] args) {
    		Animal a = new Animal("猫");
    
    	}
    
    }
    

this调用了无参构造方法

在使用this时注意以下几点:

  1. 只能在构造方法中使用this调用其他方法,不能在成员变量中使用
  2. 在构造方法中,this只能出现在第一行且只能出现一次
  3. 不能再一个类的两个构造方法中使用this互相调用

猜你喜欢

转载自blog.csdn.net/qq_39248122/article/details/80997869