JAVA从小白到大牛第12章对象

本文介绍了Java中对象的生命周期,包括创建(声明与实例化)、空对象(null)以及销毁的概念。详细讲解了构造方法的使用,如默认构造器、构造方法的重载以及不同访问权限的构造方法。此外,还讨论了this关键字在调用实例变量和方法以及在构造方法之间的传递中的作用。
摘要由CSDN通过智能技术生成

类实例化可以生成对象,实例方法就是对象方法,实例变量就是对象属性。一个对象的生命周期包括三个阶段:创建,使用和销毁。

12.1创建对象

创建对象包括两个步骤:声明和实例化

1.声明

声明对象和声明普通变量没有区别,格式如下:
type objectName;

其中,type是引用类型,即类,接口和数组。示例:

String name;

该语句声明了字符串对象name。可以声明并不为对象分配内存空间,而只是分配一个引用

2.实例化

实例化过程分为两个阶段:为对象分配内存空间和初始化对象,首先使用new运算符为对象分配内存空间,然后再调用构造方法初始化对象。示例:

String Name;

name = new String(“Hello World”);

代码中String(“Hello World”)表达式就是调用String的构造方法。

12.2空对象

一个引用变量没有通过new分配内存空间,这个对象就是空对象。Java使用关键字null表示空对象。示例:

String name = null;

name   = “Hello World”;

引用变量默认值是null。当试图调用一个空对象的实例变量或实例方法时,会抛出空指针异常NullPointerException,代码如下

String name = null;

//输出null字符串

System.out.println(name);

//调用length()方法

int len = name.length();

但是代码运行到第1行时,系统会抛出异常,这是因为调用length()方法时,name是空对象。程序员应该避免调用空对象的成员变量和方法。代码如下:

//判断对象是否为null

if(name != null){

        int len = name.length;

}

12.3构造方法

(1)构造方法名必须与类名相同。

(2)构造方法没有任何返回值,包括void。

(3)构造方法只能与new运算符结合使用。

示例:

package ConstructionMethod;

public class Rectangle {
    
    //矩形宽度
    int width;
    //矩形高度
    int height;
    //矩形面积
    int area;
    
    //构造方法
    public Rectangle(int w, int h) {
        width = w;
        height = h;
        area = getArea(w, h);
    }

    private int getArea(int w, int h) {
        // TODO Auto-generated method stub
        return 0;
    }
}
 

12.3.1默认构造方法

有时在类中根本看不到任何的构造方法。

例子:

package ConstructionMethod;

public class User {
    //用户名
    private String username;
    //用户密码
    private String password;
    
}    
在上述代码中看不见任何的构造方法,但是还是可以调用无参数的构造方法创建User对象。

例子:
User user = new User();

默认构造方法的方法体中没有任何语句,也就不能初始化成员变量了,那么这时候成员变量就会使用默认值,成员变量默认值与数据类型有关。

12.3.2构造方法重载

在一个类中可以有多个构造方法,它们具有相同的名字(与类名相同),参数列表不同,所以它们之间一定是重载关系。

package ConstructionMethod;
import java.util.Date;

//构造方法重载
public class Person {    
    //名字
    private String name;
    //年龄
    private int age;
    //出生日期
    private Date birthDate;
    
    public Person(String n, int a, Date d) {
        name = n;
        age = a;
        birthDate = d;
    }
    public Person(String n, int a) {
        name = n;
        age = a;
    }
    public Person(String n, Date d) {
        name = n;
        birthDate = d;
    }
    public Person(String n) {
        name = n;
    }
    
    public String getInfo() {
        StringBuilder sb = new StringBuilder();
        sb.append("名字:").append(name).append('\n');
        sb.append("年龄:").append(age).append('\n');
        sb.append("出生日期:").append(birthDate).append('\n');
        return sb.toString();
    }
}

 上述代码Person类代码提供了四个重载的构造方法,如果有准确的姓名,年龄,出生日期信息,就可以用第一个构造方法构造Person对象;如果只有姓名和年龄信息,可以选用第二个构造方法创建Person对象;如果只有姓名和出生日期信息,可以选用第三个方法构造Person对象;如果只有姓名信息,可以选用第四种方法构造创建Person对象。


12.3.3构造方法封装 

//构造方法封装
package ConstructionMethod;
import java.util.Date;

//构造方法重载
public class Person2 {    
    //名字
    private String name;
    //年龄
    private int age;
    //出生日期
    private Date birthDate;
    
    //公有级别限制
    public void Person(String n, int a, Date d) {
        name = n;
        age = a;
        birthDate = d;
    }
    //默认级别限制
     void Person(String n, int a) {
        name = n;
        age = a;
    }
    //保护级别限制
    protected void Person(String n, Date d) {
        name = n;
        birthDate = d;
    }
    //私有级别限制
    private void Person(String n) {
        name = n;
    }
    
    public String getInfo() {
        StringBuilder sb = new StringBuilder();
        sb.append("名字:").append(name).append('\n');
        sb.append("年龄:").append(age).append('\n');
        sb.append("出生日期:").append(birthDate).append('\n');
        return sb.toString();
    }
}
上述代码,第一种是声明公有级别的构造方法。第二种是声明默认级别,默认级别只能在同一个包中访问。第三种是保护级别的构造方法,该构造方法在同一个包中和默认级别相同,在不同包中可以被子类继承。第三种是私有级别构造,这种构造方法只能在当前类中使用,不允许在外边访问,私有构造方法可以应用于设计模式等设计。

12.4this关键字

this指向对象本身,一个类可以通过this来获得一个代表它自身的对象变量。this使用在如下三种情况中。

1.调用实例变量

2.调用实例方法

3.调用其他构造方法、

例子:

//this关键字
package ConstructionMethod;
import java.util.Date;

//构造方法重载
public class Person3 {    
    //名字
    private String name;
    //年龄
    private int age;
    //出生日期
    private Date birthDate;
    
    public void Person(String name, int age, Date d) {
        this.name = name;
        this.age = age;
        birthDate = d;
        
    }
    public void Person(String name, int age) {
        //调用三个参数构造方法
        this(name, age, null);
    }
    public void Person(String name, Date d) {
        //调用三个参数构造方法
        this(name, 30, d);
    }
    public Person(String name) {
        System.out.println(this.toString());
        //调用Person(String name, Date d)构造方法
        this(name, null);
    }


    @Override
    public String toString() {
        return "Person [name=" +name
                + ", age = " + age 
                + ", birthDate= " + birthDate + "]";
                    
    }
}

12.5销毁对象

对象不再使用时应该被销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值