JAVA面向对象之构造方法

简介:

一、构造方法

在上一篇博客《JAVA面向对象之对象和类》中用到了Box box = new Box();语句来创建一个对象,new可以理解成创建一个对象的关键字,通过new关键字为对象分配内存,初始化实例变量,并调用构造方法。Box()在形式上和调用方法的形式相同,这个Box()就是一个特殊的方法叫构造方法。但是我们在代码中并没有看到这个方法的定义,是因为在没有定义构造方法的时候,JAVA会隐式的创建一个无参的默认构造方法,构造方法有以下特征:

  • 具有和类相同的名称。
  • 不含有返回值
  • 不能在方法中使用return返回一个值。

在一个类中具有上述特征的方法就是构造方法。构造方法在程序设计中是非常重要的,它可以为类的成员变量进行初始化工作,当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,可以在这个方法中完成对象的初始化工作。

需要注意的是,在构造方法里不含返回值的概念不同于void,依然以Box类为例,public Box(){}是构造方法,如果写成public void Box(){};就不是构造方法了。这是初学者经常犯的错误。

构造方法分为两类,一类是当程序没有定义构造方法时,系统自己生成的默认的构造方法,这个默认的构造方法没有参数,方法体中也没有任何代码,即什么也不做,但是会对类成员变量进行默认的初始化。默认初始化值见下表:

成员变量类型 初始值
byte、short、int、long 0
float 0.0f
double 0.0d
char '\u0000'
boolean false
all reference type null
另一类是程序自己定义的构造方法,可以根据自己的要求对类成员变量进行初始化,也叫做参数化构造方法。注意:一旦程序自己定义了构造方法,系统就不会创建默认的构造方法了。

二、this关键字

this表示当前对象,如果说一个类中的成员方法可以直接调用同类中的其他成员,这时就可以使用this关键字来指定当前类,比如我们可以在Box类中增加一个构造方法并使用this关键字为成员变量赋值。

public class Box 
{
   private double length;
   private double width;
   private double height;
   
   /**
    * 构造方法
	**/
   public Box(double length, double width, double height)
   {
      this.length = length;
      this.width = width;
      this.height = height;
   }
   
   public void setLength(double length)
   {
      this.length = length;
   }
   
   public void setWidth(double width)
   {
      this.width = width;
   }
   
   public void setHeight(double height)
   {
      this.height = height;
   }
   
   public double getLength()
   {
	   return length;
   }
   
   public double getWidth()
   {
	   return width;
   }
   
   public double getHeight()
   {
	   return height;
   }
   
   public double getV()
   {
      return length * width * height;
   }
}

this关键字的用法总结如下:

  • 访问当前对象的数据成员。
  • 访问当前对象的成员方法。

当有方法重载的构造方法时,用来引用同一个类的其他构造方法。

三、对象的生命周期

类定义之后,只是产生了对事物的描述,并没有生成事物的实例。所以必须对类进行实例化,来生成客观事物的内存映像,这就是对象的创建。对象创建之后必定要显示它的一些特征和表现一些行为,这就是对象的使用。当对象不再使用时(没有任何引用变量指向它时),对象就变成了垃圾,这就是对象的消亡。

1、垃圾回收

当程序的某个部件完成使命后,程序员往往弃之不顾,这是很危险的,这些垃圾会占用系统资源,造成内存泄漏等,所以清理垃圾是必要的。JAVA提供了一套垃圾回收机制来避免程序员忽略垃圾的处理,自动帮我们完成垃圾的清理工作。但是,垃圾回收器的启用不由程序员控制,也无规律可循,并不会一产生垃圾,他就会被唤起,甚至可能到程序终止,它都没有启动的机会。在编程过程中,我们还是要养成良好的编程规范,避免不必要的麻烦。

2、System.gc作用

因为Java垃圾回收的偶然性,如果在一个对象成为垃圾时需要马上释放,或者程序在某时间内产生大量垃圾时,希望人工干预垃圾回收,这时候我们可以使用System.gc();来强制启动垃圾回收器回收垃圾。


目录
相关文章
|
1天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
7 2
|
16天前
|
设计模式 Java 测试技术
Java零基础-构造方法详解
【10月更文挑战第5天】Java零基础教学篇,手把手实践教学!
10 1
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
25天前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
39 1
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
30 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
2月前
|
Java API
java调用构造方法
java调用构造方法
35 3
|
19天前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
11 0
|
25天前
|
Java
java构造方法的两种传值调用对实参的影响
java构造方法的两种传值调用对实参的影响
26 0
|
26天前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
22 0