单例设计模式
(有点类似属性的封装,只不过单例设计模式是封装对象)
目的为了确保程序在内存中只有一个对象存在(被程序共享)
使用单例设计模式可以节省内存空间,提高性能。因为很多情况下,有些类是不需要重复产生对象的。
如果重复产生对象的话,会导致大量的内存空间被占用,性能降低。
equal的重写思路
因为是对变量引用的比较判断
1.先判断是不是同一个内存地址
2.在判断内存地址的属性
Person类的equal方法重写
public boolean equal(Object o){
//传入的对象引用o如果和对比对象自身this
//内存地址一样(即指向同一个堆内存)则两者的属性内容一定一样
if (this = o){
return true;
}
//如果传入的引用变量是null
if (o == null) {
return false;
}
//判断传入的对象类型于对比对象的类型是否相同类型
//使用instanceof关键字
//如果类型相同继续判断
if (o instanceof Person){
//两个对象类型相同,把传入的对象强转成Person类
Person p = (Person)o;
//再对属性进行比较
if(this.name.equals(p.name) && (this.age,equals(p.age))){
//相同
return true;
}
}
return false
}
Person类的equal方法重写
public boolean equal(Object o){
//传入的对象引用o如果和对比对象自身this
//内存地址一样(即指向同一个堆内存)则两者的属性内容一定一样
if (this = o){
return true;
}
//如果传入的引用变量是null
if (o == null) {
return false;
}
//判断传入的对象类型于对比对象的类型是否相同类型
//使用instanceof关键字
//如果类型相同继续判断
if (o instanceof Person){
//两个对象类型相同,把传入的对象强转成Person类
Person p = (Person)o;
//再对属性进行比较
if(this.name.equals(p.name) && (this.age,equals(p.age))){
//相同
return true;
}
}
return false
}
3.排序
冒泡排序,选择排序,插入排序、快速排序(时间复杂度、空间复杂度)
4.接口、抽象类之间的关联,实现接口,继承父类
5.重载与重写的区别
6.面向对象三大思想
1、调用不同子类时堆内存的分配情况???
2、main()方法详解
3、超类
4、哈希代码
5、hashCode方法的常规协定
6、HashMap方法
7、输出的内容是否放在栈内存
8、方法用栈内存加载的
9、java斐波那契数列
10、数组数据存放在哪里(顿内存?)
(1)使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或 者实现一个接口。(为什么)(类是可以实现接口同时继承抽象类的,二匿名内部类并不行)