Java构造方法和方法重载详解

 更新时间:2022年01月19日 15:45:22   作者:像太阳啊  
大家好,本篇文章主要讲的是Java构造方法和方法重载详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

类的结构包括 :

1. 成员变量

2. 成员方法

3. 构造方法

4. 代码块

5. 内部类

第一 构造方法的作用

主要有以下三方面的作用:

(1)在构造方法中为创建的对象初始化赋值

(2)在创建一个对象的时候,至少需要调用一个构造方法

(3)每一个类都有构造方法

一个例子加深对以上三条的理解

public class Car{
    String name;
    String color;
    float price;
}

上一篇文章已经讲解过 name , color , price 三个都是类的成员变量,我们再创建一个类TextCar用来测试. 举个例子,现在先记住:

Car bm = new Car();

这句代码中Car()就是构造方法.所以也说明了(2)在创建一个对象的时候,至少需要调用一个构造方法.

public class TextCar{
    public static void main(String [] args){
        Car bm = new Car();  //给Car类创建(new)了一个对象
        System.out.println(bm.name);
    } 
}

在main方法中未对name赋值,但运行结果如下:

不难发现,程序可以正常run并且name的值为null . 其实构造方法为成员变量赋了初值,即(1)的为创建的对象初始化赋值.构造方法赋初值如 : int类型 初值:0 , double类型 初值:0.0 ,String类型 初值 null 等等(常用的了解一下).

在public class Car{ } 这个类中看到的只有成员变量,没有成员方法,更没有看到构造方法. 其实,是因为我们没有显示的写书构造方法,类里面有一个隐式的默认的构造方法:

public class Car{
    String name;
    String color;
    float price;
    public Car(){    //默认的构造方法,也可以显示的写出来
        this.name = null;
        this.color = null;
        this.price = 0.0;
    }
}

public Car(){ }有这样一个隐式的无参的构造方法,只不过在上面的代码中,我们显示的写出来了,这也解释了 (3)每一个类都有构造方法.

到这里构造方法的知识点就梳理完了,欢迎大家评论区补充~

第二 构造方法的特点

构造方法的特点如下:

(1)名称和类名相同(这一点需要牢记)

(2)没有返回值

(3)不需要用void来修饰

public class Car{
   //里面有一个默认的无参构造方法Car(){   }
}

Car类里面的默认无参构造方法的名称也叫Car().

我们也可以定义有参的构造方法,如果定义一个有参的构造方法会把默认的构造方法覆盖掉.例如:

public class Car{
    String name;
    String color;
    float price;
    public Car(String name,String color,float price){   
        this.name = name;
        this.color = color;
        this.price = price;
    }
    
}

此时默认的无参构造方法被覆盖掉.

如果刚开始接触java,对 this. 不理解,看一下这一段的简单解释:this表示的是对应的对象,一定可以在main方法中找到对应的对象如上一段的代码,一定可以找到这样的对象 : Car bm = new Car("宝马","黑色",5000000);(参量只要类型确定,想写什么读者随意),this就指的是这个对象, this . 后面的name表示的是Car类的成员变量name , 等号右边的name表示该构造方法的参数name.其余变量同理.最后,如果你觉得不好理解,可以把参数换个名字,如a,左边的this . 就可以去掉.但this的使用一定要会.

来一个完整的简单的代码,读者自己敲一下,然后给自己讲一下,就完全理解啦~

public class Car{
    String name;
    String color;
    float price;
    public Car(String name,String color,float price){   
        this.name = name;
        this.color = color;
        this.price = price;
    }
    public run(){  //成员方法
        System.out.println("汽车行驶");
    }
}
 
 
public class TextCar{
    public static void main(String [] args){
        Car bm = new Car("宝马","红色",500000);  //给Car类创建(new)了一个对象
        System.out.println(bm.name+" "+bm.color+" "+500000);
        bm.run();
    } 
}

方法重载

1.重载有什么特点

(1)在一个类中有多个方法名称相同的现象

(2)构造方法和成员方法都可以重载

(3)通过参数的个数,类型,类型的顺序进行区分是否为同一方法

