构造方法与匿名对象

2018-06-04  本文已影响0人  诗与酒

前言:

实例化对象的产生格式:

类名称 对象名称 = new 类名称()

对于以上格式的观察组成部分:

所以通过以上的分析就应该已经清楚了,
所谓的构造方法指的就是在使用关键字new实例化新对象的时候来进行调用的操作方法。
但是对于构造方法的定义也需要遵守如下原则:

方法名称必须与类名称相同,并且构造方法没有返回值类型声明。
同时每一个类中一定会至少存在有一个构造方法,
如果类中没有明确的定义任何一个构造方法,那么将自动生产一个无参的,什么都不做的构造方法。

范例 1:定义一个无参 什么都不做的构造方法。

class Person{
    private String name;
    private int age;
    // 构造方法名称与类名称相同,并且没有返回值类型声明
    public Person(){    //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
    } 
}

疑问:既然构造方法中没有返回数据,为什么不用void定义呢?
现在的类中的组成: 1) 属性,2)普通方法,3)构造方法。

对于类中可以自动生成的无参构造方法实际上是有一个前提的:
你类中没有定义任何的构造方法,相反,如果你现在类中定义了构造方法,那么此类的默认构造方法将不会自动生成。
范例 2:类中定义一个有参构造方法

class Person{
    private String name;
    private int age;
    //定义了一个有参构造,则默认的无参构造将不会在编译时自动生成
    public Person(String n,int a){  //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        setAge(a);
    } 
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if (age>=0 && age<=250){
            age = a;
        }else{
            age = 0;
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public void info(){
        System.out.println("name="+name+",age="+age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per = new Person("张三",20);
        per.info();
        
    }
}

构造方法作用:

在实际开发之中,setter方法 除了具备有设置内容之外,也可以承担修改数据的操作

既然构造方法本身属于方法,那么方法 就一定可以进行重载,而 构造方法的重载 更加简单,因为方法名称就是类名称,所以你能够做的只是实现参数的类型或个数不同这一概念。
范例 3:构造方法重载。

class Person{
    private String name;
    private int age;
    public Person(){}
    //定义了一个有参构造,则默认的无参构造将不会在编译时自动生成
    public Person(String n){    //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        
    } 
    public Person(String n,int a){  //如果你现在的类中不写此定义也会在编译后自动生成。
        System.out.println("***************");
        name = n;
        setAge(a);
        
    } 
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if (age>=0 && age<=250){
            age = a;
        }else{
            age = 0;
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public void info(){
        System.out.println("name="+name+",age="+age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per = new Person("张三");
        per.setAge(18);
        per.info();
        
    }
}

但是在进行构造方法重载的时候请注意一下你的定义结构。建议若干个构造方法按照参数的个数采用升序或降序排列。
同时也需要注意一点:在进行类定义的时候,请按照如下顺序完成


发现构造方法可以传递属性的内容,那么很多时候为了方便,往往会使用匿名对象完成。

范例 4:匿名对象

public class Test{
    public static void main(String[] args){
        new Person("张三",20).info();
        
    }
}

由于匿名对象不会有任何的栈空间所指向,所以使用一次之后就将成为垃圾。
你现在是否使用匿名对象没有绝对的定论,你一切都可以使用有名对象

总结:

上一篇下一篇

猜你喜欢

热点阅读