有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
首发博客地址
面试题手册
系列文章地址
创建对象的方式有以下几种:
Person person = new Person();
这种方式是最常见和最基本的创建对象的方式。
Class clazz = Class.forName("com.example.Person");
Person person = (Person) clazz.newInstance();
这种方式适用于需要根据类名字符串来创建对象的场景,比如配置文件中指定了类名。
Person person = new Person();
Person clonePerson = (Person) person.clone();
注意,使用 clone()方法创建对象时,会调用对象的拷贝构造方法或者默认构造方法进行初始化。
public interface Animal {
void sound();
}
public class Dog implements Animal {
@Override
public void sound() {
System.out.println("汪汪汪");
}
}
public class Cat implements Animal {
@Override
public void sound() {
System.out.println("喵喵喵");
}
}
public class AnimalFactory {
public static Animal createAnimal(String type) {
if ("dog".equals(type)) {
return new Dog();
} else if ("cat".equals(type)) {
return new Cat();
}
return null;
}
}
// 使用工厂类创建对象
Animal dog = AnimalFactory.createAnimal("dog");
dog.sound(); // 输出:汪汪汪
Animal cat = AnimalFactory.createAnimal("cat");
cat.sound(); // 输出:喵喵喵
通过工厂模式,可以将对象的创建逻辑封装在工厂类中,使得代码更加灵活和可维护。
// 将对象写入文件
Person person = new Person();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
oos.writeObject(person);
oos.close();
// 从文件读取对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
Person clonePerson = (Person) ois.readObject();
ois.close();
这种方式可以将对象保存到文件或者网络传输中,然后再从文件或者网络中读取出来,实现对象的复制和传递。
除了上述提到的几种方式,还有以下几种创建对象的方法:
public class Person {
private String name;
private Person(String name) {
this.name = name;
}
public static Person createPerson(String name) {
return new Person(name);
}
}
// 使用静态工厂方法创建对象
Person person = Person.createPerson("Alice");
这种方式可以隐藏具体的构造方法,只暴露一个简单易懂的静态方法供外部使用。
@Component
public class Person {
@Autowired
private Address address;
// ...
}
@Component
public class Address {
// ...
}
// 通过依赖注入框架创建对象
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Person person = context.getBean(Person.class);
依赖注入框架可以大大简化对象的创建和管理过程,提高代码的可维护性和灵活性。
public class ObjectPool {
private List pool;
public ObjectPool(int size, Supplier supplier) {
pool = new ArrayList();
for (int i = 0; i < size; i++) {
T obj = supplier.get();
pool.add(obj);
}
}
public synchronized T getObject() {
if (pool.isEmpty()) {
throw new RuntimeException("Object pool is empty");
}
return pool.remove(0);
}
public synchronized void releaseObject(T obj) {
pool.add(obj);
}
}
// 创建对象池
ObjectPool personPool = new ObjectPool(10, Person::new);
// 获取对象
Person person = personPool.getObject();
// 使用对象
// 释放对象
personPool.releaseObject(person);
对象池可以减少对象的创建和销毁次数,提高系统性能。
本文由mdnice多平台发布