Java类的实例化
来源:互联网 发布:排序算法比较次数 编辑:程序博客网 时间:2024/05/23 10:48
Java中,类的实例化方法一共有四种途径:
1.使用new
操作符
2.调用Class对象的newInstance()
方法
我们在自定义图书类这个例子中,编写了有参数的构造方法public Book(String name, String author, String ISBN)
。但如果类中没有定义构造方法,编译器便会自动添加一个无参数的构造方法。使用构造方法创建对象虽然常用,但并不灵活。因此,我们再来了解一下动态化实例类,也就是调用Class对象的newInstance()
方法,通过反射创建对象。了解一下反射的概念:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
package com.shiyanlou.course;import java.io.File;import java.lang.reflect.Constructor;//需要引用上述两个包public class Test { public static void main(String[] args) { try { Constructor<File> constructor = File.class.getDeclaredConstructor(String.class); //获得File类的Constructor对象 System.out.println("Create File Object with reflection."); //使用反射创建File对象 File file = constructor.newInstance("/home/shiyanlou/Desktop/MyFile.txt"); System.out.println("Use File Object to create MyFile.txt on desktop."); //指定了创建的路径为桌面,名称为“MyFile.txt” file.createNewFile(); //创建新的文件 System.out.println("File is created ?" + file.exists()); //验证文件是否创建成功 } catch (Exception e) { e.printStackTrace(); } }}
3.调用clone()
方法,对现有实例的拷贝。虽然Clone方法在Object中存在的,但是如果想要调用clone必须实现Cloneable接口。要实现深拷贝必须在clone方法中调用相应对象的clone函数。
public class Glasses implements Cloneable { private String color; public String getColor() { return color; } public void setColor(String color) { this.color = color; } protected Object clone() throws CloneNotSupportedException { return super.clone(); } } //在Student类中包含Glasses,代码如下: public class Student implements Cloneable{ private String studentName; private Glasses glasses; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public Glasses getGlasses() { return glasses; } public void setGlasses(Glasses glasses) { this.glasses = glasses; } protected Object clone() throws CloneNotSupportedException { Student student = (Student) super.clone(); student.glasses= (Glasses) glasses.clone(); return student; } } //如果想对Glasses进行拷贝,而不是仅仅克隆Glasses的引用,在clone方法中增加了student.glasses= (Glasses) glasses.clone(); public static void main(String args[]){ Student student = new Student(); student.setAge(10); student.setStudentName("xiaobai"); Glasses glasses = new Glasses(); glasses.setColor("red"); student.setGlasses(glasses); try { Student s1 = (Student) student.clone(); s1.setStudentName("xiaohei"); System.out.println("s1.color:"+s1.getGlasses().getColor()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } }
4.通过ObjectInputStream
的readObject()
方法反序列化类
0 0
- java 类的实例化
- Java类的实例化
- Java类实例化的顺序
- java类的实例化探究
- java类的实例化过程
- java实例化类的方法
- Java实例化类的方法
- Java 实例化类的方法
- Java 实例化类的方法
- java包装类的实例化秘密
- 浅谈Java类的实例化
- Java类的实例化过程
- Java中类的实例化方式
- Java 类的实例化顺序
- Java类的定义及其实例化
- Java类被实例化的方法
- Java类的定义与实例化
- Java类的实例化顺序
- Android 输入法管理
- 使用ADB发送模拟touch的操作
- Discuz论坛主页和板块分区使用不同的模板
- linux命令_压缩文件
- 仿太极图自定义view
- Java类的实例化
- Scala:函数式编程之下划线underscore
- 作用域闭包
- 十二之续、快速排序算法的深入分析
- Mac使用笔记(一):文件显示完整路径
- 备忘链接
- 设置paint.setXfermode(mMode)无效
- LeetCode 319. Bulb Switcher
- 十二之再续:快速排序算法之所有版本的c/c++实现