Java中的构造方法(构造函数)与普通方法区别及说明

 更新时间:2024年03月25日 09:29:26   作者:feng之锋  
这篇文章主要介绍了Java中的构造方法(构造函数)与普通方法区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、明白什么是构造方法,什么是普通方法?

所谓的构造方法,是一种特殊的方法,其作用是用来创建对象时初始化对象,即为对象成员变量赋初始值,总是与new运算符一起使用在创建对象的语句中。

特别的,一个类是可以有多个构造函数,可以根据参数个数的不同或者参数类型的不同来区分它们,即为构造函数的重载。

构造方法是类的一个特殊的成员,在类实例化时会自动调用,其构造方法定义格式如下:

修饰符 方法名(){}

其中需要注意的是:

  • 方法名与类名相同;
  • 没有返回值类型;
  • 没有具体的返回值

例如接下来这个例子,在创建对象的时候,对象成员可以由构造函数方法进行初始化。

new对象时,都是用构造方法进行实例化的;

例如;Test test = new Test("a");

 //Test("a");其中这个就是构造函数,“a”为构造方法的形参;

而普通方法是简单来说就是完成特定功能的代码块。

其定义的格式如下:

修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2,…)
{
函数体;
return 返回值;
}

其中:返回值类型用于限定返回值的数据类型。

二、 明白构造方法和普通方法的特点和作用是什么?

1.构造方法的特点

构造函数的主要作用是完成对象的初始化工作,(如果写的类里面没有构造函数,那么编译器会默认加上一个无参数且方法体为空的构造函数).

它能够把定义对象时的参数传给对象的域。意即当创建一个对象时,这个对象就被初始化.如果这时构造函数不为空,则会在创建对象时就执行构造函数里面的代码:

构造函数的名称必须与类名相同,包括大小写。

构造函数没有返回值的,也不能用void来进行修饰。如果不小心给构造函数添加了返回类型,那么这将使这个构造函数变成一个普通方法了,则在运行时将产生找不到构造方法的错误。

④一个类可以定义多个构造方法,如果在定义类时定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。

构造方法可以重载,以参数的个数,类型,顺序来重载。例如:

public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.show();
        
        System.out.println("----------------");
        
        Phone p2 = new Phone("vivoxplay5",2999);
        p2.show();
    }        
}

class Phone{
    private String brand;  //品牌
    private int price;       //价格
    
    //无参构造方法
    public Phone(){
        System.out.println("无参构造");
    }

    //有参构造器
    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
        System.out.println("有参构造");
    }
    
    public void show(){
        System.out.println(brand+"..."+price);
    }

    
}

构造方法给成员变量赋值的两种方式的区别:

/**
     * 无参构造方法:给属性进行初始化
     * set/get方法:修改属性值
     * @param args
     */
public static void main(String[] args) {
        //无参构造创建对象
        Phone p1 = new Phone();    
        p1.setBrand("vivoxplay5");
        p1.setPrice(2999);
        
        p1.setBrand("vivo");
        p1.show();
        
        System.out.println("----------------");
        //有参构造创建对象
        Phone p2 = new Phone("vivoxplay5",2999);
        //这种方式并不是改名,而是将原对象变成垃圾
        //p2 = new Phone("vivo",2000);
        p2.show();
    }        
}

class Phone{
    private String brand;  //品牌
    private int price;       //价格
    
    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    //无参构造方法
    public Phone(){
        System.out.println("无参构造");
    }

    //有参构造器
    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
        System.out.println("有参构造");
    }
    
    public void show(){
        System.out.println(brand+"..."+price);
    }

    
}

2.构造方法的作用

【1】 首先,构造函数用来生成并初始化对象;

【2】其次,构造函数可以通过函数的重写给对象赋初始值,简化代码,例如:

在这段代码中,本文创建了两个Person对象,分别赋给了初始值,但是如果创建的对象比较多的话,代码就显得很重复,这时可以重载Person类里面的构造方法,以在创建对象的时候就赋给它们初始值,这样就可以省去重复的代码了:

在这里有一个问题需要特别的注意

在默认的情况下,一个类会有一个默认的构造函数,这个构造函数没有内容也没有返回值,一般会省略。

在这种情况下,编译器在编译的时候会默认加上一个无参且方法体为空的函数。但是,如果类的构造函数被重写了,如上述的例子,Person类已经有了一个有参数有方法体的构造函数,这是编译器就不会再给它默认加上一个无参且方法体为空的构造函数,可以理解为无参的构造函数被覆盖了,这种情况称为没有默认构造函数。

而在函数的继承里,子类必须调用父类的构造函数。但是子类只能继承父类的默认的构造函数,如果父类没有默认的构造函数,那么子类不能从父类继承默认构造函数,这是子类必须使用super来实现对父类的非默认构造函数的调用。

因此,在创建对象的时候,需要先利用super来调用父类的默认的构造函数来对对象进行初始化,然后调用子类自己定义的构造函数。

3.普通方法的特点与作用

【1】普通方法的特点:

方法是解决一类问题的步骤的有序组合;

②一个方法必须属于某一个类的,独立于类的方法不存在的;

③Java的普通方法可以操作调用它从属的对象和参数列表中的参数;

普通方法的调用方式为:对象.方法名(参数),如接下来的代码为例:

public void driverCar (int a,double b) {
    speed= 50;
    direction= "南方";
}

