美文网首页
第五章:面向对象基础——构造方法与匿名对象。

第五章:面向对象基础——构造方法与匿名对象。

作者: 孤意的学习笔记 | 来源:发表于2017-09-26 10:43 被阅读0次

    本章目标

    • 掌握构造方法的概念及调用时机
    • 掌握构造方法的重载
    • 掌握匿名对象的使用

    1、具体内容

    1.1、什么叫构造方法?


    只要一有对象实例化,则就会调用构造方法。

    声明一个构造方法

    class Person{
        public Person(){        // 声明构造方法
            System.out.println("一个新的Person对象产生。") ;
        }
    };
    public class ConsDemo01{
        public static void main(String args[]){
            System.out.println("声明对象:Person per = null ;") ;
            Person per = null ; // 声明对象时并不去调用构造方法
            System.out.println("实例化对象:per = new Person() ;") ;
            per = new Person() ;//实例化对象
        }
    };
    
    输出结果:
    声明对象:Person per = null ;
    实例化对象:per = new Person() ;
    一个新的Person对象产生。
    

    大概了解了构造方法之后,这时候又会有一个新问题产生:之前在编写类的时候并没有定义构造方法,为什么也可以执行呢?

    这就属于Java的操作机制,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的、什么都不做的构造方法,供用户使用、就类似于以下形式:

    class Person{
        public Person(){        // 如果没有编写构造方法,则会自动生成此代码
        }
    };
    

    构造方法的目的

    为类中的属性初始化。既然是方法,则方法中肯定可以传递参数,此时定义一个构造,同时向里面传递参数。

    class Person{
        private String name ;
        private int age ;
        public Person(String n,int a){      // 声明构造方法,为类中的属性初始化
            this.setName(n) ;
            this.setAge(a) ;
        }
        public void etName(String n){
            name = n ;
        }
        public void etAge(int a){
            if(a>0&&a<100){
                age = a ;
            }
        }
        public String getName(){
            return name ;
        }
        public int getAge(){
            return age ;
        }
        public void tell(){
            System.out.println("姓名:" + this.getName() + ";年龄:" + this.getAge()) ;
        }
    };
    public class ConsDemo02{
        public static void main(String args[]){
            System.out.println("声明对象:Person per = null ;") ;
            Person per = null ; // 声明对象时并不去调用构造方法
            System.out.println("实例化对象:per = new Person() ;") ;
            per = new Person("张三",30) ;//实例化对象
            per.tell() ;
        }
    };
    
    输出结果:
    声明对象:Person per = null ;
    实例化对象:per = new Person() ;
    姓名:张三;年龄:30
    

    可以发现构造方法的主要目的就是为类中的属性初始化。

    1.2、构造方法重载

    构造犯法与普通方法一样,都是支持重载操作的,只要参数的类型和个数不同,就可以完成重载操作。

    class Person{
        private String name ;
        private int age ;
        public Person(){}                   // 声明一个无参的构造方法
        public Person(String n){            // 声明有一个参数的构造方法
            this.setName(n) ;
        }
        public Person(String n,int a){      // 声明构造方法,为类中的属性初始化
            this.setName(n) ;
            this.setAge(a) ;
        }
        public void setName(String n){
            name = n ;
        }
        public void setAge(int a){
            if(a>0&&a<150){
                age = a ;
            }
        }
        public String getName(){
            return name ;
        }
        public int getAge(){
            return age ;
        }
        public void tell(){
            System.out.println("姓名:" + this.getName() + ";年龄:" + this.getAge()) ;
        }
    };
    public class ConsDemo03{
        public static void main(String args[]){
                System.out.println("声明对象:Person per = null ;") ;
                System.out.println("实例化对象:per = new Person() ;") ;
                Person per1 = new Person("张三",30) ;//实例化对象
                Person per2 = new Person("李四") ;//实例化对象
                per1.tell() ;
                per2.tell() ;
        }
    
    输出结果:
    声明对象:Person per = null ;
    实例化对象:per = new Person() ;
    姓名:张三;年龄:30
    姓名:李四;年龄:0
    

    1.3、匿名对象

    匿名:没有名字,在Java中,如果一个对象只使用一次,则就可以将其定义为匿名对象。

    class Person{
        private String name ;
        private int age ;
        public Person(String n,int a){      // 声明构造方法,为类中的属性初始化
            this.setName(n) ;
            this.setAge(a) ;
        }
        public void setName(String n){
            name = n ;
        }
        public void setAge(int a){
            if(a>0&&a<150){
                age = a ;
            }
        }
        public String getName(){
            return name ;
        }
        public int getAge(){
            return age ;
        }
        public void tell(){
            System.out.println("姓名:" + this.getName() + ";年龄:" + this.getAge()) ;
        }
    };
    public class NonameDemo01{
        public static void main(String args[]){
            new Person("张三",30).tell() ;  //匿名对象
        }
    };
    
    输出结果:
    姓名:张三; 年龄:30
    

    所谓的匿名对象,就是比之前少了一个栈内存的引用关系,缺少了引用。。

    2、总结

    1、构造方法的定义及使用原则

    • 对象在实例化时必须调用构造方法
    • 每个类中都至少有一个构造方法

    2、匿名对象:只开辟了堆内存的实例化对象

    相关文章

      网友评论

          本文标题:第五章:面向对象基础——构造方法与匿名对象。

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