• Java 实例化类方式


    一、java 实例化几种方式

    1、用new语句创建对象,这是最常见的创建对象的方法。

    2、使用Class静态方法 Class.forName  方法

    3、使用 .loadClass() 方法

    4、使用Constructor类的newInstance方法

        运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName("java.lang.Object").newInstance();

    5、调用对象的clone()方法。

        无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法

    6、使用反序列化。

        通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

    注意: Class.forName 和  .loadClass 方法的区别 :  https://www.cnblogs.com/Jomini/p/13749568.html

    二、代码

    Person 类

    class Person {  
        private String name;  
        private int age;  
       
      public Person( String name,int age) {  
        this.name = name;   
        this.age = age;  
      }  
       
      public int getAge() {  
       return age;  
      }  
        
      public void setAge(int age) {  
       this.age = age;  
      }  
       
     public String getName() {  
      return name;  
     }  
       
     public void setName(String name){  
          this.name =name;  
        }  
      @Override  
     public String toString() {  
      // TODO Auto-generated method stub  
      return "姓名是:"+name+"; 年龄是:"+age;  
     }  
       
    }  
    

      1、new 的方式实例化

    Person p1 = new Person("王豪博",25);  
    System.out.println(p1.tostring())
    

      2、使用Class静态方法 Class.forName  方法 (再调 newInstance方法 )

    Person emp2 = (Person) Class.forName("org.pro.com.Person").newInstance();
    

       或者

    Persone emp2 = Person.class.newInstance();
    

      3、class.loadClass 方法

        ClassLoader cl; // 如何获得ClassLoader参考1.6 
        Class cls = cl.loadClass("com.rain.B"); // 使用第一步得到的ClassLoader来载入B 
        B b = (B)cls.newInstance(); // 有B的类得到一个B的实例 
    

      

      4、和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。

    Constructor<Person > constructor = Person .class.getConstructor();
    Person emp3 = constructor.newInstance();
    

      5、使用 clone

    class Person implements Cloneable {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    
        @Override
        public String toString() {
            return "姓名是:" + name + "; 年龄是:" + age;
        }
    
    }
    

      测试

    public static void main(String[] args) {
    
            Person p1 = new Person("Jone", 25);
            Person p2 = null;
    
            try {
                p2 = (Person) p1.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            
            p2.setName("Ken");
            p2.setAge(24);
            System.out.println(p2);
        }
    

      

      6、使用反序列化

    import java.io.*;
    import java.util.Date;
    public class ObjectSaver {
        public static void main(String[] args) throws Exception {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:/objectFile.swf"));
            //序列化对象
            Customer customer = new Customer("haobo", 24);
            out.writeObject("你好!");
            out.writeObject(new Date());
            out.writeObject(customer);
            out.writeInt(123); //写入基本类型数据
            out.close();
            //反序列化对象
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:/objectFile.swf"));
            System.out.println("obj1=" + (String) in.readObject());
            System.out.println("obj2=" + (Date) in.readObject());
            Customer obj3 = (Customer) in.readObject();
            System.out.println("obj3=" + obj3);
            int obj4 = in.readInt();
            System.out.println("obj4=" + obj4);
            in.close();
        }
    }
    
    class Customer implements Serializable {
        /**
         *
         */
        private static final long serialVersionUID = -88175599799432325L;
        private String name;
        private int age;
    
        public Customer(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String toString() {
            return "name=" + name + ", age=" + age;
        }
    }
    

      

      

    --------------------------------------

    https://blog.csdn.net/u012524415/article/details/80327705

  • 相关阅读:
    NSIS附加数据库,分离数据库脚本代码
    C# 昨天今天明天上周本周下周上月本月下月等日期计算
    NSIS安装MSDE2000和NET2.0脚本代码
    sql 获取指定数据表的所有字段名称的字符串
    如何检测TerraGate的InternetLicense运行是否正常
    Skyline TEP5.1.3二次开发入门——初级(七)
    Skyline软件二次开发初级——2如何在WEB页面中控制三维地图的观察点坐标和角度
    如何实现Skyline与微软bing地图的联动
    Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象
    Skyline软件二次开发初级——1如何在web页面中添加控件和加载三维地图数据
  • 原文地址:https://www.cnblogs.com/Jomini/p/13716328.html
Copyright © 2020-2023  润新知