一、显式创建对象
1.使用new关键字;
2.使用反射机制中的newInstance方法;
3.类的clone方法,对现有实例的复制;
4.通过解串行化使用的objectInputStream中的readobject方法反序列化类;
1-3方法例程如下:
public class Person implements Cloneable{
private String name;
private int weight;
private int age;
public Person() {}
public Person(String pname,int pweight,int page) {
name=pname;
weight=pweight;
age=page;
}
public void young() {
if(age>=18&&age<=100) {
System.out.println(name+"已经成年");
}
if(age>0&&age<18) {
System.out.println(name+"未成年");
}
}
public String toString() {
return "体重为:"+weight+"\n年龄为:"+age;
}
public static void main(String args[]) throws Exception{
System.out.println("<使用new关键字创建对象>");
Person person1=new Person("Tom",50,23);
person1.young();
System.out.println(person1);
/*
* The method newInstance() from the type Class is deprecated since version 9
*
System.out.println("<使用newInstance()方法创建对象>");
Class c=Class.forName("dao.person");
Person person2=(Person)c.newInstance();
person2.young();
System.out.println(person2);
*/
System.out.println("<使用clone()方法创建对象>");
Person person3=(Person) person1.clone();
person3.young();
System.out.println(person3);
}
}
4方法例程
待学习
二、隐含创建对象
1.程序代码中String类型的s1和s2对应一个String对象
String s1="I love Java";
String s2="I love Java";
String s3=new String("I love Java");
// 前提:Java中,字符串的比较,“==”比较的是引用,equals()比较的是值
//(equals 对于其他引用类型比较的是地址,
// 这是因为object的equals方法比较的是引用,
// 字符串类在实现的时候重写了该方法)
System.out.println(s1==s2); //输出true
System.out.println(s1.equals(s2)); //输出true
System.out.println(s1==s3); //输出false
System.out.println(s1.equals(s3)); //输出true
上述程序在内存中实际创建了两个实例,s1和s2有堆/堆栈公用情况,而s3使用new操作符新建了一个实例。
2.字符串操作符“+”的运算结果为一个新的String对象
String s4="I love ";
String s5="Java";
String s6=s4+s5;
System.out.println(s6); //输出I love Java
System.out.println(s6=="I love Java"); //输出false
System.out.println(s6.equals("I love Java")); //输出true
3.对于Java命令行中的每个命令行参数,Java虚拟机会创建相应的String对象,并把它们组织到一个String数组中,再把该数组作为参数传给程序入口main (String args[]) 方法。
运行Java程序的同时,可以给args[]数组设定参数,参数可以是多个字符串,设置方法有两种,一种是在DOS命令窗中,运行Java程序时,设定参数,另一种是在eclipse中(x)=Arguments中设置参数。使用两种方法分别运行如下程序:
public class Test2 {
public static void main(String[] args) {
//第三种情况
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}
(1)DOS
(2)eclipse
点击Run按钮旁三角->Run Configurations->选择(x)=Arguments窗口->输入参数。如图:
运行结果如下:
4.当Java虚拟机加载一个类时,会隐含的创建描述这个类的class实例。
*内容及例程部分来自《Java开发课堂实录》,孙宇霞、郑千忠 编著。