美文网首页
构造方法与匿名对象

构造方法与匿名对象

作者: 落在牛背上的鸟 | 来源:发表于2018-02-27 21:14 被阅读146次

    构造方法

    对象的产生格式:
    ①类名称 ②对象名称 = ③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. 匿名对象只能够使用一次。

    相关文章

      网友评论

          本文标题:构造方法与匿名对象

          本文链接:https://www.haomeiwen.com/subject/jsbuxftx.html