Java应用程序编程接口APIDay1

本文详细介绍了Java中的Object类,包括其作为所有类的父类、无参构造方法、非静态方法如toString()、equals()、hashCode()、getClass()、clone()和finalize()。此外,还讨论了内存管理中的垃圾回收机制、内存溢出和内存泄漏的概念及其区别。重点讲解了equals()和hashCode()在对象比较中的应用,以及clone()方法在深克隆和浅克隆中的差异。最后,提到了内存溢出和内存泄漏可能导致的性能问题。
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.内存溢出 和 内存泄漏的区别

  内存溢出 和 内存泄漏
  内存溢出:内存中没有存储的位置
  内存泄漏:内存被无效对象或变量占用
  结论:内存泄漏的堆积最终会导致内存溢出,也就是导致内存逐渐减少,从而降低程序性能.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值