Java对象和构造方法

26 篇文章 0 订阅

Java对象概念的理解

编程思想中有一句话万物皆对象,对于Java来说,就是把数据和对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出他们的共性,形成——类。

在面对对象的编程方式里,对象有属性有方法,例如dog类cat类,都有年龄、名字等属性,dog会吃狗粮,cat会吃猫粮,吃东西就是方法。对象不是孤立的,是有父子关系的。例如有一个父类pet,dog、cat共同的属性方法都可以在父类pet中定义,如年龄、名字、吃(这个动作)在父类中定义,子类继承后就可以使用了。

以下为转载内容,在此作为笔记复习,原博客地址:
Java之构造器和构造方法的使用和意义

构造方法

定义声明

构造方法的名字必须和类名相同,没有返回值,但不能声明void,访问权限可以任意,但一般为public权限,构造方法中的参数可以自行定义,参数不同的构造方法就是重载。

注意,如果类中什么都不写,则会有默认的一个无参构造,只要写了任意一个构造方法都会把默认的构造覆盖,想用无参构造得需要自己创建。

例子:

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的公有构造方法
     ...
   }

构造方法的使用:

一个是跟在关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参,另外一个是跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参

1:
 Demo demo = new Demo(); //这里是调用的是一个无参的构造方法,必须声明在方法中,最好声明在主方法上面构造方法的参数根据实际添加实参,jvm根据构造方法的参数不同加载不同的构造方法;2public Demo(){
   this(2); //这里调用参数为int类型的本类的构造方法
 }3public Demo(){
   super(1); //调用参数为int类型的父类的构造方法
 }

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

构造方法的作用

  • 为了初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的

  • 通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态(参数签名:参数的类型,参数个数和参数顺序)

  • 创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类中的成员属性;

    java中new出来的对象叫做实例,说白了就是这个new出来的“东西”,叫它对象也可以,叫它实例也可以,对象和实例在这个角度上来讲是等价的。

构造方法进阶思想:

我总是要把构造器和方法混淆,后来发现,

方法,实际上,是需要用于执行java代码的,而构造器,

构造器,,,是一个类的实例!!

为什么呢?

类的实例,我们需要用类来创建对象,进而访问其属性,因为实例是需要被用来调用的,但是调用的话,我们不得不去考虑一个问题,就是对象,最终是被存储在内存里面的,而存储的时候,我们的内存不得不需要给他再另外开辟新的内存空间,那么,java是如何给这种我们所需要的类来开辟内存空间的呢?这就涉及到了java的内存机制,就是说,我们必须要给这个类制作一个构造器,而且这个构造器的名称必须和这个类的名称是一致的,这样,我们的java编译器才能识别这个类,进而给这个类在内存中开辟内存空间,也就是我们所说的,我们手动,人为的给他进行“初始化”,事例如下:

	class Rock {

    Rock() {

      System.out.print("Rock");

    }

  }

这样,当我们在对Rock类进行调用的时候,我们的java编译器就会事先对他进行“自动”地初始化,开辟内存空间

那么现在问题又来了,举个例子,我们的Rock()方法需要带有一个参数,形参,但是整个代码中,需要不仅仅是带有形参的Rock();还需要不带形参的Rock(),在我们的构造器对类进行构造的时候,需要将功能类似的,但形参不同的方法同时打包在该类下,以便在我们调用某个方法的时候,直接重载构造器中的该方法,可以说,这种构造形式,满足了我们对功能类似,形参不同的方法,调用的时候,进行重载,而满足了编译器自动初始化,人不需要手动初始化的需求。

而且有个问题,本来两个方法,功能上是类似的,一棵树和一株树苗,你非得要给他们起不同的名字,多别扭,好在有了构造器,能够使能相似的方法起相同的名字,不同的参数,而能够在被调用的时候得以重载,多么牛逼的构造器啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值