「Java」通俗易懂地告诉你java语言为什么这么设计“构造方法”


「Java」通俗易懂地告诉你java语言为什么这么设计“构造方法”
文章图片

花10分钟认真的看完一篇文章或许会有意想不到的收获!

每一本讲java的教材都会有一部分内容是讲“java构造方法”的并且我们在实际的编码中也离不开“java构造方法” , 为什么“java构造方法”这么重要?
今天我们就来对“java构造方法”一探究竟
01定义废话少说先看定义!
构造方法是类的一种特殊方法 , 用来初始化类的一个新的对象 , 在创建对象(new 运算符)之后自动调用 。 Java 中的每个类都有一个默认的构造方法 , 并且可以有一个以上的构造方法 。
Java 构造方法有以下特点:
  • 方法名必须与类名相同
  • 可以有 0 个、1 个或多个参数
  • 没有任何返回值 , 连 void也不能有
  • 默认返回类型就是对象类型本身
  • 只能与 new 运算符结合使用
  • 如果不去自定义构造方法 , 每个类都有默认的无参构造方法
  • 如果自定义构造方法了 , 那么默认的构造方法会失效 , 实例化对象的时候 , 必须用自定义的构造方法实例化对象
针对构造方法特点的最后两点 , 我用代码演示一下 , 让大家更明白些 。
通过代码可以发现 , 如果我们自定义了一个带有“i”参数的构造方法 , 那么我们实例化对象的时候就不能使用无参构造了 , 因为你自定义构造参数后 , 默认的无参构造就不生效了 。 同时你必须使用自定义的构造方法 。

可能有点啰嗦了 , 其实我这里就想说一点
java无论如何都会调用构造方法去初始化对象中的变量 , 或是通过默认的构造方法 , 或是通过自定义的构造方法
02深入那么为什么 , java无论如何都要通过构造方法去初始化对象中的变量?初始化变量这件事情这么重要吗?

嗯!初始化变量真的很重要!
计算机的存储单元是一个硬件 , 只要通电了 , 里面就会有“0”和“1” , 或是全“0” , 或是全“1” , 或者是“0”和“1”都有 。 那么有了“0”和“1”就一定会有数据 。

作为程序员我们在声明一个变量并不去初始化的时候 , 这个变量里面其实是有值的 , 因为当我们声明一个变量的时候就分配了一段内存空间 , 这个空间或许之前就被其他变量使用过 , 里面存的是我们不知道的一个值 , 或许没有被任何变量使用过 , 存的是系统的一个“填充值” , 反正里面一定有一个我们不知道的值 。
所以 , 我们如果不初始化这个变量直接放到程序中去运行 , 这是非常危险的 , 会出现意想不到的错误 。
03java为什么这么做初始化变量其实就是给变量赋值 , 把原来那么不确定的值给覆盖掉 , 换成一个系统规定的值 , 比如java中String初始化之后就是“null” 。
在c语言中是没有自带的构造方法的 , 所以许多c程序的错误都源于程序员忘记初始化变量 。
java为了避免程序员忘记初始化这个问题 , 在语言层面强制要求初始化 , 这样就使得程序安全了许多 。
还有一个问题就是为什么构造方法是和类名同名的?
  1. 给构造方法命名任何的名字都可能与类的某个成员名称冲突
  2. 调用构造器是编译器的责任 , 所以必须让编译器知道改调用哪个方法 。
c++中就引入了构造器的概念呢 , 并且c++采用的逻辑就是和类名同名 , 这种方法看起来最简单且更符合逻辑 , 所以java就沿用了这种方法 。

尽我所能将一些编程知识用最通俗易懂的方式分享给你


推荐阅读