写点什么

Java 初始化和清理

作者:踏雪痕
  • 2022 年 8 月 03 日
  • 本文字数:1888 字

    阅读完需:约 6 分钟

Java 初始化和清理

C ++ 引入了构造器(constructor)的概念,它是在创建对象时被自动调用的特殊方法。


Java 也采用了构造器,并且还提供了一个垃圾收集器(garbage collector),当不再使用内存资源的时候,垃圾收集器会自动将其释放。


原生方法

想法是使用 new 运算符获取类的实例并使用类设置器设置值

import java.util.Arrays; class Person{    private String name;    private int age;     @Override    public String toString() {        return Arrays.asList(name, String.valueOf(age)).toString();    }     public void setName(String name) {        this.name = name;    }     public void setAge(int age) {        this.age = age;    }     // getters} // Initialize an object in Javaclass Main{    public static void main(String[] args)    {        Person person = new Person();        person.setName("John");        person.setAge(22);         System.out.println(person);    }}
复制代码


构造器保证初始化


在 Java 中,可以通过编写构造器来确保每个对象的初始化。但是这里有两个问题:


  1. 这个构造器使用的任何名字都有可能与类里某个成员相冲突;

  2. 编译器负责调用构造器,所以它必须始终知道应该调用哪个方法。


C++ 语言采用的方案就是将构造器和类的名字定义相同,Java 也采用了这个方案。


如下的例子:

import java.util.Arrays;

class Person {
private String name; private int age;

// 构造器 public Person(String name, int age) { this.name = name; this.age = age; }
public String toString() {
return Arrays.asList(name, String.valueOf(age)).toString(); }}
class SimpleConstructor { public static void main(String[] args) {
Person person = new Person("Yuzhou1su", 22); System.out.println(person); }}
复制代码


运行结果:

[Yuzhou1su, 22]
复制代码



无参构造器

没有参数的构造函数称为默认构造函数。默认构造函数的语法如下:

<class_name>(){}
复制代码


有参构造器

具有参数的构造函数称为参数化构造函数。问题: 为什么使用参数化构造函数?回答: 参数化构造函数用于为不同对象提供不同初始化的值。参数化构造函数的示例在这个例子中,我们创建了具有两个参数的 Student 类的构造函数。构造函数中柯有任意数量的参数。class Student4 {int id;String name;


Student4(int i, String n) {    id = i;    name = n;}
void display() { System.out.println(id + " " + name);}
public static void main(String args[]) { Student4 s1 = new Student4(111, "Karan"); Student4 s2 = new Student4(222, "Aryan"); s1.display(); s2.display();}
复制代码


构造器重载

复制构造器


复制构造函数是一种特殊构造函数,用于将新对象创建为现有对象的副本。它只需要一个参数,它将是同一类的另一个实例。我们可以使用 this() 语句从复制构造函数中显式调用另一个构造函数:

class Person{    private String name;    private int age;     // 构造器    public Person(String name, int age)    {        this.name = name;        this.age = age;    }     // 复制构造器    public Person(Person person) {        this(person.name, person.age);    }     public String toString() {        return Arrays.asList(name, String.valueOf(age)).toString();    }     // setters and getters 方法}
复制代码


匿名内部类

另一种初始化对象的方法是使用“双大括号初始化”。这将创建一个匿名内部类,其中只有一个实例初始化程序。强烈建议不要使用这种方法。


import java.util.Arrays; class Person{    private String name;    private int age;     @Override    public String toString() {        return Arrays.asList(name, String.valueOf(age)).toString();    }     public void setName(String name) {        this.name = name;    }     public void setAge(int age) {        this.age = age;    }     // getters} // Initialize an object in Javaclass Main{    public static void main(String[] args)    {        // Anonymous class        Person person = new Person() {{                // Initializer block                setName("John");                setAge(22);            }};         System.out.println(person);    }}
复制代码


构造函数与方法的区别

发布于: 刚刚阅读数: 3
用户头像

踏雪痕

关注

人只有跌入谷底,每一步都是往上走的 2020.03.30 加入

前 Java 开发程序媛,现在是集无才华和没颜值于一身的某事业单位项目助理。

评论

发布
暂无评论
Java 初始化和清理_Java_踏雪痕_InfoQ写作社区