java如何创建对象 Java反序列化对象的方法
其实java如何创建对象的问题并不复杂,但是又很多的朋友都不太了解Java反序列化对象的方法,因此呢,今天小编就来为大家分享java如何创建对象的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
java创建对象
不知道你学过C/C++没有?
book a
表示创建一个指向book类对象的指针/引用。详细来说,a本质上是一个unsigned int变量,但是这个整形变量不储存别的东西,就储存内存地址。并且因为JAVA这种语言的特点,使得系统(虚拟机)自动进行类型检查,保证a变量指向的是book类型或book类子类类型的对象。
new在JAVA里是一个特殊操作符,但是我们的操作系统是用C语言来写的,new必然对应C语言的某个或某组系统函数调用。这里一般是等价于C语言的malloc函数,作用是请求操作系统为对象分配一块内存空间。
book()是构造函数,是在new出来的内存区域填充数据,初始化book类对象的一些变量或状态。
book a=new notebook()可以,父类的指针/引用可以指向子类的对象。(多态)
反过来notebook a= new book()不行。因为对于子类对象,父类所声明的变量是子类对象的空间的一部分,这意味着父类对象的所占内存空间大小不超过子类对象的大小。所以,不可能让子类指针指向父类对象,否则会指向一块未被分配的内存空间,导致出错。
java面向对象如何创建对象
java作为互联网编程中使用范围最广泛的编程语言之一,我们有许多的知识是需要掌握学习的,今天java课程培训机构就给大家分析讲解一下java面向对象的编程方法有哪些。
常用的创建对象的模式有以下几种:
一.工厂模式
工厂模式抽象了具体对象的过程,用函数来封装以特ing接口创建对象的细节。
如下:
functioncreateAnimal(name,age){
varo=newObject();
o.name=name;
o.age=age;
o.sayName=function(){
alert(this.name);
}
returno;
}
varcat=createAnimal("cat",12);
vardog=createAnimal("dog",3);
工厂模式虽然解决了创建多个相似兑现过的问题,但是却没有解决对象识别的问题。
二.构造函数模式
构造函数模式可以创建特定类型的对象。
functionAnimal(name,age){
this.name=name;
this.age=age;
this.sayName=function(){
alert(this.name);
}
}
varcat=newAnimal("cat",12);
vardog=newAnimal("dog",3);
可以使用对象的constructor属性或instanceof操作符来标识对象类型。
cat.constructor==Animal//true
catinstanceofAnimal//true
三.原型模式
每个函数都有一个prototype(原型)属性。这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
使用原型对象的好处是,可以让所有对象实例共享它所包含的属性和方法。
functionAnimal(){}
Animal.prototype.name="animal";
Animal.prototype.age=1;
Animal.prototype.sayName=function(){
alert(this.name);
}
vartest1=newAnimal();
test1.sayName();//"animal"
vartest2=newAnimal();
test2.sayName();//"animal"
alert(test1.sayName===test2.sayName);//true
或者:
functionAnimal(){}
Animal.prototype={
constructor:Animal,
name:"animal",
age:1,
sayName:function(){
alert(this.name);
}
};
原型中所有属性是被很多实例共享的,通过在实例上添加一个同名属性,可以隐藏原型中的对应属性。但是,对于包含引用类型值的属性来说,问题就比较明显了。
Java创建对象的几种方法
使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的)。比如:Student student= new Student();
使用Class类的newInstance方法:我们也可以使用Class类的newInstance方法创建对象,这个newInstance方法调用无参的构造器创建对象,如:Student student2=(Student)Class.forName("根路径.Student").newInstance();或者:Student stu= Student.class.newInstance();
使用Constructor类的newInstance方法:本方法和Class类的newInstance方法很像,java.lang.relect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。如: Constructor<Student> constructor= Student.class.getInstance(); Student stu= constructor.newInstance();这两种newInstance的方法就是大家所说的反射,事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架Spring、Hibernate、Struts等使用后者的原因。
使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法。如:Student stu2=<Student>stu.clone();这也是原型模式的应用。
使用反序列化:当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象,在反序列化时,JVM创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现Serializable接口。如:ObjectInputStream in= new ObjectInputStream(new FileInputStream("data.obj")); Student stu3=(Student)in.readObject();
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!