Object类、常用包:时间相关
1.概念
Object是所有类的基类/父,所有类都默认继承Object类,也就是说会默认继承Object类中所以有的方法.
2.特点
a.Object定义在java.lang包,lang包是java的核心包,此包中所有类,在使用时都不需要进行import导入.
b.有且只有一个无参构造方法.
c.Object类中没有静态方法,所以都只能使用对象来调用
3.Object中的方法 - 11个
1) toString():字符串形式输出内容
2) equals():比较两个对象是否相等
3) hashCode():计算内存地址值
4) getClass():获取类的字节码对象
5) clone():克隆 - 深克隆 和 浅克隆
6) finalize():垃圾回收机制 GC - 内存溢出 和内存泄漏
7) wait() * 3: 休眠 - 线程
8) notify()/notifyAll(): 唤醒 - 线程
1)toString():字符串形式输出内容
a.作用:将对象以字符串的形式进行输出
b.默认实现:
@前: 表示完整的类名(全限定类名)
@后: 表示十六进制的hashCode值(地址值)
c.调用: 打印对象时,会自动调用对象的toString()
d.方法可以重写
目的: 以自定义的格式进行输出.
2)equals():比较两个对象是否相等
a.作用:比较this和obj是否相等(this表示当前对象,obj表示传进来的参数)
b.方法重写
c.目的:自定义对象的比较比较
步骤:
1.判断是不是同一个对象
2.判断是不是同一种类型
3.判断是不是同一种类型但不同对象
3)hashCode():计算内存地址值
a.native关键词: Java Native interface - java的的本地接口
b.本地方法:方法定义上使用native关键词修饰.
c.默认实现,底层代码使用的是c语言进行计算内存位置.
当new对象时,会根据提供的对象属性进行计算位置.
4)getClass():获取类的字节码对象
a.作用:获取类的字节码对象
b.类加载
①.位置:加载到JVM中方法区
②.类加载次数:类有且只会加载一次
③.触发类加载的条件: 工具 - 类加载器
a.实例化对象,也就是new对象
b.调用静态变量 / 静态方法
c.调用getClass(),获取类的字节码对象
类名.class,获取类的字节码对象
d.Class.forName("全限定类名") --手动加载指定类
5)clone():克隆(复制)
a.深克隆(深拷贝):复制对象,对象的读写
实现场景:
①.克隆对象的Class实现Cloneable接口
②.克隆对象的Class实现Serializable接口
③.使用开源工具,Json工具类
b.浅克隆(浅拷贝):复制引用
6)finalize():垃圾回收机制 GC - 内存溢出
a.finalize的作用:
构造方法和析构函数
构造方法:创建对象时调用
析构函数:回收对象时调用
b.对象的finalize()的特点:
①.垃圾回收机制执行的时间是不固定的,不确定的.
②.垃圾回收机制是自动调用,自动回收的,但是也可以手动回收,使用System.gc(),进行手动回收垃圾.
c.JVM中,什么东西会被称之为垃圾?
指的是JVM中堆中没有引用指向的对象,称之为垃圾.
计算没有引用的对象的算法:
①.可达性分析法
②.引用计数法
d.内存溢出 和 内存泄漏
内存溢出:内存中没有存储的位置
内存泄漏:内存被无效对象或变量占用
结论:内存泄漏的堆积最终会导致内存溢出,也就是导致内存逐渐减少,从而降低程序性能.
e.内存溢出的情况:
①.方法区溢出:加载类到达内存上限
②.栈溢出: 无线递归调用
③.堆溢出: java堆内存不够
程序中有死循环
f.内存泄漏的情况:
①.静态集合类(程序运行一直存在 例子:所有的集合类)
②.各种连接情况,例如:数据库的连接,网络连接,IO连接
③.变量不合理的使用区域
_______________________________________________
面试题
1.== 和 equals的区别
使用 == 比较
Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。
引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。
使用 equals 比较
equals方法是Object类的一个方法,Java当中所有的类都是继承于Object这个超类。
JDK1.8 Object类equals方法源码如下,即返回结果取决于两个对象的使用==判断结果。
2.内存溢出 和 内存泄漏的区别
内存溢出 和 内存泄漏
内存溢出:内存中没有存储的位置
内存泄漏:内存被无效对象或变量占用
结论:内存泄漏的堆积最终会导致内存溢出,也就是导致内存逐渐减少,从而降低程序性能.
本文详细介绍了Java中的Object类,包括其作为所有类的父类、无参构造方法、非静态方法如toString()、equals()、hashCode()、getClass()、clone()和finalize()。此外,还讨论了内存管理中的垃圾回收机制、内存溢出和内存泄漏的概念及其区别。重点讲解了equals()和hashCode()在对象比较中的应用,以及clone()方法在深克隆和浅克隆中的差异。最后,提到了内存溢出和内存泄漏可能导致的性能问题。
16万+

被折叠的 条评论
为什么被折叠?



