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互相调用
