
Java
基础知识点
qq_45239139
这个作者很懒,什么都没留下…
展开
-
ArrayLis和数组的区别
(1)首先,两者都是 Java 中重要的数据结构,经常会被使用到,数组是 Java 中当中的基础数据结构,而 ArrayList 是 Java Collection 框架下的 List 的接口的一个实现类,其内部实现原理就是依靠数组去实现的,只不过数组在构建的时候就确定的数组的长度,并且是不可变化的,而 ArrayList 可以根据情况自身进行数组的扩容,来达到动态数组的功能,所以 ArrayList 可以被理解为一种动态能够变化长度的数组,并且 ArrayList 当中还提供更多的方法来方便对于顺序表的操原创 2020-08-29 19:14:20 · 874 阅读 · 0 评论 -
== 和 equals
==(1)如果比较的是基础数据类型,那么 == 比较的是他们的值是否相同(2)如果比较的是引用数据类型,那么 == 比较的是他们的引用地址是否相同,也就是比较的栈中局部变量表里的 reference 引用是否相同equals(1)equals 是一个 Object 类中的方法,从源码可以知道,他比较的是两个对象的引用地址是否相同(2)但是其他类会重写 Object 类中的 equals 方法,重新定义比较的规则,像 String 中就重写了 equals 方法,他比较的是两个 String 对象原创 2020-08-22 10:08:00 · 156 阅读 · 0 评论 -
值传递和引用传递
首先要明确一点:在 Java 中只有值传递!只有值传递!值传递:当方法传入参数为基本数据类型这种值类型时,会将原来的基本数据类型进行一份拷贝作为方法的局部遍历传递到方法中,方法中对于局部遍历的操作仅仅是对这个拷贝的值进行修改操作,方法结束后该局部变量的任务也就完成,不会对原来变量造成任何影响引用传递:当方法传入的参数是一个对象类型,那么会对这个对象的引用地址进行一份拷贝然后传递到方法中,所以方法中的对象地址和本身的对象地址都共同指向堆上实例数据,那么这就会导致,当方法中使用拷贝对象,对其指向的堆上实例数原创 2020-08-08 11:51:10 · 181 阅读 · 0 评论 -
Java中锁的类型
Java中锁的类型思想上的锁:乐观锁/悲观锁悲观锁乐观锁应用场景独占锁(排他锁)/ 共享锁可重入锁公平锁/非公平锁分段锁自旋锁偏向锁/轻量级锁/重量级锁偏向锁轻量级锁重量级锁思想上的锁:乐观锁/悲观锁悲观锁总是假设资源的竞争十分激烈,每次访问数据的时候当前线程都会先加上一把锁,那么在该线程执行过程中,其他线程就不能访问数据并且处于阻塞状态,当该线程执行结束或者异常退出了,其他线程才可以去竞争锁,那么悲观锁就是采取一种保守的思想,提前上锁Java中的 synchronized 和 ReentrantL原创 2020-08-06 10:53:02 · 211 阅读 · 0 评论 -
ReentrantLock和Synchronized区别
前提背景:JDK1.5版本之前 lock 的性能比 synchronized 要好,但是之后 synchronized 做了很多的优化(例如加入偏向锁、轻量级锁)之后,synchronized 的性能也追了上来,但是 lock 依旧有它出彩的地方原因:在死锁问题的处理上,lock 显得更加灵活,采取的措施也更有效,而 synchronized 只能尽量的去避免死锁的产生,而 lock 可以通过内部的方法来解决死锁首先来看死锁产生的 4 个必要条件:(1) 互斥条件:当前线程获取到资源锁,那么其他线原创 2020-08-02 16:45:12 · 230 阅读 · 0 评论 -
JUC:并发工具类
CountDownLatch ,CyclicBarrier 和 Semaphore 工具类提供一种并发流程控制的手段Exchanger 工具类提供了在线程间交换数据的一种手段CountDownLatch主要作用是:允许一个或多个线程等待其他线程完成,然后再继续往下执行它的作用和 join 类似,但是功能比 join 更加强大,使用起来也更灵活join 的实现原理是,让当前线程等待 join 线程执行结束,在这个过程中会不停的检查 join 线程是否存活,如果还存活着,那么当前线程就会处于无限等待,原创 2020-07-27 11:08:00 · 221 阅读 · 0 评论 -
JUC:Atomic包
Atomic 包提供了一种用法简单、性能高效、线程安全的方式来更新一个变量变量的类型主要包括4中类型的原子更新方式:原子更新基本数据类型,原子更新数组,原子更新引用,原子更新属性(字段)其内部都是通过 CAS 机制来实现线程安全原子更新基本数据类型Atomic 包提供了三个类来更新基本数据类型:AtomicBoolean,AtomicInteger,AtomicLong,这三种方法实现的内部原理都是差不多的,就拿 AtomicInteger 来举例说明其内部原理其常用方法 getAndIncreme原创 2020-07-24 09:10:53 · 319 阅读 · 0 评论 -
基础数据类型和包装类的区别
(1)初始值不同基本数据类型的初始值为数据本身的零值,例如 int 的初始值为 0,boolean 的初始值为 false,包装类的初始值为 null,正因为包装类的值可以为 null,所以包装类可以作为 POJO(也就是简单的无规则的 Java 对象,只有属性字段和getter以及setter方法),POJO 的属性必须使用包装类,而不能使用基本数据类型,因为数据库的查询结果可能为 null,如果使用基本数据类型的话,就需要将包装类拆箱成基本数据类型,就会抛出空指针异常(NullPointerExce原创 2020-07-17 16:57:31 · 988 阅读 · 0 评论 -
static 和 final
修饰成员变量,将这个修饰的成员变量变为类的成员变量也称为类静态成员变量,需要通过 类.变量名 来获取,所有该类实例对象共享该类成员变量,只要该静态成员发生一次变化,那么其他对象中的该静态变量也就改变修饰成员方法:修饰之后,该方法就成为类的方法,需要通过 类.方法名字 来获取,注意:在该静态方法中不能使用非静态的方法和成员变量,这也很好理解,static 修饰方法后就成为类的方法,由类来统一管理,如果在类中调用普通的成员变量,那么该变量是属于某个对象的,是在某个对象中设置,而类中自然无法管理到该对象..原创 2020-06-18 19:38:22 · 166 阅读 · 0 评论 -
Error和Exception
异常的结构在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)Throwable:Error(错误)和 Exception(异常)就是 Throwable 的子类Error 和 Exception 最大的区别是:Exception 可以被程序本身所处理,而 Error 程序本身无法所处理Error(错误)是程序本身无法处理的错误,是不可查异常,通常表示运行应用程序出现的严重问题,大多数都是和程序编写者执行的操作无关,通常表示 JVM 出现的问题,例如:Java虚拟机运行错原创 2020-06-16 10:11:43 · 389 阅读 · 0 评论 -
Java.ArrayList和LinkedList区别
1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,因此Lin...转载 2020-03-13 21:22:52 · 130 阅读 · 0 评论 -
Java.try catch finally 的执行顺序
示例1:public static String hello() { String s = "商务"; try { return s; } catch (Exception e) { return "catch进来了"; } finally { s = "你好世...原创 2020-03-13 20:59:12 · 126 阅读 · 0 评论 -
Java.HashMap和HashTable的区别
(1)HashMap和HashTable都实现了 Map 接口,但是两者继承的类不同:public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map(2)两者保存元素时都是无序的(3)HashTable的方法时同步的,HashM...原创 2020-03-02 14:32:19 · 172 阅读 · 0 评论 -
Java.ARP缓存表
每台主机都会在自己的 ARP 缓存区建立一个 ARP 缓存表,这个表里面就存着每个 ip 地址和所对应的 mac 地址的映射关系,当本台主机将一个数据包要发送到另外一个目的主机时:(1)会先检查自己的 ARP 缓存表,在 ARP 缓存表中检查数据包的目的 ip 是否存在对应的 mac 地址,如果存在,则直接将数据包发送到这个 mac 地址,如果不存在,则向本地网段发送一个请求 ARP 的广播包,...原创 2020-02-29 15:34:33 · 418 阅读 · 0 评论 -
Java.Super关键字
Super 只可以出现在子类中示例:class HAHA { public int NUM = 1000; public HAHA(int i) { System.out.println("我是父类" + i); } public void fun() { System.out.println("我是父类,在玩电脑!"); ...原创 2020-02-25 11:43:54 · 116 阅读 · 0 评论 -
Java中abstract与interface
抽象类(Abstract class):含有abstract修饰符的class即为抽象类(1)abstract可以修饰类,也可以修饰方法;(2)abstract修饰的类可以被继承和实现,但是这个类本身不能被实例化;(3)抽象方法必须在抽象类中,抽象类中可以有非抽象的方法;(4)抽象类中可以没有抽象方法,这样做的作用是这个类不可以被实例化;(5)抽象类的子类在继承抽象类后,必须把...原创 2020-02-25 10:38:45 · 224 阅读 · 0 评论 -
Java.HashMap和HashSet的区别
(1)hashMap 实现的是 Map 的接口,而 hashSet 实现的是 Set 的接口(2)hashMap 是以键值对的形式来储存,而 hashSet 仅仅储存对象(3)hashMap 使用 put() 方法添加元素,而 hashSet 使用 add() 方法添加元素(4)hashMap 中不允许储存重复的键,如果出现重复键,那么只会保存最近一次加入的键值对,而 hashSet 只储存...原创 2020-02-24 10:11:48 · 581 阅读 · 0 评论 -
Java中关于子类和父类的构造函数
子类实例化一个对象时,无论调用的是子类的无参 还是有参 构造方法,子类都会默认的调用父类的无参 构造方法。示例:class Father { public Father() { System.out.println("父类的无参构造方法"); } public Father(int i) { System.out.println("...原创 2020-02-23 22:49:42 · 623 阅读 · 0 评论 -
Java.hashCode
hashCodehashCode是 Object 类的本地方法,在 Java 中 hashCode 主要应用于散列类型集合的运行,例如 HashSet、HashMap、HashTablehashCode官方文档定义:hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: ...原创 2020-02-14 14:41:29 · 115 阅读 · 0 评论 -
Java.equals方法
先来看一下 String 类中重写的 equals 和 Object 类中的 equalsString 类中的 equalspublic boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanc...原创 2020-02-14 11:58:29 · 103 阅读 · 0 评论 -
instanceof
instanceof在 Java 中,instanceof 操作符的前一个操作数通常会是一个引用类型的变量(一个实际的对象),后一个操作数会是一个类或者接口,它的主要作用就是用来判断,前面的对象是不是后面的类或者其子类所实现的实例例如:import java.io.IOException;import java.lang.reflect.Array;import java.net.Soc...原创 2020-02-14 11:26:14 · 118 阅读 · 0 评论 -
java.double和 floa 的区别
区别:1.double 是双精度浮点数,内存分配 8 个字节,占 64 位,有效小数是 15 位 float 是单精度浮点数,内存分配 4 个字节,占 32 位,有效小数是 6 或者 7 位double 所能表示的小数范围更大,在工作时尽量使用 double 类型的小数更加安全2.在 java 中默认的小数类型就是 double 类型,例如我们打出 double d = 1.1 这样的代...原创 2020-02-07 21:30:40 · 485 阅读 · 0 评论 -
java.三元操作符
如果三元操作符遇到可以转换成数字的类型:例如 Integer, Double 等类型,那么它会发生自动的整型提升实例:Object o1 = true ? new Integer(1) : new Double(2.0);System.out.println(o1); // 输出 1.0Object o2 = false ? new Double(3.0) : new Integer(4)...原创 2020-02-05 17:27:54 · 126 阅读 · 0 评论 -
java.基本数据类型
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.*;import java.util.concurrent.Priority...原创 2020-01-22 20:06:57 · 136 阅读 · 0 评论 -
java.自动拆装箱
首先我们可以看一道选择题:在jdk1.5之后,下列 java 程序输出结果为______。int i=0;Integer j = new Integer(0);System.out.println(i==j);System.out.println(j.equals(i));答案是:truetrue在不新开辟对象时,遵循以下这几条规则:1、基本型和基本型封装型进行“==”运算符...原创 2020-01-21 19:45:31 · 166 阅读 · 0 评论 -
java.子类和父类初始化的顺序
实例:import java.util.*;import java.util.concurrent.PriorityBlockingQueue;class X { public static int x = getX(); static { System.out.println("父类的静态代码块"); } { Syst...原创 2020-01-19 21:03:08 · 500 阅读 · 0 评论 -
java.重写和重载的区别
这两者主要存在以下几种区别:重写(覆盖):(1)重写有一个必须的前提:重写只能发生再父类和子类之间,而且必须是子类对父类的的方法进行重写(2)重写子类的参数必须和父类的参数一模一样,不论是参数的类型或者参数的数量(3)返回值的类型需要相同(4)在权限修饰方面:子类的权限必须要大于或者等于父类的权限(5)子类抛出的异常不能大于父类抛出的异常重载:(1)重载的对象是:同一个类中的不同方...原创 2020-01-19 20:24:54 · 212 阅读 · 0 评论 -
java.枚举
import java.lang.reflect.Array;import java.util.Arrays;public class EnumerationTest { public static void main(String[] args) { Animal tiger = Animal.TIGER; // name 方法作用是返回 枚举实...原创 2020-01-05 15:07:29 · 101 阅读 · 0 评论 -
java.线程池
线程池的最大好处是减少每次启动,销毁线程损耗示例:package lesson07;import java.beans.ExceptionListener;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExecutorsTest { ...原创 2019-12-19 18:47:14 · 86 阅读 · 0 评论 -
java.阻塞队列
在生产者和消费者模型中:解决了生产者和消费者的生产消费耦合问题,,因为生产者和消费者不会直接进行通讯,通讯的任务就交给阻塞队列来完成,阻塞队列就好比一个缓冲区域,当生产者把面包生产出来之后直接丢给阻塞队列,而消费者需要购买面包时也是直接去阻塞队列里面找,消费者不会去找生产者要面包,这样就平衡了双方的处理示例:import java.util.ArrayList;import java.ut...原创 2019-12-19 18:41:46 · 103 阅读 · 0 评论 -
java.日期类
源码:package lesson07;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;public class DateTest { public static void main(String[] args) { // 日期类 ...原创 2019-12-19 18:28:06 · 88 阅读 · 0 评论 -
java.多线程.定时器
定时器,顾名思义它的作用类似我们常常使用的闹钟,在经过一段提前设定好的时间之后来提醒或者执行一些操作。简单示例:import java.util.Timer;import java.util.TimerTask;public class TimerTest { public static void main(String[] args) { // 定时器,第一个参...原创 2019-12-19 18:24:54 · 137 阅读 · 0 评论 -
java.循环打印ABC十次
题目:利用三个线程分别打印字符串 A、B、C,要求循环打印十次结果例如:ABCABCABC…共打印十次源码:第一种写法:public class SequencePrint { /** * 三个线程 A、B、C 分别打印字符串 A、B、C * 要求:循环打印10次 * 打印结果为: * ABC * ABC * ...原创 2019-12-18 17:50:38 · 901 阅读 · 0 评论 -
java.内存中的 int 和 Integer 类型
1.int 类型赋值给一个整数值,不管大小,都是在常量池中查找,如果有,返回引用,如果没有,创建再返回引用2.Integer 类型赋值给一个整数值,(1) -128 到 127 范围内的值都是先再常量池中查找,如果有,直接返回这个引用,如果没有,则再常量池中创建,再返回这个引用。‘(2) 如果超出这个范围,则再堆里创建一个 Integer 对象,对象的属性 value 指向常量池中的常量,...原创 2019-12-18 13:48:25 · 461 阅读 · 0 评论 -
java.数组和List之间的转换
(1)数组转换为 List方法一:可以直接使用Arrays类中的asList()方法,将数组转化为List,但是这个方法有很大的缺陷,List不像ArrayList类一样,不能进行添加和移除操作,这是因为ArrayList类继承了List接口,并且重写了里面的抽象方法//示例: String[] array = {"123","abs","789"}; Lis...原创 2019-12-13 14:41:50 · 1356 阅读 · 0 评论 -
Integer.MIN_VALUE
在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648(1)有意思的是,当达到整型的最大值也就是 Integer.MAX_VALUE 时,如果此时再 + 1 的话,值就会变为整型的最小值也就是 Integer.MIN_VALUE(2)那么如果给整型的最小值取反或者取绝对值会是怎么样,...原创 2019-12-13 09:12:56 · 1902 阅读 · 1 评论 -
java.字符串、字符数组和字符串数组之间的相互转换
(1) 字符串和字符数组之间的相互转换示例: // 字符串转化为字符数组 String str = "abcde"; char[] array = str.toCharArray(); System.out.println(Arrays.toString(array)); // 字符数组转化为字符串 ...原创 2019-12-09 16:10:17 · 391 阅读 · 0 评论 -
java.取余数 (&) 和相处 (/) 的区别
示例: int a = 15 / 4; int b = 15 % 4; int c = 4 / 15; int d = 4 % 15; int e = 15 / -4; int f = 15 % -4; int g = -4 / 15; int h = -4 % 15;...原创 2019-12-09 15:44:21 · 1096 阅读 · 0 评论 -
Java.对象的比较
1.关于对象值相等的比较== 和 equals概念:(1)p == q 表示的是 p 和 q 两个引用指向同一个对象(2)p.equals(q) 表示 p 指向的对象 和 q 指向的对象是否是值语义相等的 ’示例:覆写 equals 之前package package1119;public class Card { public int rank; public ...原创 2019-11-24 17:17:57 · 87 阅读 · 0 评论 -
java.二叉搜索树
实现二叉搜索树的增删查三个核心操作为什么没有实现改的操作因为对于二叉搜索树来说,修改操作,不能针对 Key 来修改最多修改 value如果实在要修改 key, 可以把 key 先删掉,再插入一个新的 key源码:package package1123;public class BinarySearchTree { class Node { public i...原创 2019-11-24 14:01:53 · 148 阅读 · 0 评论