2019零基础学Android第5课——Java构造器的理解

今天我们来梳理下Java构造器,有地方也称呼为构造方法。

有的人可能会说,构造器不就是new个对象用么?这个有什么好研究的呢?等看完本篇对于构造方法的阐述,我们再回头认识下构造方法。

最常见的崩溃—空指针

新手写代码时候,经常会出现类似这样的一种崩溃,作为新手以后看到这种问题,首先要淡定,因为这种类型的崩溃是最好解决的问题之一。

 

 

为什么会出现java.lang.NullPointerException呢?

这里就要说下引用和对象的概念:

对于java 内存分配不了解的同学,可以看前面 2019零基础学Android第3课——Java存储和基本数据类型

// 这个s是个引用,他还没有指向任何一个对象。
//  引用是存储在栈里面
String s ;
​
// 这个s引用已经关联了一个新生成的对象,栈里面的引用指向堆里的对象。
String s = new String("test");

出现java.lang.NullPointerException 的原因在于你没有为引用关联到一个具体的对象,说白了他是空的。对一个空的引用直接调用方法就会导致空指针。

那么怎么去关联到一个对象?

就是我们今天说的构造方法,我们用 new 关键字调用构造方法,获得实例对象。

 

构造方法

首先系统会默认给我们构造一个无参的构造方法,如下:

class Dog{
  // 系统会默认给我们构造,无需显示去写
  public Dog() {
  }
}

构造方法有什么特征?

  1. 无任何返回类型

  2. 方法名和类名相同

利用构造方法,我们能做什么?

有了构造方法后,我们能直接生成一个类的对象。同时我们可以对类里面的成员变量赋默认值,如下:

class Dog{
  String name;
  int age;
  public Dog(String name,int age){
    this.name = name;
    this.age = age;
  }
}
public static void main(String args[]){
// 我们构造出了一只姓名为小黄,3岁的狗狗
  Dog dog = new Dog("小黄",3);  
}

刚才说java会自动为我们构造一个无参的构造方法,这句话其实并不严谨,当我们自己主动的声明了构造方法(无论是否有参),这时候java就不会为我们构造无参方法了。这一点一定要注意。

 

在实战开发中,我们会用到一些json序列化库,有些库序列化时会主动调用我们类的无参构造方法。如果我们这个类只主动构造了有参的构造方法,这些json库由于找不到无参构造方法,就会直接崩溃!

 

那这时候该怎么办呢?

class Dog{
  String name;
  int age;
  public Dog(String name,int age){
    this.name = name;
    this.age = age;
  }
  // 当你构造上面的有参构造方法, 请务必注意此时Java不会再给我们自动生成
  // 无参构造方法了,这时候需要我们自己主动写一个无参构造方法
    public Dog(){
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值