持续更新
区分方法的重写和重载
重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
两同:同一个类 相同法名
不同:参数列表不同,参数个数不同,参数类型
重写:子类对象调用父类同名同参数的方法。子类重写的方法的权限修饰符不能小于父类被重写的方法的权限修饰符
属性赋值顺序
默认初始化 显示初始化(在代码块中赋值) 构造器中初始化
通过对象.属性/对象.方法进行赋值
变量的分类
成员变量与局部变量的区别?
1、从语法上看:
成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数
成员变量可以被public private static等修饰符修饰,局部变量不能被访问控制修饰符以及static修饰
成员变量和局部变量可以被final修饰
2、从变量在内存中的存储方式来看:如果成员变量用static
修饰,则这个成员变量是属于类的,没有用static修饰,这个成员变量属于实例的。对象存在堆内存,如果局部变量时为基本数据类型,存储在栈内,引用数据类型,存放的是指向堆内存或者是指向常量池中的地址
3、从变量在内存中的生存时间看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失
4、成员变量没有被赋出值则提供默认值局部变量不会自动赋初值
java四种权限修饰符
①public:意为公开的,访问权限最高,可以跨包访问。
②protect:意为受保护的,权限次之,可以在同包和子/父类中访问。
③default:意为默认的,一般不写,权限次之,可以在同包中访问。
④private:意为私有的,权限最低,只能在本类中访问。
==与equals
==:基本数据类型比较值是否相等 引用数据类型比较地址值是否相同,即两个引用是否指向一个对象实体
equals:类没有重写equals方法,则等价于 ==
重写比较两个对象的内容是否相等
hashcode()
返回散列值
equals()
方法判断两个对象是否地址值相同,等价的两个对象散列值相同,但是散列值相同的两个对象不一定等价
在覆盖equals()
方法总是覆盖hashcode()
方法
clone()
clone()
方法是Object 的一个 protected
方法。Cloneable 接口只 是规定,如果一个类没有实现 Cloneable 接口又调用了 clone() 方法,就会抛出 CloneNotSupportedException
深拷贝和浅拷贝
深拷贝和浅拷贝都是对象的拷贝,创建对象本身的一个副本。
浅拷贝
复制原对象,不复制原对象的引用对象
package com.test;
public class ShallowCopy {
public static void main(String[] args) throws CloneNotSupportedException {
Teacher teacher = new Teacher();
teacher.setName("riemann");
teacher.setAge(27);
Student2 student1 = new Student2();
student1.setName("edgar");
student1.setAge(18);
student1.setTeacher(teacher);
Student2 student2 = (Student2) student1.clone();
System.out.println("拷贝后");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println(student2.getTeacher().getName());
System.out.println(student2.getTeacher().getAge());
System.out.println("修改老师的信息后-------------");
// 修改老师的信息
teacher.setName("Games");
System.out.println(student1.getTeacher().getName());
System.out.println(student2.getTeacher().getName());
}
}
结果:
两个引用student1和student2指向不同的两个对象,但是两个引用student1和student2中的两个teacher引用指向的是同一个对象
深拷贝
复制对象以及所引用的对象
public class DeepCopy {
public static void main(String[] args) throws CloneNotSupportedException {
Teacher2 teacher = new Teacher2();
teacher.setName("riemann");
teacher.setAge(27);
Student3 student1 = new Student3();
student1.setName("edgar");
student1.setAge(18);
student1.setTeacher(teacher);
Student3 student2 = (Student3) student1.clone();
System.out.println("拷贝后");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println(student2.getTeacher().getName());
System.out.println(student2.getTeacher().getAge());
System.out.println("修改老师的信息后-------------");
// 修改老师的信息
teacher.setName("Games");
System.out.println(student1.getTeacher().getName());
System.out.println(student2.getTeacher().getName());
}
}
参考博客
https://blog.csdn.net/weixin_31002061/article/details/112082466