Java构造器(构造方法)详解
什么是构造器

构造器通常也叫构造方法、构造函数,构造器在每个项目中几乎无处不在。当你new一个对象时,就会调用构造器。构造器格式如下:
[修饰符,比如public] 类名 (参数列表,可以没有参数){ //这里不能有return}

文章目录

  • Java构造器(构造方法)详解
    Java构造器
    怎么定义构造器
    构造器的使用
    构造器的继承
    构造器、静态代码块、构造代码块的执行顺序,详见下文实例
    实例
    1.默认构造器
    2.禁止对象被外部创建
    3.构造器重载
    4.构造器的继承
    5.构造器、静态代码块、构造代码块的执行顺序
    5.1无继承的情况
    5.2有继承的情况
    Java构造器

构造器的注意事项:
构造器的名称必须和类名一致
一个类中可以定义多个构造器,但是构造器的参数列表必须不同(重载)
如果我们没有手动定义构造器,则Java系统会提供一个默认的构造器给我们使用,一旦我们定义了构造器,则系统会把默认的构造器收回
构造器的作用:实例化对象,给对象赋初始值
代码游离块优先执行

怎么定义构造器
构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载

public 构造方法名(参数){...
}/*注意:1.构造方法没有返回值类型2.构造方法名必须和该类的类名保持一致,大小写都一样

例子:

   class Fu{public Fu(){} //无参的公有构造方法public Fu(int i){} //参数类型为int的公有构造方法......}public class Demo extends Fu{public Demo(){} //无参的公有构造方法public Demo(int i){} //参数类型为int的公有构造方法public Demo(int i,double d){} //参数类型为int和double的公有构造方法...}

构造器的使用
Java中构造方法的使用有两个地方,一个是跟在关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参,另外一个是跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参,下面进行举例。

例1:

Demo demo = new Demo(); //这里是调用的是一个无参的构造方法,必须声明在方法中,最好声明在主方法

上面构造方法的参数根据实际添加实参,Jvm根据构造方法的参数不同加载不同的构造方法

例2:

public Demo(){this(2); //这里调用参数为int类型的本类的构造方法}

例3:

public Demo(){super(1); //调用参数为int类型的父类的构造方法} 

注意:例2和例3中this或super调用构造方法只能出现在构造方法中,而且必须出现在第一行,所以一个构造方法中第一行只能为this或super调用构造方法,两者不能同时调用构造方法出现,而且注意this或super调用构造方法时,要留构造方法出口,意思就是最后调用的构造方法中没有再调用别的构造方法!

构造器的继承
子类构造器会默认调用父类无参构造器,如果父类没有无参构造器,则必须在子类构造器的第一行通过 super关键字指定调用父类的哪个构造器,具体看下文例子。final类是不允许被继承的,编译器会报错。很好理解,由于final修饰符指的是不允许被修改,而继承中,子类是可以修改父类的,这里就产生冲突了,所以final类是不允许被继承的。

构造器、静态代码块、构造代码块的执行顺序,详见下文实例

  • 无继承的情况下的执行顺序静态代码块:只在程序启动后执行一次,优先级最高构造代码块:任何一个构造器被调用的时候,都会先执行构造代码块,优先级低于静态代码块构造器:优先级低于构造代码块总结一下优先级:静态代码块 > 构造代码块 > 构造器
  • 有继承的情况下的执行顺序:父类静态代码块:只在程序启动后执行一次,优先级最高 子类静态代码块:只在程序启动后执行一次,优先级低于父类静态代码块 父类构造代码块:父类任何一个构造器被调用的时候,都会执行一次,优先级低于子类静态代码块父类构造器:优先级低于父类构造代码子类构造代码块:子类任何一个构造器被调用的时候,都会执行一次,优先级低于父类构造器子类构造器:优先级低于子类构造代码块总结一下优先级:父类静态代码块 > 子类静态代码块 > 父类构造代码块 > 父类构造器 > 子类构造代码块 > 子类构造器
    实例
    1.默认构造器
    新建一个类,不提供任何构造器,编译器会默认提供一个无参构造器,这就是为什么没定义任何构造器,却可以new 某个对象()
public class People {}
//以上这个People类就可以直接通过new People()来实例化

2.禁止对象被外部创建
如果不希望People在外部通过new People()来实例化,只需要将构造器定义为private

public class People{private People(){}
}

3.构造器重载
重载可以简单理解为:同个方法名,不同的参数列表。如果希望People能在外部通过new People() 或 new People(“字符串”) 来实例化,则通过以下代码即可

public class People{//通过new People()调用public People(){}//通过new People("字符串")调用public People(String str){}}

4.构造器的继承
定义父类构造器,由于该构造器自定义了一个带参构造器,覆盖了默认的无参构造器,所以不能直接 new Father() 调用了,除非再定义一个无参构造器

//父类构造器
public class Father{//自定义带参构造器public Father(String str){System.out.println("父类的带参构造方法,参数为:"+str);}}

定义子类构造器,继承Father,由于Father没有无参构造器,所以必须在子类构造器中通过 super(“字符串”)来调用,否则编译器会报错

//子类构造器
public class Son extends Father{//无参构造器public Son(){//由于Father()没有无参构造器,所以必须在子类型构造器中通过super("字符串")来调用,否则编译器会报错。//如果没定义这句,系统会默认调用super()super("");}//带参构造器public Son(String str){//由于Father()没有无参构造器,所以必须在子类型构造器中通过super("字符串")来调用,否则编译器会报错。//如果没定义这句,系统会默认调用super()super(str);      }  }

5.构造器、静态代码块、构造代码块的执行顺序
5.1无继承的情况

public class Father {static {System.out.println("父类的静态代码块,程序启动后执行,只会执行一次");}//父类无参构造方法public Father(){System.out.println("父类的默认构造方法");}//重载,自定义父类带参构造方法public Father(String str){System.out.println("父类的带参构造方法,参数为:"+str);}{System.out.println("父类构造代码块,每次调用构造方法都会执行的");}
}

实例化Father

//实例化Fatherpublic static void main(String[] args) {System.out.println("---------------------------------------");Father father1 = new Father();System.out.println("---------------------------------------");Father father2 = new Father("阿马");}

执行上述代码

父类的静态代码块,程序启动后执行,只会执行一次
---------------------------------------
父类构造代码块,每次调用构造方法都会执行的
父类的默认构造方法
---------------------------------------
父类构造代码块,每次调用构造方法都会执行的
父类的带参构造方法,参数为:阿马

5.2有继承的情况
定义父类Father

public class Father {static {System.out.println("父类的静态代码块,程序启动后执行,只会执行一次");}//父类无参构造方法public Father(){System.out.println("父类的默认构造方法");}//重载,自定义父类带参构造方法public Father(String str){System.out.println("父类的带参构造方法,参数为:"+str);}{System.out.println("父类构造代码块,每次调用构造方法都会执行的");}
}

定义子类Son,继承自父类Father

//子类构造器
public class Son extends Father{static {System.out.println("子类的静态代码块,程序启动后执行,只会执行一次,先执行父类的,在执行子类的");}{System.out.println("子类构造代码块,每次调用构造方法都会执行的");}//无参构造器public Son(){//这里没有指定调用父类的哪个构造方法,会默认调用super(),调用父类的无参构造器public Father()}//重载构造器,多传两个参数public Son(String str1,String str2){//必须写在构造器第一行,调用父类的带参构造器public Father(str)super(str1);System.out.println("子类带参构造器:"+str2);}
}

实例化Son

public static void main(String[] args) {System.out.println("-----------------------------------");Son son1 = new Son();System.out.println("-----------------------------------");Son son2 = new Son("子类第一个参数","子类第二个参数");}

执行上述代码

父类的静态代码块,程序启动后执行,只会执行一次
子类的静态代码块,程序启动后执行,只会执行一次,先执行父类的,在执行子类的
-----------------------------------
父类构造代码块,每次调用构造方法都会执行的
父类的默认构造方法
子类构造代码块,每次调用构造方法都会执行的
-----------------------------------
父类构造代码块,每次调用构造方法都会执行的
父类的带参构造方法,参数为:子类第一个参数
子类构造代码块,每次调用构造方法都会执行的
子类带参构造器:子类第二个参数

版权声明:本文为CSDN博主「齐天大荒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_47897078/article/details/120243801

Java构造器(构造方法)相关推荐

  1. java 构造器 构造方法_Java构造器(构造方法/constructor)

    我们先来看一下什么是构造器: 1.构造器也叫构造方法或构造函数,分为有参构造器和无参构造器: 2.构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用: 3.构造器最大的作用就是在创 ...

  2. java构造器构造方法_Java构造器(构造方法/constructor)

    我们先来看一下什么是构造器: 1.构造器也叫构造方法或构造函数,分为有参构造器和无参构造器: 2.构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用: 3.构造器最大的作用就是在创 ...

  3. Java构造器(构造方法)详解

    Java构造器(构造方法)详解 什么是构造器 构造器通常也叫构造方法.构造函数,构造器在每个项目中几乎无处不在.当你new一个对象时,就会调用构造器.构造器格式如下: [修饰符,比如public] 类 ...

  4. java构造器 权限_一文搞懂Java的 构造方法 和 访问权限

    目录 零.前言 Java是一门当今最火的编程语言之一,拥有很多现成可用的库,在我们编程生涯中,有着无比重要的地位. Java中有个概念叫做访问权限.它们是什么呢?今天我来详细讲解. 本文所有代码已经上 ...

  5. java中构造方法和方法全面解析

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

  6. java构造器_Java构造器就是这么简单!

    前言 理解构造器之前,首先我们需要了解Java中为什么要引入构造器,以及构造器的作用. 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(const ...

  7. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

  8. 如何从基础到深入了解java构造器

    java中构造方法是一个重要的概念,初学时有人会对此构造方法的使用特别是其作用不清楚,下面我就来谈谈我对java中构造方法的理解,有不对或不清楚的地方希望各位看官提出意见,谢谢! 一.构造方法的定义声 ...

  9. MyBatis-Plus_实体作为条件构造器构造方法的参数

    查询专栏:MP默认查询原则 查询的是数据库列名非实体类属性. 实体作为条件构造器构造方法的参数 文章目录 /*** 1.传递的参数如果是实体类* <p>* 注:这种情况传递过来的参数是等值 ...

最新文章

  1. CSS之布局(盒子模型—边框)
  2. python播放音频及playsound模块解除占用的3种方法
  3. QScintilla
  4. 网页播放rtsp视频流
  5. 通过FFMPEG代码学习函数指针和指针函数
  6. Java黑皮书课后题第4章:*4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数。如果月份非法则显示出错信息
  7. 不同组合方式有四种纸币java_拼凑钱币丶Java教程网-IT开发者们的技术天堂
  8. php去掉多字节字符,PHP 面试题 - 如果没有 mb 系列函数,如何切割多字节字符串...
  9. php protected const,关于const:PHP类常量 – 公共,私有还是受保护?
  10. 使用Topshelf管理Windows服务
  11. UVA485 Pascal‘s Triangle of Death【大数】
  12. java showtype_GitHub - kedarui/showapi_sdk_java: showapi_sdk_java
  13. 凸优化非系统学习之笔记5:内点法
  14. 阿里云datav看板然后设置密码
  15. kubectl管理多个集群配置
  16. win10进不了BIOS界面
  17. 随笔记:PPT渐变色
  18. endl 和 \n 的区别
  19. 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
  20. lect01_codes03_eg梯度下降

热门文章

  1. PS CC 2015 GIF动画制作 和 导出方法,图像序列
  2. python炫酷烟花表白源代码,用python画烟花的代码
  3. python成语填空_Python每日一练(4)-成语填填乐
  4. 【Mysql 存储过程 Or 存储函数 傻傻分不清? 】
  5. html5做出九个格子效果图,将图片按9宫格等分的简单批处理脚本
  6. 金思维仪器设备管理系统
  7. 戴尔t430服务器性能,不止双路E5 这款塔式服务器有点强
  8. 中国地图原来这么简单就可以写出来了
  9. html表格边框线合并6,CSS表格 合并表格边框
  10. laravel清理缓存(config:clear)后导致程序崩溃