目录
一、注解
java中的注解也称标注,可以用来对类、方法、属性、参数、包等进行标注。然后让编译器或运行时其他类进行解析。完成某个功能注解也可以编译到字节码文件中。
内置注解:JAVA中已经定义好的注解。
@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。@SuppressWarnings - 指示编译器去忽略注解中声明的警告。@FunctionalInterface 用于指示被修饰的接口是函数式接口。
元注解:修饰注解的注解。
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入 class 文件中,或者是在运行时可以通过反射访问。@Documented - 标记这些注解是否包含在用户文档中。@Target - 标记这个注解应该是哪种 Java 成员。@Inherited - 标记这个注解是继承于哪个注解类(默认注解并没有继承于任何子类)@Repeatable - 标识某注解可以在同一个声明上使用多次。
自定义注解。
二、克隆
克隆分为浅克隆、深克隆。
JAVA中对clone的实现?
①实现Cloneable接口
②重写clone方法(Object类中的方法)
浅克隆
克隆一个对象时,如果对象中有关联关系(has-a,把一个类当作另一个类的属性),只将关联对象的地址复制过来(只拿地址)
举例:
public class CloneDemo {
public static void main(String[] args) throws CloneNotSupportedException {
Student s1=new Student();
Address address=new Address();
address.setAddress("江苏");
s1.setName("Mike");
s1.setAge(20);
s1.setAddress(address);
Student s2=s1.clone();
s2.setAge(21);
s2.setName("Amy");
address.setAddress("陕西");
s2.setAddress(address);
System.out.println(s1);
System.out.println(s2);
}
}
public class Student implements Cloneable{
int age;
String name;
Address address;
@Override
protected Student clone() throws CloneNotSupportedException {
return (Student) super.clone();
}
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;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", address=" + address.address +
'}';
}
}
public class Address {
String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.