zoukankan      html  css  js  c++  java
  • Java基础知识强化25:Java创建对象的四种方式

    1. Java程序中对象的创建有四种方式:

    ● 调用new语句创建对象,最常见的一种

    ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法

    ● 调用对象的clone()方法

    ● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

    2. 四种方式的代码演示,如下:

    (1)创建Java工程,如下:

    (2)代码如下:

    Person.java,如下:

     1 package com.himi.demo;
     2 
     3 public class Person implements Cloneable {
     4     
     5     private int age;
     6     private String name;
     7     
     8     public Person() {
     9         
    10     }
    11     public Person(int age, String name) {
    12         this.age = age;
    13         this.name = name;
    14     }
    15     public int getAge() {
    16         return age;
    17     }
    18     public void setAge(int age) {
    19         this.age = age;
    20     }
    21     public String getName() {
    22         return name;
    23     }
    24     public void setName(String name) {
    25         this.name = name;
    26     }
    27     
    28     
    29     @Override
    30     protected Object clone() throws CloneNotSupportedException {
    31         // TODO Auto-generated method stub
    32         return super.clone();
    33     }
    34     
    35     
    36 
    37 }

    与此同时,Person2.java,如下:

     1 package com.himi.demo;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Person2 implements Serializable {
     6     
     7     private static final long serialVersionUID = 8735345334183008720L;
     8     private int age;
     9     private String name;
    10     
    11     public Person2() {
    12         
    13     }
    14     public Person2(int age, String name) {
    15         this.age = age;
    16         this.name = name;
    17     }
    18     public int getAge() {
    19         return age;
    20     }
    21     public void setAge(int age) {
    22         this.age = age;
    23     }
    24     public String getName() {
    25         return name;
    26     }
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30     
    31     
    32     @Override
    33     public String toString() {
    34         // TODO Auto-generated method stub
    35         return "name=" + name + ", age=" + age; 
    36     }
    37     
    38     
    39 
    40 }

    测试类,如下:

     1 package com.himi.demo;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 import java.io.ObjectInputStream;
     6 import java.io.ObjectOutputStream;
     7 import java.util.Date;
     8 
     9 public class TestDemo {
    10     
    11     public static void main(String[] args) throws Exception {
    12         //1. 使用new构造方法
    13         Person p1 = new Person(23,"Jack");
    14         System.out.println("使用new构造方法:"+p1);
    15         
    16         //2. 使用反射,默认调用空构造,必须实现,负责报错:InstantiationException
    17         Person p2 = (Person) Class.forName("com.himi.demo.Person").newInstance();
    18         System.out.println("使用反射:"+p2);
    19         
    20         //3. 使用clone,必须实现Cloneable接口,否则抛出CloneNotSupportedException
    21         Person p3 = (Person) p1.clone();
    22         System.out.println("使用clone:"+p3);
    23         
    24         //4. 用对象流来实现,前提是对象必须实现 Serializable
    25         System.out.println();
    26         System.out.println("----------用对象流来实现,前提是对象必须实现 Serializable---------");
    27         ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream("p.txt")); 
    28         //序列化对象 
    29         Person2 obj = new Person2(24,"haobo"); 
    30         out.writeObject("你好!"); 
    31         out.writeObject(new Date()); 
    32         out.writeObject(obj); 
    33         out.writeInt(123); //写入基本类型数据 
    34         out.close(); 
    35         
    36         //反序列化对象 
    37         ObjectInputStream in = new ObjectInputStream(new FileInputStream("p.txt")); 
    38         
    39         System.out.println("obj1=" + (String) in.readObject()); 
    40         System.out.println("obj2=" + (Date) in.readObject()); 
    41         
    42         Person2 obj1 = (Person2) in.readObject(); 
    43         System.out.println("obj1=" + obj1); 
    44         
    45         int num = in.readInt(); 
    46         System.out.println("num=" + num); 
    47         
    48         in.close(); 
    49     }
    50 
    51 }

    运行结果,如下:

     

  • 相关阅读:
    Django数据库 相关之select_related/prefetch_related
    Django 序列化
    Django 信号
    Django缓存配置和使用
    Django FBV/CBV、中间件、GIT使用
    学员管理系统(SQLAlchemy 实现)
    Oracle的三种高可用集群方案
    linux系统安装硬盘分区建议
    Linux下expdp自动备份
    impdp导入报错ORA-39070:无法打开日志文件
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4818847.html
Copyright © 2011-2022 走看看