要想使用一个类则必须要有对象。在Java程序中可以使用new关键字创建对象,具体格式如下:
类名对象名称=null;
对象名称=new 类名();
上述格式中,创建对象分为声明对象和实例化对象两步,也可以直接通过下面的方式创建对象,具体格式如下:
类名对象名称=new 类名();
例如,创建Student类的实例对象,示例代码如下:
Studentstu=newStudent();
上述代码中,newStudent()用于创建Student类的一个实例对象,Studentstu则是声明了一个Student类型的变量stu。运算符“=”将新创建的Student对象地址赋值给变量stu,变量stu引用的对象简称为stu对象。
了解了对象的创建之后,就可以使用类创建对象了,示例代码如下:
classStudent{String name;// 声明姓名属性voidread(){System.out.println("大家好,我是"+ name +",我在看书!");}}publicclassTest{publicstaticvoidmain(String[] args[]){Student stu =newStudent();//创建并实例化对象}}
上述代码在main()方法中实例化了一个Student对象,对象名称为stu。使用new关键字创建的对象是在堆内存分配空间。stu对象的内存分配如图3-2所示。
图3-2stu对象的内存分配
从图3-2中可以看出,对象名称stu保存在栈内存中,而对象的属性信息则保存在对应的堆内存之中。
创建Student对象后,可以使用对象访问类中的某个属性或方法,对象属性和方法的访问通过“.”运算符实现,具体格式如下:
对象名称.属性名
对象名称.方法名
接下来通过一个案例学习对象属性和方法的访问,如文件3-1所示。
文件3-1Example01.java
classStudent{String name;// 声明姓名属性voidread(){System.out.println("大家好,我是"+ name);}}classExample01{publicstaticvoidmain(String[] args){Student stu1 =newStudent();// 创建第一个Student对象Student stu2 =newStudent();// 创建第二个Student对象
stu1.name ="小明";// 为stu1对象的name属性赋值
stu1.read();// 调用对象的方法
stu2.name ="小华";
stu2.read();}}
文件3-1的运行结果如图3-3所示。
图3-3文件3-1的运行结果
在文件3-1中,第2~5行代码声明了一个String类型的name属性和一个read()方法,第9~10行代码创建了stu1对象和stu2对象;第11行代码为stu1对象name属性赋值;第12行代码通过stu1对象调用read()方法。
第13行代码为stu2对象name属性赋值;第14行代码通过stu2对象调用read()方法。从图3-3所示的运行结果可以看出,stu1对象和stu2对象在调用read()方法时,打印的name值不相同。这是因为stu1对象和stu2对象是两个完全独立的个体,它们分别拥有各自的name属性,对stu1对象的name属性进行赋值并不会影响到stu2对象name属性的值。为stu1对象和stu2对象中的属性赋值后,stu1对象和stu2对象的内存变化如图3-4所示。
图3-4stu1对象和stu2对象中的属性赋值后的内存变化
从图3-4可以看出,程序分别实例化了两个Student对象stu1和stu2,分别指向各自的堆内存空间。