第五章 对象(1.3)

3.1、创建对象

被声明过的类可以用来创建对象,所谓的创建对象就是声明变量并初始化的过程。
创建对象的语法格式:

类名  对象名;
对象名 = new 类名();
或者
类名  对象名 = new 类名();

下面是一个实例:

public class Test1 {
	public static void main(String[] args) {
		// 声明一个Student类型的变量
		Student stu1;
		// 创建一个Student类型的对象并通过"=="初始化变量stu1
		stu1 = new Student();
		// 或者写在一起
		Student stu2 = new Student();
	}
}

解释:

  • 1.使用new运算符创建对象,实质就是为对象在堆内存中分配内存空间。
  • 2.new Student()会创建一个Student类的对象,这个过程也叫做实例化一个Student类的对象。
  • 3.一个类可以实例化多个对象,不同对象在内存中是独立的。

3.2、使用对象

对象被创建后(或称被实例化后),这个对象就拥有了所属类的属性和方法,对象可以使用“.”运算符来访问属性(访问成员变量)或执行行为(调用成员方法)。

下面是一个示例:

public class Test {
	public static void main(String[] args) {
		Student  stu = new Student();//对象的创建
		// 向对象的属性赋值
		stu.name = "林冲";
		stu.age = 21;
		stu.studentNo = "10001";
		// 调用对象的方法
		stu.introduce();
	}
}

本例中,在main方法中声明了一个Student类型的变量stu,并实例化了一个Student类型的对象,赋值给了变量stu,之后通过变量stu访问了该对象的属性并对属性进行了赋值,最后调用了该对象的方法introduce()

3.3、对象的内存分配

上面示例中的代码在运行时,内存中是怎样变化的呢,下面用图示来说明:

解释:

执行代码Student stu时,在main方法对应栈帧的局部变量表中,为Student类型的变量stu分配一块内存。

执行stu = new Student()时,首先,new操作符会让JVM(虚拟机)在堆内存中分配一块内存空间(最主要的就是为属性分配内存空间),用来存储一个Student类型的对象,之后,赋值操作会将堆内存中已经分配好的内存空间的首地址存储到变量stu在局部变量表里对应的位置。

在堆内存中为刚才创建的Student对象的name属性,age属性,studentNo属性赋值,即向这些变量对应的内存中存入值,基本数据类型存具体数据,引用类型存内存地址编号。

注意:
实例化一个Student对象时,该对象的属性是具有初始值(默认值)的,byte、short、int、long类型的属性的初始值是0float、double类型的属性的初始值是0.0boolean类型的属性的初始值是falsechar类型的属性的初始值是’\u0000’,引用类型的属性的初始值是null
下面是一个示例:

public class Test2 {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.introduce();
	}
}

输出的结果将是:
大家好,我是null,我今年0岁,我的学号是:null
事实上,在堆中分配内存,总会默认的进行初始化,堆中分配的内存中总是有初始值;而在栈中分配内存,则需要显式的初始化。

3.4、空指针 null

观察并运行下面的示例:

public class Test {
	public static void main(String[] args) {
		Student stu;
		stu = null;
		stu.introduce();
	}
}

当执行stu.introduce()时,程序会抛出一个异常,如下:

Exception in thread "main" java.lang.NullPointerException
	at com.luas.test.Test.main(Test.java:5)

造成这个异常的原因就在于stu = null这一句代码,将变量stu赋值为null。
引用类型的变量应该存储一个内存地址编号,而null值则表明变量没有引用任何内存地址编号,是一个空引用。当变量的值是null时,访问属性或调用方法,都将会抛出NullPointerException

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值