1.类中的this关键字表示当前对象的引用。它可以被用于解决变量名冲突问题,或者在一个方法中调用类的另一个方法。如果在方法中没有明确指定要使用哪个变量,那么编译器就会默认使用this关键字来表示当前对象。
下面是一个输出this关键字的示例代码:
public class MyClass {
private int num;
public MyClass(int num) {
this.num = num;
}
public void printNum() {
System.out.println("num = " + this.num);
}
}
public class ThisTest {
public static void main(String[] args) {
MyClass myClass = new MyClass(5);
myClass.printNum();
}
}
在上面的代码中,构造方法中的参数num和类属性num同名,为了避免变量名冲突,我们使用了this关键字来表示类属性num。在printNum方法中,我们使用this关键字来表示当前对象调用的属性num。
2.构造器首先,构造方法是一种特殊的方法,用来创建一个对象并初始化对象的属性。每个类都必须有至少一个构造方法,因为它负责初始化对象的状态。
构造方法的名字必须和类名完全相同,没有返回值类型,包括void。当使用new关键字创建一个对象时,Java编译器会根据参数的类型和数量来匹配合适的构造方法,并自动调用该方法来初始化对象的状态。
构造方法可以有不同的访问修饰符,例如public、private、protected和默认(即不声明访问修饰符)。如果声明为private,该构造方法只能在本类中被访问,其他类无法调用该构造方法,这种情况也被称为私有构造方法。
构造方法可以接受参数,这些参数通常用来为对象的属性赋初值。在调用构造方法时,实参传递给形参,构造方法体内使用这些参数来初始化对象的属性。如果没有给出构造方法,Java会默认提供一个无参构造方法,该方法不执行任何操作,仅仅是初始化对象属性的默认值。
当一个类有多个构造方法时,Java可以根据参数的不同来自动调用相应的构造方法,这被称为构造方法的重载(overloading)。
下面是一个使用构造方法的示例代码:
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public void printInfo() {
System.out.println("Title: " + this.title);
System.out.println("Author: " + this.author);
System.out.println("Pages: " + this.pages);
}
}
在上面的代码中,Book类有一个构造方法,用来初始化Book对象的属性。在printInfo方法中,我们打印了Book对象的属性。我们可以通过下面的代码来创建一个Book对象并调用printInfo方法:
public class ConstructorTest {
public static void main(String[] args) {
//无参构造
Book book1 = new Book();
System.out.println(book1);
book1.printInfo();
//有参构造
Book book = new Book("Java Programming", "John Smith", 300);
System.out.println(book);
book.printInfo();
}
}
输出结果为:
如果没有给出构造方法,Java会默认提供一个无参构造方法,该方法不执行任何操作,仅仅是初始化对象属性的默认值。
通过上面的示例代码,我们可以看到构造方法的作用是在创建对象时对对象进行初始化,以确保对象在使用时能够正常、准确地工作。