Java中的构造方法(构造函数)与普通方法区别及说明
作者:feng之锋
一、明白什么是构造方法,什么是普通方法?
所谓的构造方法,是一种特殊的方法,其作用是用来创建对象时初始化对象,即为对象成员变量赋初始值,总是与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,在其他类中无法将其实例化;
④构造方法是可以重载的。所谓重载,是指一个类中可以定义多个方法名相同,但是参数不同的方法。调用时,会根据不同的参数自动匹配对应的方法。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。