Java创建对象的四种方式
1.通过new创建对象
通过new的方式创建对象是Java中最常见的方式,也是我们最开始学习创建对象的方式,但是我们通过new创建对象都会增加整体的耦合度,我们在今后的编程生活中都应该注意耦合度带来的影响,所以降低耦合度是我们必须考虑的。
话不多说,我们还是上代码吧。
a.首先创建一个类。
package com.tzz.test;
public class Hello {
public void sayWorld(){
System.out.println("你好,世界!");
}
}
b.通过new创建类的对象并调用它的方法
package com.tzz.test;
public class NewHello {
public static void main(String[] args) {
Hello hello = new Hello();
hello.sayWorld();
}
}
2.通过反射的机制创建对象
在Java的学习过程中,反射是我们必不可少的的知识点,我们目前的话就通过反射来创建对象,当然我们这块主要是讲解关于反射来创建对象的知识点,因为反射是Java中一个重要知识点,目前没有更多涉及反射其他的知识点。
a.通过Class类的newInstance方法来进行创建
此时普通类Hello保持不变,创建类的代码如下
package com.tzz.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class NewHello {
public static void main(String[] args) {
try {
Class newHello = Class.forName("com.tzz.test.Hello");
Hello hello = (Heloo)newHello.newInstance();
heloo.sayWorld();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (InstantiationException e){
e.printStackTrace();
}
}
}
b.通过使用Constructor类的newInstance方法来进行创建
代码如下:
package com.tzz.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class NewHello {
public static void main(String[] args) {
try {
Class hello = Class.forName("com.tzz.test.Hello");
Constructor constructor = heloo.getConstructor();
Heloo hello1 = (Hello)constructor.newInstance();
heloo1.sayWorld();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
3.通过对象的clone方法进行创建对象
package com.tzz.test;
public class CloneHello implements Cloneable{
public void sayhello(){
System.out.println("你好,世界!");
}
public static void main(String[] args) {
CloneHello cloneHello = new CloneHello();
try {
CloneHello cloneHello1 = (CloneHello)cloneHello.clone();
cloneHello1.sayhello();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
4.通过反序列化的方式创建对象
我们对于序列化和反序列化的知识可能掌握相对于比较少,但是对于整个Java知识中,序列化知识占据了很大的重要性,我们这块主要只是简单学习一下创建对象,对于更多的序列化和反序列化的知识在以后的学习更详细的讲解。
为什么创建对象会通过反序列化来创建呢?大家都知道我们计算机空间分为了栈、堆等,我们对象都处于堆空间中,然而我们Java特色的垃圾回收机制(GC)回收就包括了堆空间,一旦我们对象进行回收后就会被销毁,我们原本的对象就不复存在,如果此时我们还需要此对象,我们有什么办法呢?有的同学会说,大不了我重新创建一次,但是我们重新创建的对象不再是我们之前对象,此时我们通过反序类可以得到之前对象,。这个为什么呢?我们大概来说一下序列化,序列化是对象存储到我们内存空间,通过输入输出流来进行保存。我们接下来就看一下相关代码
package com.tzz.test;
import java.io.*;
public class SerializeTest {
Hello hello = new Hello();
//准备一个文件进行存储
File file = new File("hello.obj");
FileOutputStream fos;
{
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
ObjectOutputStream oos;
{
try {
oos = new ObjectOutputStream(fos);
} catch (IOException e) {
e.printStackTrace();
}
}
FileInputStream fis;
{
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
ObjectInputStream ois;
{
try {
ois = new ObjectInputStream(fis);
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是我对于Java创建对象的理解,如果有不足,请各位同学理解并指出,谢谢。因为是第一次写博客,存在很多不足,如果有大佬有建议,欢迎指出。