目录
2.cloneable接口(是一个空接口):为啥是一个空接口,有啥作用?
包:是一组类的集合,import语句能导入包下的类
先执行静态代码块,再执行实例代码块,最后执行构造方法
创建对象的方式:
1.new
2.cloneable接口(是一个空接口):为啥是一个空接口,有啥作用?
空接口也叫标志接口,代表当前的类是可以被克隆的
克隆方法需要 ①处理异常,②重写克隆方法
public class textdemo2 {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1=new Person(10);
person1.age=9;
Person person2= (Person) person1.clone();
person2.age=199;
}
}
class Person implements Cloneable{
public int age;
public void eat(){
System.out.println("吃");
}
public Person(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
这种情况是浅拷贝:
public class textdemo2 {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1=new Person();
System.out.println(person1.money.m);
Person person2= (Person) person1.clone();
System.out.println(person2.money.m);
}
}
class Money{
public int m=10;
}
class Person implements Cloneable{
public int age;
public String name;
public Money money=new Money();
public void eat(){
System.out.println("吃");
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", m=" + money +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
这样做是深拷贝:
public class textdemo2 {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1=new Person();
System.out.println(person1.money.m);
Person person2= (Person) person1.clone();
System.out.println(person2.money.m);
}
}
class Money implements Cloneable{
public int m=10;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Person implements Cloneable{
public int age;
public String name;
public Money money=new Money();
public void eat(){
System.out.println("吃");
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", m=" + money +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person tmp=(Person) super.clone();
tmp.money=(Money) this.money.clone();
return tmp;
//return super.clone();
}
}
在person里重写克隆方法的时候,相当于暂时创建了一个 tmp,将money也拷贝一份,tmp指向拷贝的money,再将person2指向tmp。
3.调用构造方法构造对象
string把双引号引起来的数据放到常量池,常量池就是哈希表
- class文件常量池:int a=10;(10就放在class文件常量池),是字节码文件,在磁盘上
- 运行时常量池:当程序把编译好的字节码文件,加载到JVM当中后会生成一个运行时常量池(方法区),实际上是class文件常量池
- 字符串常量池:主要存放字符串常量,本质上是哈希表
局部变量一定有栈,
字符串以数组的形式存储,
1.先看常量池里面有没有