构造方法与匿名对象

目录

一 、方法的重载

二 、构造方法

三、构造方法的定义

四、自动生成构造方法

五、构造方法重载

六 、匿名对象


一 、方法的重载

方法的重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数及类型的不同可以完成不同功能的方法调用

public class MethodDemo {
    public static void main(String[] args) {
        int one = add(10,20);
        int two = add(10,20,30);
        float three = add(10.3f,13.3f);
        System.out.println("add(int x, int y)计算结果为:" + one);
        System.out.println("add(int x, int y,int z)计算结果为:" + two);
        System.out.println("add(float x, float y)计算结果为:" + three);
    }
    public static int add(int x, int y){
        int temp = 0;
        temp = x + y;
        return temp;
    }
    public static int add(int x, int y,int z){
        int temp = 0;
        temp = x + y + z;
        return temp;
    }
    public static float add(float x, float y){
        float temp = 0;
        temp = x + y;
        return temp;
    }
}

从程序中可以发现add()方法被重载了3次,在调用时,程序会根据参数的类型和个数的不同自动进行区分

System.out.println()方法也属于重载方法

 

辨别:方法的重载一定只是参数上的类型或个数不同,以下代码不属于方法重载

以上代码不属于方法重载,并且编译也不会通过

 

二 、构造方法

在《类与对象》的代码中,实例化一个对象之后,需要通过Set方法为对象中的属性赋值

其实,我们可以通过 构造方法 在对象实例化时就直接为对象的属性赋值,

实例化对象的语法:类名称 对象名称  = new 类名称(),也就是代码中   Person2 per = new Person2(); 其中的()表示调用了方法,而这个方法就是定义在类中的构造方法。代码如下:

class Person3{  //定义一个Person类
    private String name;  //声明类的属性
    private int age;      //声明类的属性

    public Person3(String name,int age){  //定义构造方法,初始化对象中的属性值
        this.setName(name);
        this.setAge(age);
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age>=0&&age<150){
            this.age = age;
        }
    }

    public void tell(){   
        System.out.println("姓名:" + this.getName() + " 年龄:" + age);
    }
};

public class ClassDemo03{
    public static void main(String[] args) {
        Person3 per = new Person3("Tony",24);   //实例化对象时,调用构造方法为属性赋值
        per.tell();
    }
}

程序运行结果:

 

三、构造方法的定义

定义构造方法需要注意以下三点:

  1. 构造方法的名称必须与类名称一致
  2. 构造方法的声明处不能有任何 返回值 类型的声明
  3. 不能在构造方法中使用 return 返回一个值

 

四、自动生成构造方法

构造方法的主要作用就是为类中属性初始化。并且在实例化对象时就会被调用。 

在《类与对象》的代码中,并没有定义构造方法,但程序依然能够执行,那是因为,

在JAVA中如果不定义构造方法的话,在编译时,会默认加上一个无参数的,什么都不做的构造方法

类似:Public  Person3() { 

           }   

但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上。

如果Person3 类中已经有了一个有参数的构造方法,这时再使用 Person3 per = new Person3();来创建对象的时候就会报错,

所以,当定义了有参数的构造方法后,最好加一个无参数的构造方法.

 

五、构造方法重载

与普通方法一样,构造方法也可以重载的,只要每个构造方法的参数类型或参数个数不同

class Person4{  //定义一个Person类
    private String name;  //声明类的属性
    private int age;      //声明类的属性

    public Person4(){   //定义无参构造方法
        
    }
    public Person4(String name){  //定义一个参数构造方法
        this.setName(name);
    }
    public Person4(String name,int age){  //定义多个参数构造方法
        this.setName(name);
        this.setAge(age);
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age>=0&&age<150){
            this.age = age;
        }
    }

    public void tell(){    //类的方法
        System.out.println("姓名:" + this.getName() + " 年龄:" + age);
    }
};

public class ClassDemo04{
    public static void main(String[] args) {
        Person4 per = new Person4("Tony",24);   //实例化对象时,调用构造方法为属性赋值
        Person4 per2 = new Person4("Mark");
        per.tell();
        per2.tell();
    }
}

程序运行结果:

 

六 、匿名对象

匿名对象就是没有明确定义名字的对象,一般匿名对象只使用一次

class Person3{  //定义一个Person类
    private String name;  //声明类的属性
    private int age;      //声明类的属性

    public Person3(){

    }
    public Person3(String name,int age){  
        this.setName(name);
        this.setAge(age);
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age>=0&&age<150){
            this.age = age;
        }
    }

    public void tell(){    
        System.out.println("姓名:" + this.getName() + " 年龄:" + age);
    }
};

public class ClassDemo03{
    public static void main(String[] args) {
        new Person3("Jony",26).tell();  //匿名对象
    }
}

程序运行结果:

 new Person3("Jony",26).tell(); 在堆内存中开辟空间,而不存在栈内存的引用,此对象使用一次之后,就等待被垃圾收集机制回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值