美文网首页
Java语法系列之new和newInstance的区别

Java语法系列之new和newInstance的区别

作者: 程序员小白成长记 | 来源:发表于2020-08-12 21:27 被阅读0次

    先说不同:

    • 1, newInstance() 效率慢,但是适用于反射,无参构造; new 效率高,可以适用于任何public构造
    • 2, newInstance() 是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择,new 只能实现具体类的实例化,不适合于接口编程。
    • 3, 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类:
    • 4, newInstance创建类是这个类必须已经加载过且已经连接,new创建类是则不需要这个类加载过
    • 5, newInstance: 弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new 强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被移除,经常会出现内存溢出)

    可以用new Instance但是不能用new的情况

    函数作用:根据传入的类型获取类的对象

    Test

    public class Test {
        public static void main(String[] args) {
            // RealClass realClass = new RealClass();
            AbstractClass abstractClass = getInstance(RealClass.class);
            abstractClass.setId(1);
            System.out.println(abstractClass.getId());
            System.out.println(abstractClass);
        }
    
    
        public static<T> T getInstance(Class<? extends T> clazz) {
            T t = null;
            try {
                t = (T) clazz.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return t;
        }
    }
    

    AbstractClass

    public abstract class AbstractClass {
    
        private int id;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public AbstractClass(){
            System.out.println(this.getClass().getPackage().getName());
            System.out.println(this.getClass());
            System.out.println(AbstractClass.class.getPackage().getName());
        }
    }
    

    RealClass

    public class RealClass extends AbstractClass {
    
        public RealClass(){
            super();
        }
    }
    

    参考:

    newInstance( )和new的区别
    Java中newInstance()和new()区别

    相关文章

      网友评论

          本文标题:Java语法系列之new和newInstance的区别

          本文链接:https://www.haomeiwen.com/subject/gmzmdktx.html