JAVA基础
整理 Java 基础知识
盼兮猫
长亭外 古道边 芳草碧连天
展开
-
Java clone() 方法
clone() 是 Object 方法,通过该方法克隆一个一模一样的对象。一般通过实现 cloneable 接口实现该方法,在 Object 类中该方法是 native 方法,基于底层操作系统实现。 // 具体使用 A a1 = new A(); A a2 = (A)a1.clone(); 当我们调用 clone() 方法后,首先根据原对象的大小申请内存空间,申请完内存空间后,将原对象内存域复制到新申请的内存空间,返回引用类型。也就是说,从内存地址来看,clone() 会创建一个全新的对象。 根据结果,克原创 2021-05-10 15:30:02 · 3294 阅读 · 1 评论 -
Object 类常用方法整理
Java Object 类常用方法如下图所示: registerNatives():注册 native 方法 getClass():获取 Class 类对象 hashCode():计算 hashCode 值 equals():比较对象是否相等 clone():克隆对象方法 toString():转字符串输出 notify():随机唤醒一个等待队列中的线程 notifyAll():唤醒所有等待队列中的线程 wait():放弃锁资源,进入等待队列 finalize():gc 收集时用到,唯一有可能复活的机会原创 2021-08-13 17:24:01 · 97 阅读 · 0 评论 -
Java 异常体系
ClassNotFoundException:有些地方提到 ClassNotFoundException 不是 RuntimeException,我建议把它看做非检查异常,就算不显示捕捉也可以启动。 Error:JVM 侦查到无法预期的错误,属于 JVM 层次的严重错误,错误无法处理 Exception:程序本身可处理的异常,开发过程中绝大多数异常都出自这里 Error 表示 JVM 虚拟机内部出现错误,导致原因很多,常见的错误有: StackOverFlowError:栈溢出 OutOfMem..原创 2021-05-10 17:09:34 · 95 阅读 · 1 评论 -
final 关键字
final 是 Java 代码中常用的关键字, 可以用来修饰引用、方法和类,表示最终版,不可变 如果 final 修饰引用,分以下两种情况: 引用类型为基础类型,表示该引用是常量,值无法修改 引用类型为对象类型,对象地址不能改变,但对象的属性可以修改 当 final 修饰类的成员变量时,该变量必须包含初始化值,否则编译报错 如果 final 修饰方法,表示该方法无法被子类重写,但可以继承。也就是说,子类可以调用父类的 final 方法,但不能重写 如果 final 修饰类,表示该类已是最终类,无法被继承原创 2021-07-27 14:14:30 · 65 阅读 · 0 评论 -
Java 序列化与反序列化
序列化:将 Java 对象转换为流文件的过程 反序列化:从流文件转换为 Java 对象的过程 Java 对象通过实现 Serializable 接口完成对象的序列化,接口只包含如下属性: private static final long serialVersionUID = -1364948644692894869L; 其中 serialVersionUID 属性不影响能否序列化和反序列化,不过加上更安全:序列化时,该属性被写入流文件中保存,反序列时,通过该属性判断是否当前类型,只有 serialV.原创 2021-05-10 14:55:18 · 55 阅读 · 0 评论 -
==、equals()、hashCode() 对比
== 用来判断两个对象的地址是否相等,如果是基础类型,比较具体值是否相等。 equals 用来比较两个对象是否相等,默认比较的也是内存地址,一般重写该方法,改为比较对象属性,常见基础类型对应引用类型、String 都重写了 equals() 方法,该方法是 Object 类方法,因此任何类都可以重写该方法 equals 重写时需要满足以下特性: 自反性:a.equals(a) 永远返回 True 对称性:a.equals(b) 和 b.equals(a) 结果相同 传递性:a equals b,b equ原创 2021-05-10 13:02:30 · 103 阅读 · 0 评论 -
Java 装箱拆箱
Java 基础类型都包含对应的包装类型,具体关系如下: 基础类型 包装类型 int Integer short Short byte Byte long Long folat Float double Double boolean Boolean char Character 装箱:基础类型自动转包装类型 拆箱:包装类型自动转基础类型 // 自动装箱 Integer i = 100; // 自动拆箱 int j = i; 其中装箱基于 valueOf()原创 2021-05-10 11:01:15 · 97 阅读 · 0 评论 -
JAVA 基础类型,String ?
首先,String 不属于 Java 基础类型,Java 八大基础类型和所占的字节数如下所示: 类型 boolean byte short int long char float double 字节数 1/8 1 2 4 8 2 4 8 String 是 Java 维护的类,其中它是通过 final 修饰的(不允许继承),字符串内容通过 char[] 实现,该成员变量是 private final 修饰的,也就是说不可变,并且不允许外部访问。其中 String 提供的所有方法都没有操作该原创 2021-04-12 16:17:02 · 86 阅读 · 0 评论 -
重载、重写的区别
重写:父子类之间,子类重写父类的某个方法 父子类之间 方法名、参数列表、返回类型必须相同 子类方法的修饰权限必须大于等于父类权限 子类不能抛出更宽泛的异常 重写过的方法通过 @Override 修饰,不写会提示,不会影响系统启动。主要用于提醒开发者 这里修饰符大于主要因为重载,假如通过父类引用指向子类实例,调用父类方法时根据父类方法的修饰符,而实际运行的子类的方法实现,如果子类方法的修饰权限小于父类方法,就可能出错。比如此时有父类方法的权限,而没有子类方法的权限。 抛出异常也好理解,如果子类抛出更宽原创 2021-05-10 11:20:59 · 61 阅读 · 0 评论 -
面向对象三大特性
继承、封装和多态 继承:父子类之间,子类通过继承获得父类的某些属性和方法,使子类具备父类相同的行为。Java 只能继承一个类,通过 extends 关键字实现 封装:将对象的属性封闭起来,不对外访问,对外只提供接口,防止对象属性被恶意篡改。对于调用者来说,只需调用方法即可,内部实现细节对它透明 多态:对于统一行为,不同子类对象具备不同的表现形式 多态存在的三个必要条件: 继承 重写 父类声明指向子类对象 简单来说,就是通过父类引用调用子类方法,不同子类可以有不同的实现。 ...原创 2021-05-13 22:02:07 · 43 阅读 · 0 评论 -
面向对象和面向过程的区别
Java 语言是典型的面向对象程序设计语言,它具有面向对象的三大特征: 封装 继承 多态 这里我们简单介绍面向对象和面向过程的区别: 知乎上有个回答说的很好:面向过程是编年体,面向对象是传记体。翻译一下就是说面向过程注重解决问题的步骤,将各种步骤通过函数的方式封装起来,然后依次调用,通过这种方式解决问题。而面向对象则更注重对象,将上述所说的步骤分配给不同的对象,每个对象具有相应的行为,通过依次调用对象行文的方式解决问题。 举个简单的例子:水杯、饮品 面向过程:装可乐 -》 拿出水杯 -> 装可乐、原创 2021-07-27 23:16:04 · 274 阅读 · 0 评论 -
JDK 和 JRE 的区别
任何 Java 开发者首要的第一件事就是安装 jdk,在安装 jdk 的过程中,jre 会一并弹框安装,安装完毕后配置系统(用户)环境变量,之后就可以愉快的开发了。。。 JRE:Java Runtime Environment Java 运行环境,也就是说,即使不安装 JDK,只安装 JRE,也可以成功运行 JAVA 程序,但不能开发。JRE 包含 java 虚拟机、java 基础类库,是使用 Java 语言编写程序所需要的运行环境 JDK:Java Development Kit Java 开发工具包,是原创 2021-07-27 16:59:19 · 185 阅读 · 0 评论