主要是Object类中的一些总结和介绍,作为一个基础知识点
Object
-Object 首字母大写
01.所有类的超类,
02.一个类没有使用extend关键字明确标明继承关系,则默认继承object类
03. JAVA中的每一个类都可以使用object类中定义的方法
设计其主要目标之一是为了扩展--
final修饰方法表示该方法不允许被子类重写
非final方法设计成被覆盖的,在覆盖这些方法时需要遵守一些约定
Object的方法
其方法分为非final方法和final方法
final方法 类和 线程
getClass() public final native Class<?> getClass()
notify() public final native void notify();
notifyAll() public final native void notifyAll();
wait() public final void wait() throws InterruptedException {
public final void wait(long timeout, int nanos) throws InterruptedException
public final native void wait(long timeout) throws InterruptedException
非final方法
hashCode() public native int hashCode();
equals() public boolean equals(Object obj) { return (this == obj);}
toString() public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}
按照public 以及protected 复制和垃圾回收
protected native Object clone() throws CloneNotSupportedException;
protected void finalize() throws Throwable { }
getClass() 方法返回对象所属的类,是一个 Class 对象。通过 Class 对象可以获取该类的各种信息,包括类名、父类以及它所实现接口的名字等
方法 说明
Class getClass() 返回一个对象运行时的实例类
void notify() 激活等待在该对象的监视器上的一个线程
void notifyAll() 激活等待在该对象的监视器上的全部线程
int hashCode() 返回该对象的散列码值
boolean equals(Object) 比较两对象是否相等- equals() 方法用于对象与对象之间的比较
String toString() 返回该对象的字符串表示
void wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
Object clone() 创建与该对象的类相同的新对象
void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,对象的圾回收器调用该方法
关于继承后的覆盖
覆盖equals @override 和不覆盖equals
equals: 自反性-对象必须等于自身
对称性- 任何两个对象对于 是否相等 的问题必须保持一致
传递性--以及一致性--非空性
使用方法:使用 == 检查参数引用是否为这个对象的引用
使用 instanceof 检查参数是否为正确的类型
检查关键域
要覆盖hashCode
覆盖hashCode --和equals 中的一致性
相等的对象必须具有相等的hash code 散列值
toString() -返回包含访问的信息
修饰类和修饰方法
final 关键字 修饰类-修饰方法-修饰变量
public/project
native 关键字告诉JVM调用的是该方法在外部定义
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,
并且被编译成了DLL,由java去调用
方法-有返回值和没有返回值-有返回值类型没有返回值类型
没有返回值:
01.一个方法不需要返回值时可以使用void关键字
02.不使用返回值类型-- 构造方法
01.修饰类以及方法
public/project --使用权限-作用域的限制--变量或者方法的作用域
作用域 类内部 本包 子类 外部包
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly ,也即是“包访问权限”。
02.final --和继承-重写-改变有关
final修饰
Class 类表示不允许被继承
修饰方法-- 重写(Override) 重载(Overload)和 重写(Override)
final修饰的方法可以被继承 表示该方法不允许被子类重写
不能修饰构造方法
修饰变量表示不允许修改
方法内部的局部变量 => 在使用之前被初始化赋值即可
类中成员变量 => 只能在定义和构造代码块,构造方法中进行初始化设置
基本数据类型的变量 => 赋值后不允许被修改
引用数据类型的变量 => 初始化后不能再指向另一个对象,但是对象的内容可以改变
03.static 初始化相关内容
1)static方法
2)static变量 static是不允许用来修饰局部变量
3)static代码块
方便在没有创建对象的情况下来进行调用(方法/变量)
Java编译阶段:类变量的初始化-实例变量的初始化
编译时类型和运行时类型
编译器先执行了类成员数据的初始化过程(静态的和非静态的都是)。然后再执行对象的构造器
Java虚拟机通过装载、连接(验证、准备、解析)、初始化来使得一个Java类型可以被Java程序所使用
一些接口和类
01. Comparable 接口 Comparator 接口
Comparable 接口 java.lang
public interface Comparable<T> { public int compareTo(T o);}
只有一个方法compare,
比较此对象与指定对象的顺序,
返回值是int,有三种情况 如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
Comparator 接口
public interface Comparator<T>{ int compare(T o1, T o2); boolean equals(Object obj); }
区别:
Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”
这些类是可以和自己比较
Comparator 是比较器,我们若需要控制某个类的次序
Comparable 接口位于 java.lang包下, Comparator 接口位于java.util包下。
Comparator 接口 compare
包含compare()和equals()两个方法
Comparable 接口 compareTo
只包含一个compareTo()方法,给两个对象排序 返回值
e1.compareTo(e2) > 0 即 e1 > e2
e1.compareTo(e2) = 0 即 e1 = e2
e1.compareTo(e2) < 0 即 e1 < e2
02.Iterable 接口和 Iterator 接口
Iterable 接口 java.lang.Iterable
public interface Iterable{ java.util.Iterator iterator();}
able结尾的表示 能...样,可以做...-- 是用接口定义的 iterator方法提供的。
也就是iterator方法需要返回一个Iterator对象
Iterator 接口 java.util.Iterator or 结尾是都是表示 ...样的人 or ... 者
iterator就是迭代者,我们一般叫迭代器包含3个方法: hasNext , next , remove
03.Array 类和 Arrays类
数组类Array public final class Array extends Object
元素的类型必须相同。
它无法判断其中实际存有多少元素,length只是告诉我们array的容量
静态类Arrays public class Arrays extends Object
静态类专门用来操作array ,提供搜索、排序、复制等静态方法
equals() sort()
04.Collection 接口 和 Collections 类
Collection 接口 java.util.Collection 是一个集合接口(集合类的一个顶级接口)
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,
用于对集合中元素进行排序、搜索以及线程安全等各种操作
排序(Sort) 混排(Shuffling) 拷贝(Copy)等
Cloneable接口 --缺少clone方法
Object 类的clone 方法是受到保护的
其他说明:
通过接口引用对象 -- 通过类 引用对象
01.声明接口的变量-接口的变量必须引用实现了接口的类对象
Collection<String> c = new HashSet<>();
如果有合适的接口类型--那么对于参数-返回值-变量和域,都应该使用接口类型进行声明
如果没有合适的接口类型,可以用类来引用对象
02.接口中定义这些常量,调用的时候直接接口名.常量名来调用