Java中的构造方法以及this的使用

构造方法

定义

构造方法需要满足以下条件: 1.方法名要与类名相同 2.在方法名的前面没有返回值类型声明 3.在方法中不能使用return语句返回

无参的构造方法

package game;
class Student{
          
   
	public Student() {
          
   
		System.out.println("无参的构造方法被调用");
	}
}
public class text_2 {
          
   
	public static void main(String [] args){
          
   
		Student s=new Student();
	}

}

运行结果如下: 从代码中可以看出,“new Student()”除了实例化对象以外,还调用了构造方法Student();

有参的构造方法

package game;
class Person{
          
   
	int age;
	public Person(int a) {
          
   
		age=a;
	}
	public void speak() {
          
   
		System.out.println("小明的年龄是"+age+"岁");
	}
}

public class text_3 {
          
   
	public static void main(String [] args){
          
   
		Person p=new Person(21);
		p.speak();
	}

}

程序运行结果如下: 从代码可以看到“Person(int a)”这是一个有参的构造方法,在“new Person(21)”实例化对象的同时把参数传给a并赋值给age,然后调用了speak()这个构造方法。

构造方法的重载

构造方法也可以重载(不能被重写,因为子类不能继承父类构造方法),在一个类中只要构造方法的参数类型或者参数个数不同即可。用不同的构造方法可以给不同的属性赋值。

package game;
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 text_4 {
          
   
	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构造方法是有参的构造方法,实例化中没有参数,导致系统找不到无参的构造方法,并且系统不在自动生成无参的构造方法。 因为构造方法设为私有,无法在类外部创建类实例化对象。

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 game;
 
class Animall{
          
   
 public Animall() {
          
   
	  System.out.println("无参的构造方法被调用");
 }
 public Animall(String name) {
          
   
	  this();
	  System.out.println("有参的构造方法被调用"+name+"");
 }
}
public class text_5 {
          
   
 
 public static void main(String[] args) {
          
   
	 Animall a = new Animall("猫");
 
 }
 
}

结果如下:

总结

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

1.只能在构造方法中使用this调用其他方法,不能在成员变量中使用

2.在构造方法中,this只能出现在第一行且只能出现一次

3.不能在一个类的两个构造方法中使用this互相调用

经验分享 程序员 微信小程序 职场和发展