java怎么创建对象和使用对象在同一个项目不同文件中,java怎样创建对象
如何解决写爬虫IP受阻的问题?立即使用。
本教程运行环境:windows7系统,java8版本8,DELL G3电脑。
作为Java开发人员,我们每天都要创建许多对象,但我们通常使用依赖管理系统(如Spring)来创建对象。然而,有许多方法可以创建对象,我们将在本文中学习。
在Java中有五种创建对象的方法。下面是它们和它们的字节码的例子。
Ken0@166.com,如果你在最后运行程序,你会发现方法1,2,3用构造函数创建对象,方法4,5不调用构造函数。
1.使用new关键字
这是创建对象的最常见和最简单的方法。这样我们就可以调用任意的构造函数(无参数和无参数)。
雇员emp1=新雇员();
0:新#19 //班级组织/编程/Mitra/练习/员工
3: dup
4:invoke special # 21//method org/programming/Mitra/exercises/employee。:()v:
2.使用Class类的newInstance方法
我们还可以使用Class的newInstance方法来创建对象。这个newInstance方法调用无参数构造函数来创建一个对象。
我们可以通过以下方式调用newInstance方法来创建对象:
Employee EMP 2=(Employee)class . forname( org . programming . Mitra . exercises . Employee )。new instance();
或者
employee EMP 2=employee . class . new instance();
51: invokevirtual #70 //方法Java/lang/class . new instance:()Ljava/lang/Object;
3.使用Constructor类的newInstance方法
非常类似于该类的newInstance方法。java.lang.reflect.Constructor类中还有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用参数化的和私有的构造函数。
ConstructorEmployee constructor=employee . class . get constructor();
员工EMP 3=constructor . new instance();
111: invokevirtual #80 //方法Java/lang/reflect/constructor . new instance:([Ljava/lang/Object;)Ljava/lang/Object;这两个新实例方法就是我们所说的反射。实际上,类的newInstance方法在内部调用构造函数的newInstance方法。这也是为什么很多框架,比如Spring,Hibernate,Struts,都使用后者的原因。要理解这两种newInstance方法之间的区别,请参阅本文《通过Java中的反射创建对象及示例》。
4.使用clone方法
每当我们调用对象的clone方法时,jvm都会创建一个新的对象,并复制以前对象的所有内容。用clone方法创建对象不会调用任何构造函数。
要使用clone方法,我们需要实现Cloneable接口及其定义的clone方法。
雇员emp4=(雇员)EMP 3 . clone();
162:invokevirtual # 87//Method org/programming/Mitra/exercises/employee . clone()Ljava/lang/Object;
5.使用反序列化
当我们序列化和反序列化一个对象时,jvm会为我们创建一个单独的对象。反序列化时,jvm创建对象而不调用任何构造函数。
为了反序列化一个对象,我们需要让我们的类实现Serializable接口。
ObjectInputStream in=new ObjectInputStream(new file inputstream( data . obj ));
雇员emp5=(雇员)in . read object();
261: invokevirtual #118 //方法Java/io/objectinputstream . read Object:()Ljava/lang/Object;从上面的字节码片段中我们可以看到,除了第一个方法,其他四个方法都转换成了invokevirtual(直接创建对象的方法),第一个方法转换成了两个调用,new和invokespecial(构造函数调用)。
例子
让我们看看如何为以下Employee类创建一个对象:
类Employee实现可克隆的、可序列化的{
private static final long serialVersionUID=1L;
私有字符串名称;
公职人员(){
System.out.println(调用了雇员构造函数.);
}
公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
@覆盖
public int hashCode() {
final int prime=31
int result=1;
result=prime * result((name==null)?0:名称。hashcode());
返回结果;
}
@覆盖
公共布尔等于(对象对象){
如果(这==obj)
返回真实的
if (obj==null)
返回错误的
if (getClass()!=obj.getClass())
返回错误的
员工其他=(员工)对象;
if (name==null) {
if (other.name!=空)
返回错误的
} else if(!名称.等于(其他。姓名))
返回错误的
返回真实的
}
@覆盖
公共字符串toString() {
返回"雇员[name= name ]";
}
@覆盖
公共对象克隆(){
对象obj=null
尝试{
obj=超级。clone();
} catch(CloneNotSupportedException e){
e。printstacktrace();
}
返回目标文件
}
}下面的爪哇程序中,我们将用5种方式创建雇员对象。你可以从开源代码库找到这些代码。
公共类对象创建{
公共静态空总管(字符串.参数)引发异常{
//通过使用新的关键字
雇员emp1=新雇员();
电磁脉冲1。集合名称( Naresh );
System.out.println(emp1),hashcode: EMP 1。hashcode());
//通过使用班级类的新实例()方法
雇员EMP 2=(雇员)类。forname( org。编程。米特拉。练习。员工’)。新实例();
//或者我们可以简单地这样做
//雇员EMP 2=雇员。班级。新实例();
电磁脉冲2。集合名称( Rishi );
System.out.println(emp2),hashcode: EMP 2。hashcode());
//通过使用构造函数类的新实例()方法
ConstructorEmployee构造者=雇员。班级。get构造函数();
员工EMP 3=构造函数。新实例();
电磁脉冲3。集合名称(“Yogesh”);
System.out.println(emp3),hashcode: EMP 3。hashcode());
//通过使用克隆()方法
雇员emp4=(雇员)EMP 3。clone();
电磁脉冲4。集合名称(“Atul”);
System.out.println(emp4),hashcode: EMP 4。hashcode());
//通过使用反序列化
//序列化
对象输出流out=新对象输出流(新文件输出流(数据。obj’);
出去。writeobject(EMP 4);
出去。close();
//反序列化
ObjectInputStream in=new ObjectInputStream(new file inputstream( data。obj ));
雇员emp5=(雇员)在。read object();
英寸close();
电磁脉冲5。集合名称(“Akash”);
System.out.println(emp5),hashcode: EMP 5。hashcode());
}
}程序会输出:
调用了员工构造函数.
员工[name=Naresh],哈希码:-1968815046
调用了员工构造函数.
员工[name=Rishi],哈希码:78970652
调用了员工构造函数.
员工[name=Yogesh],哈希码:-1641292792
员工[name=Atul],哈希码:2051657
员工[name=Akash],哈希码:63313419相关视频教程推荐:Java视频教程以上就是爪哇岛怎么创建对象的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。