20220628

本文详细介绍了Java的基础知识,包括JDK、JRE和JVM的区别,对象的==和equals方法的使用,装箱与拆箱的概念,hashCode的作用及其与equals的关系,final、finally和finalize的用法。此外,还讨论了Math类的取整方法,字符串的操作,普通类与抽象类以及接口的区别,异常处理的try-catch-finally结构,以及javap工具的使用。
摘要由CSDN通过智能技术生成

Java基础

1.jdk,jre,jvm

jvm就是Java虚拟机;jre就是Java运行时环境,包含jvm,还有一些Java基础类库;jdk就是Java开发工具包,包含jre,还有一些Java源码编辑器javac,监控工具jconsole。

2.==和equal

==是关系运算符,equals是方法;==的作用是判断两个对象的地址是否相等,是不是同一个对象,作为基本数据类型比较的是值,作为引用数据类型比较的是内存的地址;equals是比较的是两个对象的内容是否相等,类没有覆盖equals方法时,object的equal方法等价于==;类覆盖equals方法,就是重写这个方法来比较两个对象的内容是否相等。除此之外,==比equals的运行速度快,因为==只是比较引用。

3.装箱,拆箱

装箱是基本数据类型转换为包装器类型的过程,通过调用包装器类型的valueof实现的;拆箱是包装器类型转换为基本数据类型的过程,通过调用包装器类型的(int)value实现的。

4.hashCode

hashCode的作用是获得哈希码,就是一个int类型的整数,用来确定对象在哈希表中的索引位置,hashCode只有在散列表中才有用,当把一个对象加入到hashSet中时,首先会计算对象的hashCode值来判断对象加入的位置,同时与已经加入的对象的hashCode值比较,若不同则加入,若相同则需要调用equals方法来判断两个对象是否真的相同。

5.hashCode与equals的相关规定

两个对象相等。hashCode值一定相等,调用equals方法返回的都是true;两个对象有相同的hashCode值,两个对象不一定相等,所以重写equals方法时,必须重写hashCode方法,确保equals方法相等时,两个对象的hashCode值也相等。

6.final,finally,finalize

final:被final修饰的类不能被继承,被final修饰的成员变量必须初始化,并且初始化后不能被重新赋值,被final修饰的方法不能被重写;finally是一场处理的一部分,只能用在try/catch语句中 ,finally语句块中的代码最后一定会执行,除了一些特殊情况,(比如jvm结束,直接返回。抛出异常,系统退出,未执行到 try-finally 语句块);finalize方法是在对象被回收时由jvm调用,特殊情况下,可重写 finalize() 方法,当对象被回收的时候释放一些资源,须调用 super.finalize()。

7.final和static的区别

static 可以修饰类的代码块,final 不可以;static 不可以修饰方法内的局部变量,final 可以。

8.JDK 中的 java.lang.Math 类

//想正无穷取整
Math.round(1.4)=1
Math.round(-1.4)=-1
Math.round(1.5)=2
Math.round(-1.5)=-1
Math.round(1.6)=2
Math.round(-1.6)=-2
//向大取整
Math.ceil(1.4)=2.0
Math.ceil(-1.4)=-1.0
Math.ceil(1.5)=2.0
Math.ceil(-1.5)=-1.0
Math.ceil(1.6)=2.0
Math.ceil(-1.6)=-1.0
//向小取整
Math.floor(1.4)=1.0
Math.floor(-1.4)=-2.0
Math.floor(1.5)=1.0
Math.floor(-1.5)=-2.0
Math.floor(1.6)=1.0
Math.floor(-1.6)=-2.0

9.java中操作字符串

String,StringBuffer,StringBuilder 

String不可变,StringBuffer,StringBuilder可变;String,StringBuffer是线程安全的,StringBuffer内部使用 synchronized 进行同步。

10.字符串反转

使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的类 AbstractStringBuilder 的 reverse 方法实现;递归。

11.普通类和抽象类

  • 抽象类不能被实例化,
  • 抽象类可以有抽象方法,抽象方法只需申明,无需实现
  • 抽象类的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
  • 抽象方法不能被声明为静态
  • 抽象方法不能用 private 修饰
  • 抽象方法不能用 final 修饰

12.接口和抽象类

  • 抽象类可以有构造方法;接口中不能有构造方法
  • 抽象类中可以有普通成员变量;接口中没有普通成员变量
  • 抽象类中可以包含静态方法;JDK1.8 前接口中不能包含静态方法,JDK1.8 及以后可以包含已实现的静态方法。
  • 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类

13.javap

javap 是 Java class文件分解器,可以反编译,也可以查看 java 编译器生成的字节码等。 

14.try-catch-finally中哪个部分可以省略

catch 和 finally 语句块可以省略其中一个,否则编译会报错。

14.常见的异常类

Throwable 是异常的根类,Throwable 包含子类 错误-Error 和 异常-Exception ,Exception 又分为 一般异常和运行时异常 RuntimeException(如IllegalArgumentException,NullPointerException,NullPointerException)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值