
java基础
文章平均质量分 64
KEY_GSY
这个作者很懒,什么都没留下…
展开
-
Java中内存泄漏的原因
什么是内存泄漏?内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费。可能造成内存泄漏的原因:静态集合类引起的内存泄漏:如HashMap和Vector,如果这些容器是静态的,由于他们的生命周期与程序一致,那么容器中的对象在程序结束释放之前不能被释放掉,从而造成内存泄漏。它们引用着的对象也不可以被释放,可以通过remove或者将集合对象设为 null来释放。监听器我们在使用监听器之后没有对监听器进行删除,那么就可能会造成内存泄漏。各原创 2020-09-14 16:19:52 · 340 阅读 · 0 评论 -
JAVA中NIO,BIO,AIO理解分析
在理解这三种IO模型之前需要知道同步异步,阻塞和非阻塞这几种概念,还要知道什么是同步阻塞,异步阻塞,同步非阻塞,异步非阻塞。上面的内容在另一篇博客里有讲;通过这个连接可以查看:https://blog.youkuaiyun.com/weixin_43404016/article/details/106881672BIOBIO其实就是一种同步阻塞IO,在对数据的读写都是需要在一个线程内完成的。BIO就是一个请求对应一个处理,而每一个处理对应的就是一个线程,因此在使用BIO意味着需要很多的线程开销。下面这是原创 2020-06-21 15:24:17 · 486 阅读 · 0 评论 -
搞懂什么是同步,异步,阻塞和非阻塞
前面我一直弄不清楚同步异步和阻塞和非阻塞之间的差别是什么,以为他们就是同一个东西,后来去看了一些博客和相关的书籍之后才直到了他们之间的差别。要搞懂他们之间的差别首先要知道调用者和被调用者两个概念。只有知道他们两个概念才好区分同步异步和阻塞非阻塞。其实看他们的名字也很好区分,调用者就可以是用户,然后被调用者就是一些资源。同步和异步,阻塞和非阻塞针对的对象也是不一样的,对于调用者的就是阻塞和非阻塞,被调用者就是同步和异步。同步:A调用B,这个时候A只有等待B有结果才会返回。异步:A调用B,B立即返回,原创 2020-06-21 10:05:48 · 946 阅读 · 1 评论 -
hash冲突以及hash冲突的解决方法
首先说一下hash冲突吧,hash冲突在hash表中一般情况下是会遇到的;hash冲突指的是你在向hash表中存数据时,首先要通过key值进行指定的hash算法进行计算,然后得到一个值,这个值就是你要将这个key对应的value存入的地址。但是在这个地址中已经有值存在,所以这个时候就发生了hash冲突,不同的key通过hash算法得到了对应的同一个值。hash冲突解决的方法:再hash法:这种方法就是有多个hash算法,当使用一个hash算法计算得到值发生hash冲突时那就使用另外一个hash算法原创 2020-06-20 11:15:48 · 1277 阅读 · 0 评论 -
Java中锁的小结
https://blog.youkuaiyun.com/milogenius/article/details/89461981转载 2020-05-07 10:04:50 · 156 阅读 · 0 评论 -
jdk1.7下的ConcurrentHashMap
我们在使用hashmap的时候,它不是线程安全的,而且还会出现死循环和数据丢失这些问题;使用hashtable可以保证线程安全,但是呢hashtable的效率是比较低的,hashtable中的方法是直接被synchronized关键字修饰的,一次就只可以一个线程执行,所以说效率是低的,这个时候就有了ConcurrentHashMap,它可以保证线程安全,同时也保证了效率。ConcurrentHa...原创 2020-04-18 11:00:42 · 1509 阅读 · 0 评论 -
Jdk1.7下的HashMap
一. 概述首先我们都知道java1.7中hashmap使用的数据结构是数组加链表;hashmap也不是线程安全的;它支持key和value都是null,但是这样的值只允许有一个。hashMap的底层是用了一个Entry的数组,然后数组中的一个每一个节点对应着一个链表。二. 源码解析源码中重要变量//默认初始化容量,1向左移4位,就是16static final int DEFAUL...原创 2020-04-17 11:11:58 · 252 阅读 · 0 评论 -
Java中ThreadLocal的使用以及其源码详解
ThreadLocal其实就是为共享变量在每个线程种创建一个副本,然后可以每一个线程可以访问自己的副本变量。ThreadLocal使用没有使用threadlocal前:package threadlocal;import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;/** * @program: JavaBasic * @descri...原创 2020-04-13 11:19:44 · 251 阅读 · 0 评论 -
Java中成员变量和局部变量的概述,以及区分
1. 成员变量和局部变量概述在Java中,可以将变量分为成员变量和局部变量两大类;成员变量存放在堆或者方法区中,局部变量存放在栈中。成员变量和局部变量的区别:1). 声明的位置:局部变量:在方法体{ }中,形参,代码块中成员变量:类中方法外类变量:有static修饰实例变量:没有static修饰2).修饰符局部变量:final成员变量:public private protec...原创 2020-04-07 11:07:22 · 445 阅读 · 0 评论 -
Java参数传递机制
方法参数传递机制:形参的基本数据类型它传递的是数据值,将数据重新复制了一份,所以不会改变实参是引用数据类型传递的是地址值特殊的类型:String ,包装类等对象不可变性当传入之后如果发生改变,那将会创建一个新的数据,所以也是没有变化。...原创 2020-04-06 11:44:23 · 145 阅读 · 0 评论 -
Java类的初始化过程和实例的初始化过程
一个类要创建实例首先就要初始化类类的初始化过程一个类要创建实例需要先加载并初始化该类,main()方法所在的类需要先加载和初始化一个子类初始化需要先初始化父类一个类的初始化就是执行< clinit>()方法(这个方法是自动生成的)< clinit>()方法有静态类变量显示赋值代码和静态代码块组成静态类变量显示赋值代码和静态代码块按从上到下的顺序执行< ...原创 2020-04-05 11:03:26 · 183 阅读 · 0 评论 -
Java单例模式的实现方法
1. 阐述单例模式单例模式是一种设计模式,就是说单例对象的类只可以有一个实例对象存在。由自己来创建自己的对象,同时确保只可以有一个对象,而且当你访问的时候只可以直接访问,不需要实例化这个对象。它实现方式主要是有懒汉式和饿汉式两种2. 饿汉式实现直接创建实例化对象,不管你是否需要这个对象饿汉式没是线程安全的饿汉式最简单的实现方法是枚举类1). 第一种实现规则构造器私有化自行创建,并...原创 2020-04-03 12:19:49 · 154 阅读 · 0 评论 -
java中hashCode()和equals()比较和详解
首先我们要知道equals()的作用是什么?equals()的作用是用来判断两个对象是否相同。equals() 定义在JDK的Object.java中。通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等。既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相...原创 2020-03-31 12:03:16 · 702 阅读 · 0 评论 -
Java类加载机制,类加载过程,类加载器以及双亲委派详解
1. 加载机制的概念类加载机制Java编译生成后的.class文件中的二进制数据读取到内存中,将其放到jvm运行时的数据区的方法区中,然后在堆区创建一个Class对象,用来封装方法区内的数据结构。2. 类的加载过程 类的加载过程主要是加载,验证,准备,解析,初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化...原创 2020-03-30 11:40:47 · 216 阅读 · 0 评论 -
JAVA数据结构之单链表实现创建,增加,删除,插入,修改,打印操作
链表是以节点的方式来存储,是链式存储每个节点包含data域,next域,指向下一个节点如图,发现链表的各个节点不一定是连续存储链表分带头节点和不带头节点链表,根据实际的需求来确定链表主要的操作就是增删查改,还有逆序输出。添加(创建)1.先创建一个head头节点,作用就是表示单链表的头2.后面我们每添加一个节点,就直接加到链表最后遍历:通过一个辅助变量,帮助遍历整个链表 publ...原创 2020-03-29 13:41:00 · 1096 阅读 · 0 评论 -
JAVA数据结构之使用数组进行循环队列的实现
前面的博客实现了普通的队列,但是不可以重用,然后现在就要用循环队列来解决它的问题。普通队列的地址:普通队列数组模拟环形队列1.front变量的含义做一个调整:front指向队列的第一个元素,也就是front初始值为02.rear变量的含义做一个调整,rear指向队列的最后一个元素的后一个位置,可以空出一个空间作为约定,rear初始值为03.当队列满时,条件是(rear+1)%maxsiz...原创 2020-03-29 13:26:45 · 322 阅读 · 1 评论 -
JAVA数据结构之使用数组实现队列
队列是一个有序列表,它可以用数组或者是链表来实现遵循先进先出的原则。先存入的数据要先取出,后存入的要后取出数组模拟队列队列本身是有序队列,所以使用数组来实现队列的输入和输出是有前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会根据队列的输出而改变,rear会根据队列的输入而改变。往队列中插入数据将尾指针rear后移,但是前提是rear小于队列的最大...原创 2020-03-29 13:20:21 · 369 阅读 · 0 评论 -
Java数据结构实现稀疏数组
首先什么是稀疏数组呢?当一个数据大部分为0或者大部分都为1时,可以用另外一个数组来保存它,节约空间。先用图片表示将二维数组转化为稀疏数组的思路:1.遍历原始的二维数组,得到有效数据的个数sum2.根据sum就可以创建稀疏数组 sparseArr int[sum+1][3]3.将二维数组的有效数据存入到稀疏数组中稀疏数组转化为二维数组的思路:1.先读取稀疏数组的第一行,根据第一行的...原创 2020-03-29 13:12:36 · 240 阅读 · 1 评论 -
JAVA内存分配以及常量存储位置解析
Java内存分配与管理是Java的核心技术之一,前面我介绍过Java垃圾回收的一些知识,今天我们看Java的内存分配。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象) ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常...原创 2020-03-18 14:37:25 · 528 阅读 · 0 评论 -
Java多线程详解
要想了解多线程,首先要知道线程是什么,它和程序,进程之间的差别。程序:就是一个静态的代码块,静态的对象。进程:就是一个程序执行的过程或者是一个正在运行的程序,比如电脑里面运行的qq,或者运行的浏览器。每个独立执行的程序都可以叫做一个进程线程:就是在进程里同时做不同的事情,比如在QQ里面既要发送消息,还要接收消息,这就是不同的线程。多线程在java中实现的两种方法(1). 继承Threa...原创 2020-03-17 15:34:05 · 198 阅读 · 0 评论 -
Java 垃圾回收机制
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一, 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。在平时开发中需要创建大量的对象,如果这些对象没有回收那么会占用大量的内存空间,最后会导致溢出。Java内存回收那么首先要知道jvm的内存结构java运行时内存主要是分为三个部分其中PC寄存器、java虚拟机栈、本地方法...原创 2020-03-15 11:30:21 · 162 阅读 · 0 评论 -
Java基础之接口和抽象类
在java中提供了两种方法来实现OOP的抽象,抽象类和接口。很多时候我们需要在接口和抽象类中做出选择。一. 接口接口的理解:我觉得接口就是一个特殊的类,它主要是为了解决java不可以实现多继承的特性,在开发过程中接口更多的是用在标准的定义。而且接口中的方法都是没有方法体的,都是一些抽象方法。接口的要求:1、接口中的属性默认为public static final类型的。2、接口中的方...原创 2020-03-14 10:16:56 · 160 阅读 · 0 评论 -
JAVA中方法重载和重写详解
Java中有三大特性,分别是继承,多态,封装;重载和重写是多态的重要体现的两种方式。一. 重载概念:重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。我们使用重载方法时需要注意以下几点:(1).在使用重载时只能通过不同的参数列表,必须具有不同的参数列表(2).不能通过访问权限、返回类型、抛出的异常进行重载(3).方法的...原创 2020-03-13 15:42:19 · 469 阅读 · 0 评论 -
Java集合详解
先通过一张图来展示java集合类之间的继承关系先总的来说一下list,set,map的特点list里存放数据是有序的,它的顺序是按照存放顺序,元素以线性方式存储,集合中可以存放重复对象。set中存放数据是无序的,它里面的数据也不可以重复,集合中的数据不按特定的顺序排序,只是简单的把数据放入集合中。map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立...原创 2020-03-12 11:43:05 · 177 阅读 · 0 评论