package com.alpha;
import java.util.Date; // 先有类
public class MainClass{
public static void main(String[] args) throws Exception {
Date date = new Date(); // 产生对象
Class<?> cls = date.getClass();
System.out.println(cls);
}
}
package com.alpha;
import java.util.Date; // 先有类
public class MainClass{
public static void main(String[] args) throws Exception {
Class<?> cls = Date.class;
System.out.println(cls);
}
}
package com.alpha;
public class MainClass{
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("java.util.Date");
System.out.println(cls);
}
}
package com.alpha;
class Book {
public Book() {
System.out.println("Book without parameters of the construction method.");
}
@Override
public String toString() {
return "This is a book.";
}
}
public class MainClass{
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.alpha.Book");
Object obj = cls.newInstance(); // 相当于使用new调用无参构造实例化
System.out.println(obj);
}
}
package com.alpha.factory;
interface Fruit {
public void eat();
}
class Apple implements Fruit {
@Override
public void eat() {
System.out.println("eat apple");
}
}
class Factory {
public static Fruit getInstance(String className) {
if ("apple".equals(className)) {
return new Apple();
}
return null;
}
}
public class TestFactory {
public static void main(String[] args) {
Fruit f = Factory.getInstance("apple");
f.eat();
}
}
class Orange implements Fruit {
@Override
public void eat() {
System.out.println("eat orange");
}
}
class Factory {
public static Fruit getInstance(String className) {
if ("apple".equals(className)) {
return new Apple();
} else if ("orange".endsWith(className)) {
return new Orange();
}
return null;
}
}
package com.alpha.factory;
interface Fruit {
public void eat();
}
class Apple implements Fruit {
@Override
public void eat() {
System.out.println("eat apple");
}
}
class Orange implements Fruit {
@Override
public void eat() {
System.out.println("eat orange");
}
}
class Factory {
public static Fruit getInstance(String className) {
Fruit f = null;
try {
f = (Fruit) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
public class TestFactory {
public static void main(String[] args) {
Fruit f = Factory.getInstance("com.alpha.factory.Apple");
f.eat();
}
}
package com.alpha.entity;
public class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public String toString() {
return "Book [title=" + title + ", price=" + price + "]";
}
}
package com.alpha;
public class MainClass{
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.alpha.entity.Book");
Object obj = cls.newInstance(); // 相当于使用new调用无参构造实例化
System.out.println(obj);
}
}
Exception in thread "main" java.lang.InstantiationException: com.alpha.entity.Book
at java.lang.Class.newInstance(Unknown Source)
at com.alpha.MainClass.main(MainClass.java:6)
Caused by: java.lang.NoSuchMethodException: com.alpha.entity.Book.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 2 more
package com.alpha;
import java.lang.reflect.Constructor;
public class MainClass{
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.alpha.entity.Book");
Constructor<?> con = cls.getConstructor(String.class, double.class);
Object obj = con.newInstance("java", 15.5);
System.out.println(obj);
}
}
package com.alpha.entity;
public class Book {
private String title;
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}