方法重载涉及到一个覆盖的问题,如果重新定义传参的构造方法,需要把默认的无参构造方法显示的写出来,因为默认的已经被重载的覆盖掉,调用Car()时会报错!例如:

public Car(String name,String color,float price){
    this.name = name;
    this.color = color;
    this.price = price;
    public Car(String name,String color,float price){   
        this.name = name;
        this.color = color;
        this.price = price;
    }
    
    public run(String name,String color){  //成员方法
        System.out.println(this.color+this.name+"汽车行驶");
    }
    public run(String color,String name){
        System.out.println(this.color+this.name+"汽车行驶");
    }
    public int run(String name){
        System.out.println(this.name+"汽车行驶");
        return 0;
    }
}
public class TextCar{
    public static void main(String [] args){
        Car dz = new Car();//创建了一个对象
        System.out.println(dz.name);
        Car bm = new Car("宝马","红色",500000);  //创建了一个对象
        System.out.println(bm.name+" "+bm.color+" "+500000);
        bm.run("红色","宝马");
        bm.run("宝马");
    } 
}

因为Car()这个无参构造方法已经被有参的Car(String name,String color,float price)覆盖,new Car()时找不到无参构造方法.需要我们显示得把Car()定义出来才可以.

方法的重载,在Car类中有Car同名的构造方法,run()同名的构造方法,在类中使用重名的方法就是方法的重载,如果两个方法的名字和参数类型,数量,顺序都相同是不可以的,同名的方法需要考方法的参数类型,数量和顺序区分开来

总结

到此这篇关于Java构造方法和方法重载详解的文章就介绍到这了,更多相关Java构造方法 方法重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 修改idea的这些启动参数,令你的idea健步如飞

    修改idea的这些启动参数,令你的idea健步如飞

    这篇文章主要介绍了修改idea的这些启动参数,令你的idea健步如飞~具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 用java将GBK工程转为uft8的方法实例

    用java将GBK工程转为uft8的方法实例

    本篇文章主要介绍了用java将GBK工程转为uft8的方法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java运行时数据区域(内存划分)的深入讲解

    Java运行时数据区域(内存划分)的深入讲解

    听说Java运行时环境的内存划分是挺进BAT的必经之路,这篇文章主要给大家介绍了关于Java运行时数据区域(内存划分)的相关资料,需要的朋友可以参考下
    2021-06-06
  • 关于JDK8升级17及springboot 2.x升级3.x详细指南

    关于JDK8升级17及springboot 2.x升级3.x详细指南

    这篇文章主要介绍了关于JDK8升级17及springboot 2.x升级3.x的相关资料,还讨论了JPA包路径从javax改为jakarta,以及Spring Boot版本升级和Redis配置调整等,需要的朋友可以参考下
    2025-01-01
  • log4j配置失效日志中打印Debug信息问题

    log4j配置失效日志中打印Debug信息问题

    这篇文章主要介绍了log4j配置失效日志中打印Debug信息问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring空值和特殊字符的注入方式

    Spring空值和特殊字符的注入方式

    文章介绍了如何通过创建类、配置文件和测试代码来实现空值和特殊字符注入,具体包括定义属性、生成set方法、配置对象创建和属性注入、以及编写测试代码进行验证
    2024-11-11
  • 浅谈Java多线程实现及同步互斥通讯

    浅谈Java多线程实现及同步互斥通讯

    下面小编就为大家带来一篇浅谈Java多线程实现及同步互斥通讯。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Spring源码之事件监听机制(实现EventListener接口方式)

    Spring源码之事件监听机制(实现EventListener接口方式)

    这篇文章主要介绍了Spring源码之事件监听机制(实现EventListener接口方式),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解如何用SpringBoot 2.3.0.M1创建Docker映像

    详解如何用SpringBoot 2.3.0.M1创建Docker映像

    这篇文章主要介绍了详解如何用SpringBoot 2.3.0.M1创建Docker映像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 浅谈java String不可变的好处

    浅谈java String不可变的好处

    这篇文章主要介绍了java String不可变的好处,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论