⑤Java方法只能有一个返回值,但是“值”的形式具有多样性 

【2】作用:

完成特定功能的代码块,即根据自己项目的需要,进行自己编码完成项目所需要的功能。

三、明白构造方法和普通方法的调用方式是怎样调用的?

1)构造方法的调用方式

构造方法分为:无参构造方法有参构造方法

A. 无参构造方法:

public class Student{
public  Student(){                    //无参构造方法

System.out.println("无参方法被调用");

}

}

public class Test {
public  static void main (String[]  args){
Student   stu = new Student();  //实例化Student对象

}

}//该方法是无参的构造方法,即构造方法不接收参数,执行后输出即可,无参的构造方法被调用。

B. 有参构造方法

为一个属性赋值有两种方法:

①直接访问对象属性

②通过setXxx()方法

如果想在实例化对象的同时就为了对象的属性进行赋值,可以通过带参数的构造方法来实现

public class Student{
private String name;
private int  age;
public  Student(String name,int age){             //有参构造方法
    this.name = name;
    this.age  = age ;
}
public  void show (){
System.out.println("姓名:"+name+"年龄:"+age);
}
}
public  class  Test02(){
public static void main (String[]   args)
{
Student  stu = new Student("王小五",25);     //实例化对象的同时赋值
stu.show();
}
}

2)普通方法的调用方式

普通方法分为 有明确返回值的方法没有明确返回值的方法

A. 有明确返回值的方法的调用

可以单独调用(无意义),输出调用,赋值调用(推荐)。

public static int sum (int a , int b)
{
    int c = a+b;
    return c ;
}
public static void main(String[] args)
{
           //sum(10,20); //单独调用
           //System.out.println(sum(10,20));  //输出调用
           int sum01 =sum(10,20); //赋值调用
}

B. 没有明确返回值的方法调用(void类型方法的调用)

只能单独使用。(如果一个方法没有明确的返回值类型,方法定义中“返回值类型”就可以用void代替,表示该方法无返回值类型。)

四、注意事项

① Java中的每一类至少有一个构造方法,如果我们没有去创建,系统自动会为我们创建一个默认的无参构造方法;

②但是如果我们定义了构造方法,系统就不会再为我们提供默认的无参构造方法了。这个时候想使用无参构造方法必须自己定义。因为实例化对象时,不一定会输入参数,那么没有无参的构造方法,又不输入参数,就会出错;

③构造方法需要用public来修饰,若使用private,在其他类中无法将其实例化;

④构造方法是可以重载的。所谓重载,是指一个类中可以定义多个方法名相同,但是参数不同的方法。调用时,会根据不同的参数自动匹配对应的方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot主键ID传到前端后精度丢失的问题解决

    SpringBoot主键ID传到前端后精度丢失的问题解决

    这篇文章主要通过示例为大家详细介绍一些SpringBoot如何解决雪花算法主键ID传到前端后精度丢失问题,文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • Spring Cloud Hystrix原理与注意事项小结

    Spring Cloud Hystrix原理与注意事项小结

    本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细的错误处理机制,并能够及时响应系统中的异常,避免服务的连锁崩溃,感兴趣的朋友一起看看吧
    2025-03-03
  • Java中try catch处理异常示例

    Java中try catch处理异常示例

    这篇文章主要给大家介绍了关于Java中try catch 的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • JAVA自定义注解的步骤示例详解

    JAVA自定义注解的步骤示例详解

    本文介绍了Java中注解的基本概念、自定义注解的步骤、常用元注解的解析以及自定义注解的常见应用场景,自定义注解可以帮助开发者实现日志记录、权限校验、参数校验等通用功能,提高代码的复用性和可读性,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • 分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    这篇文章主要为大家介绍了分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Java常用的八种排序算法与代码实现

    Java常用的八种排序算法与代码实现

    这篇文章主要给给大家分享Java常用的八种排序算法与代码实现,下面文章将详细介绍整个实现过程,感兴趣的小伙伙伴可以跟着小编一起来学习,希望对你有所帮助
    2021-10-10
  • Spring Boot核心注解@ResponseBody深度解析与实战指南

    Spring Boot核心注解@ResponseBody深度解析与实战指南

    SpringBoot中@ResponseBody注解详解,全面拆解其核心作用、工作原理、实战示例、简化用法及注意事项,本文介绍Spring Boot核心注解@ResponseBody深度解析与实战指南,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java利用泛型实现折半查找法

    Java利用泛型实现折半查找法

    泛型是JAVA重要的特性,使用泛型编程,可以使代码复用率提高。查找作为泛型的一个简单应用,本文将使用泛型实现折半查找法,感兴趣的可以了解一下
    2022-08-08
  • Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析(经典)

    Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析(经典)

    这篇文章主要介绍了Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析,结合实例形式较为详细的分析说明了jdk1.4,jdk1.5和jdk1.6版本的使用区别,需要的朋友可以参考下
    2015-12-12
  • Spring AOP注解实战指南

    Spring AOP注解实战指南

    在现代软件开发中,面向切面编程(AOP)是一种强大的编程范式,本文将介绍如何在Spring框架中通过AspectJ注解以及对应的XML配置来实现AOP,在不改变主业务逻辑的情况下增强应用程序的功能,需要的朋友可以参考下
    2024-06-06

最新评论