Java中,类的实例化方法有四种途径:
1)使用new操作符
2)调用Class对象的newInstance()方法
3)调用clone()方法,对现有实例的拷贝
4)通过ObjectInputStream的readObject()方法反序列化类
1.ClassInstance.java
1 import java.io.*; 2 3 class ClassInstance implements Cloneable, Serializable { 4 private String str = "测试..."; 5 public void fun(){ 6 System.out.println(str); 7 } 8 public ClassInstance(String str){ 9 System.out.println("有参类的实例化"); 10 this.str += str; 11 } 12 public ClassInstance(){ 13 System.out.println("无参类的实例化"); 14 } 15 public Object clone(){ 16 return this; 17 } 18 }
2.ClassInstanceTest.java
1 import java.io.*; 2 import java.lang.reflect.*; 3 4 public class ClassInstanceTest{ 5 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, 6 IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{ 7 //第一种类的实例化方式 8 ClassInstance ci01 = new ClassInstance("01"); 9 ci01.fun(); 10 11 //第二种类的实例化方式 12 ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance(); 13 ci02.fun(); 14 15 //第三种类的实例化方式 16 ClassInstance ci03 = (ClassInstance) ci01.clone(); 17 ci03.fun(); 18 19 //第四种类的实例化方式 20 FileOutputStream fos = new FileOutputStream("ci.tmp"); 21 ObjectOutputStream oos = new ObjectOutputStream(fos); 22 oos.writeObject(ci01); 23 oos.close(); 24 fos.close(); 25 26 FileInputStream fis = new FileInputStream("ci.tmp"); 27 ObjectInputStream ois = new ObjectInputStream(fis); 28 29 ClassInstance ci04 = (ClassInstance) ois.readObject(); 30 ois.close(); 31 fis.close(); 32 33 ci04.fun(); 34 System.out.println("--------------------额外测试--------------------"); 35 ClassInstance ci05 = null; 36 //额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式 37 //获得类的构造信息 38 Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors(); 39 //找到我们需要的构造方法 40 for(int i=0;i<ctor.length;i++ ){ 41 Class[] cl = ctor[i].getParameterTypes(); 42 if(cl.length == 1){ 43 //实例化对象 44 ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"}); 45 } 46 } 47 ci05.fun(); 48 } 49 }
3.输出结果
1 有参类的实例化 2 测试...01 3 无参类的实例化 4 测试... 5 测试...01 6 测试...01 7 -------------------额外测试-------------------- 8 有参类的实例化 9 测试...05
相关推荐
在Point3D中的主函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 ...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...
abstract 说明一个类为抽象类,抽象类是指不能直接实例化对象的类。 final 说明一个类为最终类,即改类不能再有子类。 public 说明类为公共类,该类可以被当前包以外的类和对象使用。 private 说明类为...
实例化对象:对象名称=new 类名(); 类名对象名称=new 类名(); 访问属性:对象名称.属性名 访问方法:对象名称.方法名() 匿名对象:在一个对象被创建之后,调用对象的方法是可以不定义对象的引用 变量,直接...
学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...
2) 类型:Java 中的集合类都把对象当作没有具体类型对待(它们将其当作 Object 类型 处理),而 Object 类型是 Java 中所有类的根类,从某种角度看这种处理方法是非常 合理的,我们只需构建一个集合,然后所有 Java...
Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别? error 表示恢复...
反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...
Java EJB简单例子,这是HelloWorldBean的Home接口,它是EJB对象的生成库,无状态会话(将在下一个实例中具体讲解)Bean,这个接口是客户端与EJB对象相互作用的中间途径,通过Client触发调用Bean方法: try { //...
ava语言允许通过程序化的方式间接的对Class操作,Class文件...并分别通过Java实例对这些信息进行描述,Java允许用户通过这个Class相关的描述对象来间接调用类的功能。这就是为程序化方式操作Class文件提供了一个途径。
–static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员. 定义构造器的语法格式 •[修饰符] 构造器名(形参列表) {……} –修饰符可以是public protected private 构造器...
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...
§1.2 程序设计方法与语言 ..............................................................................................5 1.2.1 早期的程序设计 ........................................................
不同的类型的游戏有着自身的特点,每一种类型的游戏都有一定的支持人群。开发出一款良好的游戏,了解各种类型的基本特点是很有必要的。而“雷电”游戏就属于上述类型中的STG(射击类)游戏,STG(Shooting Game)...
定制警报这是一个小型库,其中包含4种警报,因此您可以在编程时在Java中使用它们。 它们是由JDialog组件制成的,它们是Modal的,无论您是使用JFrame Form还是JPanel都可以实现。版本1.0.0贡献者Yonier Asprilla 细节...
市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业...
1022类与实例 1023对象属性与操作 1024对象类的关联 103聚集、 组合、 继承和多态 1031聚集与组合 1032抽象与继承 1033多态 104习题 第11章对象设计模式 111对象设计模式概念 1111历史背景 ...
对 C++ 来说,前面例子中 Date 类的属性就是 day、month 和 year,而你添加了 Get 和 Set 方法。C# 提供了一种更加便捷、简单而又直接的属性访问方式。 所以上面的类应该写成这样: 复制内容到剪贴板 代码: using ...
程序,是管理方式的一种,是能够发挥出协调高效作用的工具,在我们的社会主义建设事业或者说现代化建设中,应该充分重视它的作用,应该不断地将我们的工作从无序整改到有序。 可是,当我们只关注形式而不关注...