前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >15-初始化和清理

15-初始化和清理

作者头像
Ywrby
发布2022-10-27 13:20:39
2420
发布2022-10-27 13:20:39
举报
文章被收录于专栏:Ywrby

初始化和清理

初始化和清理是涉及编程安全的两个重要问题,在C语言中一直采取由程序员直接控制变量的初始化和清理,极易导致内存耗尽等问题出现

C++和Java采用了构造器(构造方法)的概念来进行对象的创建,创建对象时,如果该类提供有构造方法,Java会在用户有能力操作对象前调用构造器,完成对类中每个对象的初始化

构造器与类同名的原因

  1. 调用构造器是编译器的任务,所以编译器必须清楚要调用哪个方法,这就要求所有类的构造器必须具有相同的方法名
  2. 所取的任何名字都可能与类中原有的方法名重复,产生冲突,为了避免这种情况,统一采用构造器与类同名这种方案

构造器没有返回值,这与返回值为空null(void)具有很大区别,构造器本质上不会返回任何东西,我们在创建对象时Object object=new Object();看似是构造方法返回了一个新对象,实质是new表达式返回了该对象的引用(虽然与该对象完全一致)。

因为有了构造器的存在,所以强制重载方法名就显得十分重要,这也是Java支持强制重载方法名的重要原因。区分重载方法的唯一规则是不同的参数列表(即便只是顺序不同),而返回值并不可以作为区分重载方法的规则,因为很多时候我们并不关心返回值,而是为了实现方法内的功能,这样就会出现这种单纯的调用func();这种情况下,Java便无法区分两个返回值不同的重载方法的区别了

我们为什么可以使用this关键字

在构造器或其他类方法中,我们常常通过this关键字来区分类中的变量或方法与传入的变量或方法。但我们在调用构造函数时,对象本身并不在参数列表中

代码语言:javascript
复制
Apple apple=new Apple(int num);
apple.pick(int n);

那么Java是如何区分对象的?实质上我们在调用构造函数后编译器会对上述调用语句进行修改,最终的结果是

代码语言:javascript
复制
Apple.pick(apple,n);

变量被作为第一个参数被默认传入方法中,这也就给了我们利用this关键字来区分对象的能力

在构造器中调用另一个构造器

当我们有多个不同参数列表的构造器后,在一个构造器中调用另一个构造器可以有效的避免代码重复,实现这种调用的方式就是通过this关键字

代码语言:javascript
复制
public class Test {

    private int num;
    private String name;
    private double weight;

    public Test(int num){
        this.num=num;
        System.out.println("this is the default constructor");
    }

    public Test(int num, String name, double weight) {
        this(num);
        this.name = name;
        this.weight = weight;
        System.out.println("this is the rewrite constructor");
    }

    public static void main(String[] args) {
        Test test=new Test(5,"Leslie",90.0);
        System.out.println("name="+test.name+",num="+test.num+",weight="+test.weight);
    }
}
代码语言:javascript
复制
this is the default constructor
this is the rewrite constructor
name=Leslie,num=5,weight=90.0

除构造器外,编译器禁止在其他任何方法中调用构造器

static方法

静态方法就是没有this的方法,在static内部不能调用非静态的方法,反之可以。静态方法可以在没有创建对象的情况下,直接通过类本身来调用,这恰恰是静态方法的主要作用。这使得static方法更类似于一个全局变量,当你在类中置入static方法就可以访问其他static方法或static域

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化和清理
    • 构造器与类同名的原因
      • 我们为什么可以使用this关键字
        • 在构造器中调用另一个构造器
          • static方法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档