基础知识
文章平均质量分 72
Java基础知识
学而不思则忘
一切都可以
展开
-
Comparator比较器返回值理解
最近使用到了Comparator接口的compare方法,思考了一下改方法的返回值跟升序降序的关系。背景升序代码public void sortTest() { Integer[] nums = new Integer[]{1, 4, 3, 5, 2, 7, 6}; Arrays.sort(nums, new Comparator<Integer>() { @Override public int compare(Integer o1, .原创 2022-03-08 11:18:22 · 4023 阅读 · 1 评论 -
Java反射理解
1. 反射调用静态方法下面实例使用反射调用静态方法的两种类型:public和private创建一个类GreetingAndByepublic class GreetingAndBye { public static String greeting(String name) { return String.format("Hey %s, nice to meet you!", name); } private static String goodBye(S原创 2022-01-09 22:47:43 · 130 阅读 · 0 评论 -
Integer.valueOf原理
看下面代码及输出:public class Five { public static void main(String[] args) { Integer a = Integer.valueOf(3); Integer b = Integer.valueOf(3); System.out.println(a == b); // true Integer c = Integer.valueOf(300000);原创 2021-06-18 18:57:24 · 1127 阅读 · 0 评论 -
static代码块作用
关于静态代码块:随着类的加载而执行,只执行一次,并且优于主函数。静态代码块是给类初始化的,构造代码块是给对象初始化的。静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。在类的加载过程中,static修饰的遍历会被初始化为0,然后再进行赋值。public class Four { private static int num = 1; static { num = 10; number = 50; System.o原创 2021-06-17 19:56:24 · 840 阅读 · 0 评论 -
Java的封装、继承、多态以及重载和重写
1. 面向对象编程三大特性1.1 封装隐藏对象的属性和实现细节,仅对外公开访问方法,控制在程序中属性的读和写的访问级别。封装基本要求把所有的属性私有化。对每个属性提供 getter 和 setter 方法。如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。建议重写 toString 方法,但这不是必须的。1.2 继承可以理解为,在一个现有类的基础之上,增加新的方法或重写已有方法,从而产生一个新类。每一个类都是在继承。因为在 Java 中存在一个所有类的父类(基类、超类):原创 2021-06-17 14:26:18 · 255 阅读 · 0 评论 -
设计模式之工厂模式
1. 简单工厂模式该模式通过向工厂传递类型来指定要创建的对象。下面我们使用手机生产来讲解该模式:Phone类:手机标准规范类(AbstractProduct)public interface Phone { void make();}MiPhone类:制造小米手机(Product1)public class MiPhone implements Phone { public MiPhone() { this.make(); } @Overri转载 2021-04-22 17:03:40 · 61 阅读 · 0 评论 -
JDK8的新特性
1. 接口改善现在接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实例来使用. 既然静态方法可以存在于接口当中, 那么大多数情况下 Foos工具类完全可以使用接口中的公共方法来代理 (或者将Foos置成package-private).除此之外更重要的就是, Java 8中接口可以定义默认的方法了.举个例子,一个for-each循环的方法就可以加入到java.lang.Iterable中转载 2021-04-20 13:11:21 · 147 阅读 · 0 评论 -
String、StringBuilder与StringBuffer区别
1. 可变性String 类中使⽤ final 关键字修饰字符数组来保存字符串, private final char value[],所以 String 对象是不可变的。在 Java 9 之后,String 类的实现改⽤ byte 数组存储字符串 private final byte[] value⽽ StringBuilder 与 StringBuffer 都继承⾃ AbstractStringBuilder类,在 AbstractStringBuilder中 也是使⽤字符数组保存字符串 ch原创 2021-04-20 12:35:18 · 86 阅读 · 0 评论 -
Java设计模式总结
1. 什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。模式:在某些场景下,针对某类问题的某种通用的解决方案。场景:项目所在的环境问题:约束条件,项目目标等解决方案:转载 2021-03-20 20:12:11 · 130 阅读 · 0 评论 -
Java抽象类与接口理解
1. 抽象类1.1 抽象方法抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void fun();抽象方法必须用abstract关键字进行修饰。1.2 抽象类理解如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象类就是为了继承而存在的。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么原创 2021-03-13 22:56:37 · 197 阅读 · 0 评论 -
Java基本数据类型
1. Java基本数据类型Java基本类型共有八种,其中有4种整形,2种浮点型,1种用于表示Unicode编码的字符单元的字符类型char,1种用于表示真值的boolean类型。JAVA中的数值类型(整型和浮点型)不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。整型可分为:byte、short、int、long浮点类型:float、doublechar类型:charboolean类型:boolean8种数据类型表示的范围如下:byte:1字节,8位,最原创 2021-03-13 22:29:02 · 209 阅读 · 0 评论 -
Java常量池与String常量池理解
1. 先了解JVM内存分布:程序计数器是jvm执行程序的流水线,存放一些跳转指令。本地方法栈是jvm调用操作系统方法所使用的栈。虚拟机栈是jvm执行java代码所使用的栈。方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。虚拟机堆是jvm执行java代码所使用的堆。字符串常量池:直接使用双引号声明出来的 String 对象会直接存储在常量池中。如果不是用双引号声明的 String 对象,可以使用 String 提供的 intern 方String.in原创 2021-03-13 17:59:39 · 548 阅读 · 0 评论 -
深入理解Java序列化
1. 序列化简介序列化(serialize) - 序列化是将对象转换为字节流。反序列化(deserialize) - 反序列化是将字节流转换为对象。序列化用途:序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中。在网络上传送对象的字节序列。对象序列化不会关注类中的静态变量。2. Java 序列化和反序列化Java 通过对象输入输出流来实现序列化和反序列化:java.io.ObjectOutputStream 类的 writeObject() 方法可以实现序列化;转载 2021-03-04 21:57:45 · 301 阅读 · 1 评论 -
Java泛型理解
1. 为什么需要泛型JDK5 引入了泛型机制。为什么需要泛型呢?回答这个问题前,先让我们来看一个示例。public class NoGenericsDemo { public static void main(String[] args) { List list = new ArrayList<>(); list.add("abc"); list.add(18); list.add(new double[] {1.0,转载 2021-02-27 17:46:29 · 134 阅读 · 0 评论 -
重写equals方法需同时重写hashCode方法
hashCode()介绍hashCode()的作用是获取哈希码,也称为散列码;返回一个int整数。这个哈希码的作用就是确定该对象在哈希表中的索引位置。hashCode()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode()函数.散列表存储的是键值对(key-value).它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利⽤到了散列码!hashCode()的作用当把对象加入HashSet时,HashSet会首先计算对象的hashCode来判断对象加原创 2021-02-27 15:43:49 · 353 阅读 · 0 评论 -
Java运行时异常RuntimeException
NullPointerException:空指针引用异常ClassCastException:类型强制转换异常IllegalArgumentException:传递非法参数异常ArithmeticException:算术运算异常ArrayStoreException:向数组中存放与声明类型不兼容对象异常IndexOutOfBoundsException:下标越界异常NegativeArraySizeException:创建一个大小为负数的数组错误异常NumberFormatException.原创 2021-01-22 13:57:04 · 214 阅读 · 0 评论 -
Java的try/catch/finally中使用return详解
finally是无论如何都要执行的,除非在try/catch的语句块中使用的System.exit()为了弄清楚Java中try/catch/finally中使用return语句的跳转,使用下面示例:1. 首先在try中使用return,finally中不使用returnpublic class App { public static void main(String[] args) throws Exception { App app = new App();原创 2020-12-27 21:30:47 · 2156 阅读 · 0 评论 -
String类能不能被继承?为什么?(final关键字的理解)
答案是不能被继承。下面来看看究竟是为什么?Java中对String类的定义:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for原创 2020-11-15 15:32:07 · 1521 阅读 · 1 评论 -
Java的==和equals()的区别
==的含义基本数据类型:byte, short, int, long, float, double, char, boolean。它们之间的比较用==,比较的是它们的值。引用数据类型:比较的是它们在堆内存中的存放地址。equals()含义它不能用于比较基本数据类型的变量。equals()方法存在于Object()类中,而Object()类是所有类的直接或间接父类。但又两种使用情况:情况1:类没有覆盖equals()方法。则通过equals()比较该类的两个对象,等价于通过==比较这两个对象,原创 2020-11-09 13:46:51 · 125 阅读 · 1 评论