- 博客(15)
- 资源 (3)
- 收藏
- 关注
转载 安装反编译插件,在Eclipse中查看源码
一、下载必要的软件、插件1. jad.exe 下载地址:http://varaneckas.com/jad/2. net.sf.jadclipse_3.3.0.jar 下载地址:http://sourceforge.net/projects/jadclipse/二、安装软件和插件1. 新建一个目录存放jad.exe及其临时文件,我这里新建的目录为D:\ProgramFiles\jad\,jad.e...
2018-06-16 21:53:50
292
转载 jvm系列(一):java类的加载机制
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使用”时...
2018-06-01 12:15:48
181
原创 模式系列之代理模式
简介:代理模式是一种非常重要的设计模式,在 Java 语言中有着广泛的应用,包括Spring AOP 的核心设计思想,都和代理模式有密切关系。什么场景使用代理模式?代理模式实现原理是什么?本节课程将带你领略代理模式的奥妙。1. 代理模式概念介绍1.1 代理模式定义:为其他对象提供一种代理,以控制对这个对象的访问。代理对象起到中介的作用,可以去掉功能服务或增加额外的服务。 如:火车票代售处是...
2018-05-11 12:29:05
192
转载 JVM如何判断一个Java对象是否可以回收
众所周知,Java将程序员从内存管理中解放出来,使得我们在编写代码的时候不用手动的分配和释放内存,内存管理的任务由JVM承担起来。本文就将讲解JVM在回收对象之前,如何判断一个对象是否应该被回收。在此之前,我们先来复习一个和Java对象回收有关的知识,那便是finalize方法,这是一个在Object类中定义的方法,如果我们重写了finalize方法,那么在对象被回收之前将会调用finalize方...
2018-05-02 14:50:04
2167
原创 模式系列之工厂模式
简介:工厂模式和抽象工厂模式是在日常开发中使用非常广泛的设计模式。主要用于实现将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性。本课程即将讲解Java中的工厂模式和抽象工厂模式的应用。1. 工厂模式概述1.1 工厂模式概念 实例化对象,用工厂方法替代new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展1.2 工厂模式的意图定义一个接...
2018-04-30 21:20:55
188
原创 模式系列之模板模式
一.模板模式1. 模板方法模式初探 模板操作模式定义了一个算法中的统一框架,而将一些步骤延迟到子类中实现,使得子类可以在不改变算法结构的同时重新定义算法的某些特定步骤。这就是模板模式。1. 模板方法模式的代码实现1.1 用抽象基类定义框架/* * 抽象基类,为所有子类提供一个算法框架 * 提神饮料 */public abstract class RefreshBeverage { ...
2018-04-30 10:55:49
139
原创 模式系列之单例模式
一.单例模式设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。基本模式有23种:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式...1. 单例模式简介有些对象我们只需要有一个,比如:配置文件、工具类、线程池、缓存、日志对象等。如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致...
2018-04-29 22:31:40
123
转载 String的Intern方法
引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:· 直接使用双引号声明出来的String对象会直接存储在常量池中。· 如果不是用双引号声明的String对象,...
2018-04-28 11:28:06
341
原创 字符串全排列算法
问题:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 正常人的思维是,固定第一个字符,然后依次将后面的字符串与前面的交换,那么排列的个数就是除了第一个字符以外,其他字符的排列个数+1。也就是固定一个字符串之后,之后再将问题变小,只需求出后面子串的排列个数就可以得出...
2018-04-11 17:31:23
329
原创 File 类集框架编程(统计指定目录下面的文件类型及数量)
import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * 统计指定目录下面的文件类型及数量 * * ...
2018-04-11 17:30:00
355
转载 Comparable接口和Comparator接口
1.什么是Comparable接口此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的compareTo方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。2.实现什么方法int compareTo(T ...
2018-04-11 17:29:09
145
原创 集合系列—HashMap源码分析
前面我们已经分析了ArrayList和LinkedList这两个集合,我们知道ArrayList是基于数组实现的,LinkedList是基于链表实现的。它们各自有自己的优劣势,例如ArrayList在定位查找元素时会优于LinkedList,而LinkedList在添加删除元素时会优于ArrayList。而本篇介绍的HashMap综合了二者的优势,它的底层是基于哈希表实现的,如果不考虑哈希冲突...
2018-04-11 17:28:04
188
1
原创 集合系列—ArrayList源码分析
本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组。数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集合类更好一些,这是使用数组的一大优势。 但是我们知道数组存在致命的缺陷,就是在初始化时必须指定数组大小,并且在后续操作中不能再更改数组的大小。在实际情况中我们遇到更多的是一开始并不知道要存放多少...
2018-04-11 17:21:38
137
原创 集合系列—LinkedList源码分析
上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。 LinkedList的底层结构如下图所示。 F表示头结点引用,L表示尾结...
2018-04-11 17:17:32
105
原创 Hashtable的底层实现
Hashtable是线程安全的,那么Hashtable是如何实现线程安全的呢?有了上面的介绍,我们直接从源码中分析其线程安全性:public synchronized V put(K key, V value) { // 保证value值不为空,此处省略其代码 .. // 保证key是不重复的,此处省略其代码 .. //查过阈值则扩容,此处省略 // Creates the new ent...
2018-04-11 17:06:42
3584
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人