目录
一.hashCode()和equals()
1.hashCode()和equals()都是object的固有属性
equals()得出对象的地址 hashcode()我觉得得出的整数值也是对应对象的地址的
2.规定:equals()相等的两个对象,hashcode()一定相等;
hashcode()相等,equals()可能相等,也可能不等。
3.对于String,他重写了equals()和hashCode()。。
例如:
String s1=new String("nishizhu");
String s2=new String("nishizhu");
他们两个是s1==s2
equals现在变为比较值是否相同, 但是他们其实并不是存储在同一个地址,所以必须重写hashcode。
为什么equals()不同的但是hashcode()却相同呢? 因为在往hsah表里面添加数据的时候产生了hash冲突,利用拉链法会把数据添加到链表上面去,所有就造成了hashcode相同,但是equal()(比较的是地址)不同的情况
二:java的三大特征
1.封装
封装就是将类的一些信息隐藏在类的内部,只有本类能访问,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问
实现步骤:
在属性前面加上private,
例如:
public class Dog {
private String name="zzh";
int sex=1 ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
Dog dog=new Dog();
int a=dog.sex;//直接调用sex能调用,因为他是public修饰的
//dog.name;会报错,因为他是private修饰的,不能直接调用,得需要通过getter和setter方法调用
dog.setName("nima");
System.out.println(dog.getName());
System.out.println(a);
}
}
2.继承
继承就是就是子类继承父类的特征和行为,使子类具有父类的一些方法和属性
3.多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
继承也是多态的实现形式
使用的 时候的具体表现就是向上转型啊。。就是父类引用可以持有子类对象。那么父类的引用只能使用父类中有的方法,并且调用的时候调出来的是子类中重写过的
向上转型就是多态的一种形式:
形式:父类类型 变量名=new 子类类型();
此时,虽然该变量指向的是子类对象,但表现为一个父类的形象,可以调用一切父类的方法,子类特有的方法将不能调用。
因此在调用多态的时候要注意:1.在成员变量的编译看父类中是否存在,不存在就编译失败
2.成员变量运行父类中的变量
3.成员方法编译看父类中是否存在,不存在就编译失败
4.成员方法运行子类重写的方法
三.Object类的方法
1.getcCass()方法
getClass()返回一个对象的运行时类 如:
Class a=对象.getClass();//得到的是该对象的字节码文件 a.getName()得到名字
2.equals()
3.hashcode()
4.toString()方法:
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成
5.notify() 唤醒在此对象监视器上等待的单个线程
6.notifyAll() 唤醒在此对象监视器上等待的所有线程
7.wait() 导致当前线程等待
四:进程和线程(我老是不能说出这两者的概念)、协程
1.进程是操作系统资源分配的基本单位
2.而线程是任务调度和执行的基本单位
系统运行一个程序即是一个进程从创建,运行到消亡的过程。
一个进程在其执行的过程中可以产生多个线程。
3.协程:协程是一种比线程更加轻量级的存在,正比如一个进程下有一些线程,一个线程下面也有若干个协程,协程是人为控制,不受操作系统的管理和调度