构造方法与匿名对象

构造方法

对象的产生格式:
①类名称 ②对象名称 = ③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();
    }
}

但是匿名对象由于没有其它对其进行指引,所以只能使用一次,一次之后该对象空间就将成为垃圾,等待回收。

总结

  1. 构造方法的定义要求:方法名称与类名称相同,无返回值声明
  2. 构造方法时在类对象使用关键字new实例化的时候被默认使用的,只要有关键字new就一定需要构造方法;
  3. 一个类之中至少会保留一个构造方法,如果没有明确定义构造方法,会自动生成一个无参的空构造方法;
  4. 构造方法的核心功能是在类对象实例化的时候为类中的属性初始化;
  5. 构造方法重载时只要求考虑参数的类型和个数;
  6. 匿名对象只能够使用一次。

你可能感兴趣的:(构造方法与匿名对象)