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

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

作者: 孤意的学习笔记 | 来源:发表于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