2003 iis网站发布,免费网站收录,代码写好了怎么做成网页,公司建网站怎么建目录
一.Java注解
什么是注解#xff1f;
内置注解
元注解
二.对象克隆
什么是对象克隆?
为什么用到对象克隆
三.浅克隆深克隆 一.Java注解
什么是注解#xff1f; java中注解(Annotation)又称java标注#xff0c;是一种特殊的注释。 可以添加在包#xff0c;类
内置注解
元注解
二.对象克隆
什么是对象克隆?
为什么用到对象克隆
三.浅克隆深克隆 一.Java注解
什么是注解 java中注解(Annotation)又称java标注是一种特殊的注释。 可以添加在包类成员变量方法参数等内容上面Java标注可以通过反射获取标注内容。 注解会随同代码被编译到字节码文件中在运行时可以通过反射机制获取到类中注解,然后根据不同的注解进行相应的解析。 内置注解
是java中已经定义好的注解。
Override检查该方法是否是重写方法。如果发现其父类或者是引用的接口中并没有该方法时会报编译错误。Deprecated标记过时方法。如果使用该方法会报编译警告。SuppressWarnings指示编译器去忽略注解中声明的警告。FunctionalInterface用于指示被修饰的接口是函数式接口。 元注解
注解的注解用来定义其他注解的注解。
Target(ElementType.METHOD)
Retention(RetentionPolicy.SOURCE)
public interface Override {
}
Target(ElementType.METHOD) 标注此注解可以作用在方法上面。Target({ElementType.TYPE, ElementType.METHOD})标注此注解可以作用在类和方法上面。Retention(RetentionPolicy.SOURCE) 在编译阶段有用的可以不编译到字节码中。Retention(RetentionPolicy.RUNTIME)在运行时有用的编译到字节码文件中去。 二.对象克隆
什么是对象克隆? 在已有的对象基础克隆出一个新的对象并将已有对象中的属性值复制到新克隆出来的对象中。
为什么用到对象克隆 经常在项目开发中各层数据传输时需要将一层中的数据封装到另一个对象中去。
java中如何实现一个基本的对象克隆
public class Person implements Cloneable{int num;String name;Overrideprotected Person clone() throws CloneNotSupportedException {Person person (Person)super.clone();return person;}
} //测试Person p1 new Person(100,jim);Person p2 p1.clone(); //克隆一个新的对象System.out.println(p1p2);//false 说明是两个不同的对象 三.浅克隆深克隆
对于基本类型在对象克隆时可以将值直接复制到新对象中。
int a 10;int b a;b20; 浅克隆主要是在于对象中关联的另一个对象是否能被克隆出一个新的对象。 如果克隆时只是将关联对象的地址进行复制那么就属于浅克隆。 如果克隆时将关联的对象也一同克隆出了一个新的对象那么就属于深克隆。 浅克隆 深克隆 简单来说浅克隆复制的是基本类型的值复制引用类型的地址深克隆则会创建全新的对象实现对象及其引用类型属性的完全复制。
如何实现深克隆
方式1: 在克隆对象时将对象中关联的对象也一同进行克隆虽然能实现但是要逐级进行克隆,层级较多时比较麻烦。必须实现Cloneable接口。
Overrideprotected Person clone() throws CloneNotSupportedException {Person person (Person) super.clone();//深度复制 联同person中关联的对象也一同克隆.person.address (Address) person.address.clone();return person;}
方式2: 使用对象序列化反序列化 需要我们自己定义一个克隆方法先将对象进行序列化然后再进行反序列化自动将多级关联的对象也一并重新创建使用起来比较方便注意需要序列化的类必须要实现Serializable接口。
public Person myclone() {Person person null;try { // 将该对象序列化成流,因为写在流里的是对象的一个拷贝而原对象仍然存在于JVM里面。所以利用这个特性可以实现对象的深拷贝//序列化将java中的对象输出写到文件中ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(this);// 将流序列化成对象//反序列化将文件的信息输入读到程序中创建一个新的对象ByteArrayInputStream bais new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois new ObjectInputStream(bais);person (Person) ois.readObject();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return person;} 对象序列化 将java中的对象输出到一个文件中ObjectOutputStream 反序列化 将文件中的信息输入到程序,创建一个新的对象ObjectInputStream 创建对象的几种方式: 1.new 对象 2.反序列化 3.反射机制 4.对象克隆 感谢你的阅读与关注如有问题欢迎探讨