Java基础知识学习:类与构造器

目录,更新ing,学习Java的点滴记录

  目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录

类和对象的概念

  1. 类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。
  2. 类:我们叫做 class。对象:我们叫做 Object instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。
  3. 总结
     类可以看成一类对象的模板,对象可以看成该类的一个具体实例
     类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法

类的定义_属性和方法

  1. 属性(成员变量)
    属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其初始化,Java 使用默认的值对其初始化
    在这里插入图片描述 属性定义格式:
      在这里插入图片描述
  2. 方法
    方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个 函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
     方法定义格式:
      在这里插入图片描述
  3. 定义几个类
    在这里插入图片描述
     上面的类定义好后,没有任何的其他信息,就跟我们拿到一张张图纸,但是纸上没有任何信息,这是一个空类,没有任何实际意义。所以,我们需要定义类的具体信息。对于一个类来说,一般有三种常见的成员:属性 field、方法 method、构造器 constructor。这三种成员都可以定义零个或多个
  4. 完善学生类
    在这里插入图片描述

初始化和清理

  1. 随着计算机革命的发展,"不安全"的编程方式已经逐渐成为了编程代价高昂的主要原因
  2. 初始化和清理正是涉及安全的两个问题.许多C程序的错误都源于程序员忘记初始化变量.特别是在使用程序库时,如果用户不知道如何初始化库的构件.同时清理也是一个特殊问题,当使用完一个元素后,它对你就没有什么影响了,所以很容易将它忘记.这样一来,这个元素占用的资源就会一直得不到释放,结果是资源(尤其是内存)用尽
  3. 关于初始化和清理,在后面主要涉及到构造器和垃圾回收器的介绍.构造器是一个在创建对象时被自动调用的特殊方法,Java中也采用了构造器.垃圾回收器对于不再使用的内存资源,垃圾回收器能自动将其释放

构造器(构造方法constructor)

  1. 在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行.
  2. 关于构造器的名称
     有两个问题:第一,所取的任何名字都有可能与类的某个成员名称相冲突;第二,调用构造器时编译器的责任,所以必须让编译器知道应该调用哪个方法.C++语言中采用的解决方案看起来最简单且符合逻辑,所以在Java中也采用了这种方案:即构造器采用与类相同的名称.由于这点,"每个方法首字母小写"的编码风格并不适用与构造器.
  3. 构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java 通过new 关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。
  4. 不接受任何参数的构造器叫做默认构造器,Java文档中通常使用的术语为无参构造器.
  5. 格式:
    在这里插入图片描述
  6. 构造器要点
     构造器通过 new 关键字调用
     构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用 return 返回某个值
     如果我们没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已定义则编译器不会自动添加.
     构造器的方法名必须和类名一致
  7. 注意点:
     对象的创建不完全是由构造方法实现的,构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的.创建一个对象分为如下四步:1. 分配对象空间,并将对象成员变量初始化为0 或空 2. 执行属性值的显式初始化 3. 执行构造方法 4.返回对象的地址给相关的变量
  8. 扩展:Java创建对象的几种方式
    在这里插入图片描述

构造方法的重载

  1. 构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载
    在这里插入图片描述
  2. 如果构造方法中的形参名和属性(成员变量)相同时,需要使用this关键字区分属性与形参,如上图中this.id指的是类中的属性id,而等号右侧的id是构造器形参中的id

this关键字

  1. 引入一个示例代码
    在这里插入图片描述
  2. 在上图代码中同一个Student类型有两个对象s1,s2,但是只有一个peel方法,该方法时如何知道是被s1还是被s2调用的呢?
     为了能用简便,面向对象的语法来编写代码–即"发送消息给对象",编译器其实做了一些幕后工作.它暗自里吧"所操作对象的引用"作为第一个参数传递给peel(),所以上述两个方法的调用就变成了:
    在这里插入图片描述
     这是内部的表示形式,我们并不能这样书写代码,并试图通过编译,但这种写法确实能帮助我们理解实际调用中的过程
    问题来了:如果想要在方法内部获得对当前对象的引用.由于这个引用是由编译器"偷偷"传入的,所以没有标识符可以用.但是,为此有个专门的关键字:this.
  3. this关键字只能在方法内部使用,表示对"调用方法的那个对象"的引用.this用法和其他对象引用并没有什么太大不同.需要注意的是,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可.比如:
    在这里插入图片描述 实际上在peel方法内部,可以写this.test();但是没必要,编译器会自动为你添加.
  4. 一般只有当需要明确指出对当前对象的引用的时候,才需要使用this关键字.下面给个示例:
    在这里插入图片描述
     由于increment方法通过this关键字返回了对当前对象的引用,所以很容易在一条语句中对同一个对象执行多次操作.
  5. 总结
     在程序中产生二义性之处,应使用 this 来指明当前对象;普通方法中,this 总是指向调用该方法的对象。构造方法中,this 总是指向正要初始化的对象。
     使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
     this 不能用于 static 方法中。

猜你喜欢

转载自blog.csdn.net/qq_41649001/article/details/106609143