java基础 --- 构造器

简介: java基础 --- 构造器

1. 什么是构造器

1.1 构造器的概念

构造器通常也叫构造方法或者构造函数。

简单点说,就是C++中的构造函数,但是在java中是没有析构函数的,java提供了垃圾回收器,对于不再使用的资源会自动释放,这点比C++简单。那我们来重新梳理下构造函数需要care的点。

1.2 构造器的作用

构造器是用来初始化成员属性和成员方法的,在创建对象的时候会被自动调用。

2. 构造方法和实例方法的区别

构造方法和实例方法主要区别于三个方面:修饰符、返回值、命名

  • 修饰符

                 和实例方法一样,构造器可以有任何访问的修饰符,public、private、protected、或者default,都可以对构造方法进行修饰。不同于实例方法的是,构造器不能有任何非访问性质的修饰符,如:                           static、final、synchronized、abstract等都不能修饰构造方法。

  • 返回值

                实例方法可以返回任何类型的值或者无返回值(void),而构造方法是没有返回类型的,void也不行

来个示例看下:

1. public class VoidConstructor {
2. 
3.     VoidConstructor(){
4. // 构造器
5.     }
6. 
7. void VoidConstructor() {
8. // void 方法,不是构造器
9.     }
10. }

3. 构造器的特点

  • 构造器必须与类同名【若同一个源文件中有多个类,则构造器必须与公共类同名】
  • 构造器支持重载
  • 构造器没有返回值,没有返回类型
  • 若不添加构造器,编译器会默认提供空的构造器

4. 构造函数的继承

1.子类中无构造函数,可直接继承父类中无参构造函数,前提是左右变量均为public

如下:父类Student中有空构造函数Student(),子类Pupil中有空构造函数Pupil(),后者会继承前者。

注:在本例中,父类中的name、height都是public的,如果是private就无法直接继承。

1. package javastudy;
2. 
3. public class ConfunDemo5 {
4. 
5. public static void main(String[] args) {
6.         Pupil z=new Pupil();
7.         z.show();
8.     }
9. }
10. class Student{                   //父类Student
11. public String name;
12. public int height;
13. public Student()
14.     {
15. this.name="";
16. this.height=0;
17.     }
18. }
19. class Pupil extends Student{      //子类Pupil
20. private int score;
21. public Pupil(){                //无参构造函数Pupil()直接继承了父类中的无参构造函数Student()
22.         score=0;
23.     }
24. public void show(){
25.         System.out.print("姓名:"+name+"\n身高:"+height+"\n分数:"+score);
26.     }
27. }

输出:

姓名:

身高:0

分数:0

2、子类中无参构造函数继承父类中无参构造函数时,父类参数是private的,无法直接

需要在父类中使用get方法来调用私有变量值。

1. package javastudy;
2. 
3. public class ConfunDemo5 {
4. 
5. public static void main(String[] args) {
6.         Pupil z=new Pupil();
7.         z.show();
8.     }
9. }
10. class Student{                //父类Student
11. private String name;
12. private int height;
13. public Student()
14.     {
15. this.name="";
16. this.height=0;
17.     }
18. public String getName(){
19. return name;
20.     }
21. public int getHeight(){
22. return height;
23.     }
24. }
25. class Pupil extends Student{    //子类Pupil
26. private int score;
27. public Pupil(){                //无参构造函数Pupil()直接继承了父类中的无参构造函数Student(),但是父类中的name、height是private的
28.         score=0;
29.     }
30. public void show(){
31.         System.out.print("姓名:"+getName()+"\n身高:"+getHeight()+"\n分数:"+score);  //输出时,直接用get方法名。
32.     }
33. }

3、使用super调用父类的构造函数

super必须写在方法的首行

1. package javastudy;
2. 
3. public class ConfunDemo5 {
4. 
5.     public static void main(String[] args) {
6.         Pupil z=new Pupil("隔壁老王",111,222);
7.         z.show();
8. 
9.         Pupil w=new Pupil();
10.         w.show();
11.     }
12. }
13. class Student{                //父类Student
14.     public String name;
15.     public int height;
16.     public Student()
17.     {
18.         this.name="";
19.         this.height=0;
20.     }
21.     public Student(String n,int m)
22.     {
23.         name=n;
24.         height=m;
25.     }
26. }
27. class Pupil extends Student{    //子类Pupil
28.     private int score;
29.     public Pupil(){                
30. super("孙悟空2",501);    //使用super调用父类Student(String n,int m)方法,同时传递实际数值。super必须写在方法的首行。如果这里写super(),则调用的是父类中的Student()方法。
31.         score=0;
32.     }
33.     public Pupil(String x,int y,int z){        //
34. super(x,y);              //使用super调用父类Student(String n,int m)方法,其中super中的参数名称必须与构造函数中的参数名称一致。
35.         score=z;
36.     }
37.     public void show(){
38.         System.out.println("姓名:"+name+"\n身高:"+height+"\n分数:"+score);
39.     }
40. }

输出:

姓名:隔壁老王

身高:111

分数:222

姓名:孙悟空2

身高:501

分数:0

 

参考链接:

https://blog.csdn.net/qq_41620160/article/details/79443524

https://www.cnblogs.com/ibelieve618/p/6365631.html

https://baijiahao.baidu.com/s?id=1660565391219190318&wfr=spider&for=pc

相关文章
|
6月前
|
Java
【反射】Java反射机制 -- 常用构造器与方法
【反射】Java反射机制 -- 常用构造器与方法
62 0
|
6月前
|
设计模式 算法 Java
【设计模式】JAVA Design Patterns——Builder(构造器模式)
【设计模式】JAVA Design Patterns——Builder(构造器模式)
|
2月前
|
Oracle Java 关系型数据库
【颠覆性升级】JDK 22:超级构造器与区域锁,重塑Java编程的两大基石!
【9月更文挑战第6天】JDK 22的发布标志着Java编程语言在性能和灵活性方面迈出了重要的一步。超级构造器和区域锁这两大基石的引入,不仅简化了代码设计,提高了开发效率,还优化了垃圾收集器的性能,降低了应用延迟。这些改进不仅展示了Oracle在Java生态系统中的持续改进和创新精神,也为广大Java开发者提供了更多的可能性和便利。我们有理由相信,在未来的Java编程中,这些新特性将发挥越来越重要的作用,推动Java技术不断向前发展。
|
5月前
|
安全 NoSQL Java
探索Java Optional类:构造器、成员变量与方法
探索Java Optional类:构造器、成员变量与方法
|
6月前
|
Java
【JAVA学习之路 | 进阶篇】方法引用与构造器引用
【JAVA学习之路 | 进阶篇】方法引用与构造器引用
|
6月前
|
Java
【JAVA学习之路 | 基础篇】Java构造器(构造方法)
【JAVA学习之路 | 基础篇】Java构造器(构造方法)
|
11月前
lombok在生成的构造器、方法及参数上生成注解
lombok在生成的构造器、方法及参数上生成注解
132 0
|
Java 编译器
Java构造方法(构造器)
1.什么是构造方法? 2.构造方法的使用
87 0
|
Java
java8新特性:方法引用与构造器引用
java8新特性:方法引用与构造器引用
69 0
|
6月前
|
Java
Java提供了四种访问修饰符来控制类、变量、方法和构造器的访问级别
Java提供了四种访问修饰符来控制类、变量、方法和构造器的访问级别
61 1