构造方法
对象的产生格式:
①类名称 ②对象名称 = ③new ④类名称();
- ①类名称: 规定了对象的类型,即:对象可以使用哪些属性与哪些方法,都是有类定义的;
- ②对象名称: 如果要想使用对象,需要有一个名字,这是唯一的标识;
- ③new : 创建新的堆内存空间,如果没有此语句,对象无法实例化;
- ④类名称():调用一个和类名称相同的方法,这就是构造方法。
构造方法的定义原则:方法名称与类名相同,没有返回值声明。
class Book {
public Book(){} //无参的,无返回值的构造方法
}
构造方法即使没有定义,程序编译的时候也会自动为类创建一个无参,无返回值的构造方法。
class Book {
public Book() {
System.out.println("**********");
}
}
public class Demo {
public static void main(String[] args) {
Book book = null; //声明对象
book = new Book(); //实例化对象
}
}
通过以上的代码可以发现,所有的构造方法都在对象使用关键字new实例化对象的时候被默认调用。
构造方法与普通方法的最大区别:
- 构造方法是在对象实例化新对象(new)的时候只调用一次
- 普通方法是在实例化对象产生之后可以随意调用多次。
构造方法是在对象实例化的时候使用的,这样的做法有什么用?
class Book{
private String title;
private double price;
public void setTitile(String t) {
title = t;
}
public void setPrice(double p) {
if (p > 0) {
price = p;
}
}
public String getTitle() {
return title;
}
public double getPrice() {
return price;
}
public void getInfo() {
System.out.println("Title: " + title + "; Price: " + price);
}
}
public class TestDemo {
public static void main(String[] args) {
Book book = new Book();
book.setPrice(89.0);
book.setTitile("Java开发");
book.getInfo();
}
}
上面程序是先实例化了Book类对象,而后利用Book类的实例化对象去调用类中定义的setter方法,如果要想设置全部属性的内容,那么一定要调用多次setter方法。
范例: 定义构造方法
class Book{
private String title;
private double price;
//定义一个构造方法,默认的构造方法将不再生成
public Book(String t, double p) {
title = t;
setPrice(p);
}
public void setTitile(String t) {
title = t;
}
public void setPrice(double p) {
if (p > 0) {
price = p;
}
}
public String getTitle() {
return title;
}
public double getPrice() {
return price;
}
public void getInfo() {
System.out.println("Title: " + title + "; Price: " + price);
}
}
public class TestDemo {
public static void main(String[] args) {
//在实例化对象的同时将所需要的类属性传递到对象的构造方法里
Book book = new Book("Java开发" , 89.0);
//book.setPrice(89.0);
//book.setTitile("Java开发");
book.getInfo();
}
}
在实际工作中,构造方法的核心作用;在类对象实例化的时候设置属性的初始化内容。构造方法是为属性初始化准备的。
范例:构造方法重载
class Look{
public Look() {
System.out.println("无参构造");
}
public Look(String t) {
System.out.println("有一个参数的构造");
}
public Look(String t , double p) {
System.out.println("有两个参数的构造");
}
}
public class Demo{
public static void main(String[] args) {
Look look = new Look();
Look look1 = new Look("java开发");
Look look2 = new Look("java开发" , 89.9);
}
}
构造方法重载时,要求只注意参数的类型和个数即可。注意:请按照参数的个数的升序或降序排列。
匿名对象
真是的对象信息都保存在堆内存空间之中,那么如果没有栈指向的对象空间就称为匿名对象。
class Book{
private String title;
private double price;
//定义一个构造方法,默认的构造方法将不再生成
public Book(String t, double p) {
title = t;
setPrice(p);
}
public void setTitile(String t) {
title = t;
}
public void setPrice(double p) {
if (p > 0) {
price = p;
}
}
public String getTitle() {
return title;
}
public double getPrice() {
return price;
}
public void getInfo() {
System.out.println("Title: " + title + "; Price: " + price);
}
}
public class TestDemo {
public static void main(String[] args) {
new Book("Java开发" , 89.9).getInfo();
}
}
但是匿名对象由于没有其它对其进行指引,所以只能使用一次,一次之后该对象空间就将成为垃圾,等待回收。
总结
- 构造方法的定义要求:方法名称与类名称相同,无返回值声明
- 构造方法时在类对象使用关键字new实例化的时候被默认使用的,只要有关键字new就一定需要构造方法;
- 一个类之中至少会保留一个构造方法,如果没有明确定义构造方法,会自动生成一个无参的空构造方法;
- 构造方法的核心功能是在类对象实例化的时候为类中的属性初始化;
- 构造方法重载时只要求考虑参数的类型和个数;
- 匿名对象只能够使用一次。
网友评论