女神镇楼
1、对象的创建:java中使用new操作符调用构造方法创建对象
Test test = new Test(); Test test = new Test("a");
参数说明:
test对象创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了储存空间,可以在构造方法中初始化成员变量,在创建对象时,自动调用构造方法,在java中,初始化与创建是绑定在一起的。
创建对象实例代码:
public class CreateObject { public CreateObject(){ System.out.println("'创建对象"); } public static void main(String[] args) { new CreateObject(); } }
2、访问对象的属性和行为
使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为,对象的属性和行为在类中是通过类成员的变量和成员方法的形式来表示的,所以对象获取类成员时,也相应的获取了对象的属性和行为。
代码示例--对象如何调用类成员:
public class TransferProperty { int i = 47; //定义成员变量 public void call(){ // 定义成员方法 System.out.println("调用call方法"); for(i = 0 ; i < 3 ; i++){ System.out.println(i+" "); if(i==2){ System.out.println(" "); } } } /** * 定义构造方法 */ public TransferProperty(){} public static void main(String[] args) { TransferProperty t1 = new TransferProperty(); // 创建一个对象 TransferProperty t2 = new TransferProperty();// 创建另一个对象 t2.i = 60; //将类成员变量赋值为 60 // 使用第一个对象调用类成员变量 System.out.println("第一个实例对象调用变量 i 的结果:" + t1.i); t1.call(); //使用第一个对象调用类成员变量 // 使用第二个对象调用类成员变量 System.out.println("第2个实例对象调用变量 i 的结果:" + t2.i); t2.call(); //使用第一个对象调用类成员变量 } }
运行结果:
代码示例---对象调用静态成员变量:
public class AccessProperty { static int i = 47; public void call(){ System.out.println("调用call()方法"); for(i = 0; i < 3 ;i ++){ System.out.println(i+" "); if(i == 2){ System.out.println(" "); } } } /** * 定义构造方法 */ public AccessProperty(){} public static void main(String[] args) { AccessProperty t1 = new AccessProperty(); // 创建一个对象 AccessProperty t2 = new AccessProperty();// 创建另一个对象 t2.i = 60; //将类成员变量赋值为 60 // 使用第一个对象调用类成员变量 System.out.println("第一个实例对象调用变量 i 的结果:" + t1.i); t1.call(); //使用第一个对象调用类成员变量 // 使用第二个对象调用类成员变量 System.out.println("第2个实例对象调用变量 i 的结果:" + t2.i); t2.call(); //使用第一个对象调用类成员变量 } }
运行结果:
3、对象的比较 === java中有两种对象比较的方式:“==”运算符和equals()方法
实例代码:
public class Compare { public static void main(String[] args) { String c1 = new String("abc"); String c2 = new String("abc"); String c3 = c1; //将c1的引用赋值c3 // 使用比较运算符比较c2和c3 System.out.println("c2==c3 的运算结果为:"+(c2==c3)); //使用equals方法比较c2与c3 System.out.println("c2.equals(c3)的运算结果为:"+(c2.equals(c3))); } }
运行结果:
运行结果分析:
“==”运算符和equals()比较的内容是不同的,equals()方法是String类中的方法,用来比较两个对象引用所指的内容是否相等;而“==”运算符比较的是两个对象引用的地址是否相等。由于c1,c2是两个不同的对象引用,两者在内存中的位置不同,而“String c3 = c1;”语句中将c1的引用复制给c3,所以c1和c3的两个对象引用是相等的 。
对象c1,c2,c3在内存中的布局如图
4、对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址就会被回收,被java虚拟机视为垃圾的两种对象类型:
(1)对象引用超过其作用范围
(2)将对象赋值为null