文章目录
常用类:Object
是所有类的基类/父类,所以类都默认继承Object。
方法
1)Class getClass()
(1)作用: 对象通过该方法,可以获得对象对应的类的字节码对象。
xx.java -> xx.class -> JVM
类加载 - 方法区 - 字节码对象
加载:类只加载一次,所以方法区中类信息只有一个,所以字节码对象也只有一个。
加载的触发条件(使用类) —>工具:类加载器(ClassLoader)
I: 实例化对象 new
II: 静态方法/静态变量
III:使用子类,父类必须先加载
IV: Class.forName(“java.lang.String”) --手动加载指定的类
V: String.class -> 获得类的字节码对象
(2)notify/notifyAll/wait * 3 -> 跟线程相关。
2)Object clone() - 克隆
(1)对象的克隆方式(图解)
深克隆:复制对象
是复制一份全新的,属性内容一致的对象,但是内存中的地址值一定不一样。
浅克隆:复制引用
(2)调用
clone调用时 -> not visible(不可见)
要求: clone的对象必须标记是可克隆的,因为他是protected修饰的,只能在子类中可见,所以要进行重写
(3)一般不会重写clone方法
I:因为clone方法不常用到
II: 可以直接使用 - 引用复制
III: 如果要重写clone方法,直接调用,则要实现Cloneable接口,否则会抛出CloneNotSupportedExecption,Cloneable是一个空接口,目的只有一个就是为了标记是可克隆的。
3)void finalize() - GC 垃圾回收机制
内存溢出:在内存中没有存储的地方。
内存泄漏:内存被无效对象占用。
一个对象分配内存之后,在使用结束时没有来得及释放,导致一直在占用内存,使得实际可用内存减少
GC - 垃圾回收机制,定时清理内存
I: 在程序运行时是开始启动,不定时回收内存中标记的垃圾,没有引用的对象,会被内存标记为垃圾。
II: GC是自动调用的,也可以手动调用GC - Sytem.gc();
总结: 原则上,Java中是不存在内存泄漏的
4)toString():将对象以字符串的形式输出
默认实现:
getClass().getName() + “@” +Integer.toHexString(hashCode())
@前:表示的是完整的类名
@后:表示16进制的hashCode值
如果想要自定义格式输出,那么就重写toString()
5)equals()
作用:判断两个对象[this 和 obj]是否相等
Object中默认实现方式:
this == obj -> 判断两个地址值相不相等
方法重写:
目的:自定义比较规则
步骤:
1.判断是不是同一个对象
2.判断是不是同一个类型
3.既不是同一个对象也不是同一个类型就直接返回fasle
6) hashCode()
作用:生成对象的hash值
跟内存中的存储位置相关。
public native int hashCode();
hashCode() 不是抽象方法,但是也没有方法体,就是因为他是本地方法,这是跟底层相关的方法。底层是由c实现。
native: 本地的
Java Native Interface