java提高
文章平均质量分 52
有心好书
种一棵树最好的时间是十年前,其次是现在
展开
-
java夯实基础系列:枚举
定义Java 代码的两个基本的构造块是 类和 接口。现在又引入了 枚举,一般简称它为enum。这个新类型允许您表示特定的数据点,这些数据点只接受分配时预先定义的值集合。当然,熟练的程序员可以用静态常量实现这项功能,如清单 1 所示:public class OldGrade { public static final int A = 1; public static final int B原创 2016-07-30 21:27:36 · 844 阅读 · 0 评论 -
细说JVM系列:虚拟机类加载机制
虚拟机类加载机制上一篇我们介绍了了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机如何加载这些Class文件?正是本部分要说明的内容。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。一.类加载流程Class文件通常以文件的形原创 2016-08-27 15:37:45 · 1455 阅读 · 0 评论 -
细说JVM系列:虚拟机字节码执行引擎
虚拟机字节码执行引擎 字节码就像是汇编语言,是 JVM 的指令集。代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。概述执行引擎是 Java 虚拟机最核心的组成部分之一。“虚拟机” 是一个相对于 “物理机” 的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的原创 2016-08-27 15:58:00 · 1554 阅读 · 0 评论 -
java夯实基础系列:IO
看大图原创 2016-07-31 22:50:11 · 779 阅读 · 0 评论 -
java夯实基础系列:JAVA技能树
评估标准:了解应用熟练模块内容详情掌握程度评估难点入门简介 1.了解这门语言的由来2.它的特点及譬如它各个版本迭代的特点3.开发环境4.IDE5.了解基本的注释与代码分割的规范6.新特性熟练 数据结构 1.关键字:final、static、this、super等等2. 定义变量与常量,系统的内置的常量3.基本数据类型和引用数据类型4.字符串类型的使用(语言间差异较大)5.基本的时间日期类型6.高级原创 2016-07-29 14:26:57 · 3832 阅读 · 0 评论 -
JAVA集合源码分析系列:ArrayList源码分析
一.ArrayList简介ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能原创 2016-08-29 21:55:07 · 978 阅读 · 0 评论 -
JAVA集合源码分析系列:LinkedList源码分析
LinkedList源码分析#一.LinkedList简介LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作。LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。LinkedList 实现了Cloneab原创 2016-08-29 22:18:33 · 948 阅读 · 0 评论 -
java夯实基础系列:正则表达式
#一.引入需求:验证qq是否合法:5-15位,不能以0开头,全是数字一般做法与使用正则表达式的做法:```public class Demo1 { public static void main(String[] args) { String qq = "a38703402948"; // 常规做法 boolean check原创 2016-07-31 22:50:37 · 971 阅读 · 0 评论 -
细说JVM系列:成员变量分配在栈中还是堆中?
细说JVM系列:成员变量分配在栈中还是堆中?下午时小伙伴问了我一个问题:mAge为啥是在堆里?幸好最近我一直在学习JVM,所以我在思考了一会结合之前的资料给出了我的理由: 因为mAge是类的成员变量,既然类的对象在堆中,它自然也在堆中。原创 2016-08-31 18:20:11 · 6923 阅读 · 3 评论 -
细说JVM系列:Class文件结构
Class文件结构Class文件结构Class文件的结构并不是一成不变的,随着java虚拟机的不断发展,总是不可避免的会对class文件结构做出一些调整,但是其基本结构和框架是非常稳定的。class文件的总体结构如图所示:在我在看这块内容的时候,我在想我怎么结合我已有的概念去理解这个东西:其实Class文件就像用jvm的编程语言的语法编写成的一种代码文件。这种编程语言不是我们写的,而是编译成的,既然原创 2016-08-27 11:44:13 · 1436 阅读 · 0 评论 -
细说JVM系列:JVM存在的目的和意义是什么?
JVM存在的目的和意义是什么? 一句话,实现跨平台。代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步。记得在第一节计算机程序设计课上我的老师讲过:计算机只认识0和1,所以我们写的程序需要经过编译器编译成由0和1构成的二进制格式才能有计算机执行。多年过去了,今天的计算机仍然只能识别0和1,但由于虚拟机和大量建立在虚拟机上的程序语言如雨后春笋出现并蓬勃发展,原创 2016-08-27 10:39:25 · 2839 阅读 · 1 评论 -
java夯实基础系列:注解
从java 5.0开始,为我们提供注解功能,通过注解可以限制代码的重载,过时,以及实现一些其他功能,这里,就来分析一下java的注解。 本文旨在帮助大家感性的认识注解,一般注解在架构设计中会常用到,可以让代码变得非常简洁,实现代码的复用。注解的作用 注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。 每当你创建描述符性质的类或者接口时,一旦其中包原创 2016-07-30 21:57:38 · 815 阅读 · 0 评论 -
java夯实基础系列:反射
反射原创 2016-04-10 11:35:21 · 1069 阅读 · 0 评论 -
java夯实基础系列:泛型
一.概念1.为什么需要泛型?不使用泛型时:public class Test01 { public static void main(String[] args) { HashMap map = new HashMap(); map.put("m1", "sssss"); String str = (String)map.get("m1");原创 2016-07-20 18:00:42 · 5028 阅读 · 0 评论 -
android上传下载系列:一般性知识解读
http协议之http消息头消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。http报文由从客户机到服务器的请求和从服务器到客户机的响应构成,所以http消息分为请求消息和响应消息两类。如下图所示:原创 2016-08-03 17:49:10 · 1023 阅读 · 0 评论 -
java夯实基础系列:深入理解static、final关键字
static表示“全局”或者“静态”的意思。static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可原创 2016-07-31 22:47:17 · 1054 阅读 · 0 评论 -
java夯实基础系列:内部类
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。**访问规则:**内部类可以直接访问外部类中的成员,包括私有成员(原因是内部类持有一个外部类的引用,该引用的写法是Outer.this)外部类要访问内部类中的成员必须要建立内部类的对象内部类属于外部类的一个成员,就相当于一个成员内部类,把它跟成员变量平级去看待。外部类如何访问内部类,即内部类的访问格式原创 2016-07-31 22:48:28 · 754 阅读 · 0 评论 -
java夯实基础系列:异常
异常你可以认为是对象,在xx情况下产生异常对象,异常对象是虚拟机产生的,不是我们来定义的,java中异常也是对象。异常:中断了正常指令流的事件异常和语法错误是完全不一样的东西异常时运行中出现的,而语法错误连编译都是通不过的原创 2016-07-31 22:49:05 · 1256 阅读 · 0 评论 -
java夯实基础系列:集合
容器#一.引入为什么需要集合?数组存在两个缺陷:数组长度难以扩充数组中元素类型必须相同容器可以弥补数组的这两个缺陷#二.集合体系Java的所有的集合体系都是实现了Collection接口,所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 col原创 2016-07-31 22:49:41 · 1149 阅读 · 0 评论 -
细说JVM系列:JVM介绍
JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibernate等等,再然后就开发企业级的应用,比如网站、企业内部应用、实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError,原创 2016-08-25 17:41:22 · 5771 阅读 · 9 评论 -
细说JVM系列:自动内存管理内存回收:垃圾收集理论-垃圾收集算法
垃圾收集理论-垃圾收集算法这里主要讲解垃圾收集理论上的算法,下一篇会介绍一些实现了这些算法的垃圾收集器。一般我们谈垃圾收集从三个问题来帮你理解jvm的垃圾收集策略:1.怎么判断哪些内存是垃圾? 2.用什么方法回收? 3.什么时候回收?垃圾回收的区域?前面介绍了java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条原创 2016-08-26 17:31:03 · 1445 阅读 · 0 评论 -
java夯实基础系列:数组
数组:#数组的定义以及数组的使用```public class Test1 { public static void main(String[] args) { int[] arr = new int[]{3, 4, 5}; int[] arr2 = {3, 4, 5}; // 前面是指明类型,后面是开辟空间的,所以需要在后面原创 2016-07-31 22:52:12 · 768 阅读 · 0 评论 -
我需要了解的动态代理
一.说明动态代理的思想是:代理模式+反射。 静态代理,代理者的代码是由程序员自己或者通过一些自动化工具生成,然后再进行编译。 动态代理则正好相反,通过反射机制动态的生成代理对象。代理模式可参考下面的文章链接: http://blog.csdn.net/a910626/article/details/50760980反射可参考下面的文章链接: http://blog.csdn.n...原创 2018-02-25 00:46:27 · 628 阅读 · 0 评论 -
JAVA集合源码分析系列:HashMap源码分析
#一.大学《数据结构》散列表复习散列表(Hash)表,你要记住一句话:根据给定的关键字来计算出关键字在表中的地址。在Hash表中,关键字和关键字的地址是有确定的关系的,这种关系可以用Hash函数H来表示。例如,关键字为key,则H(key)成为Hash地址,就是key在查找表中的地址。##1.什么是Hash表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而原创 2016-08-29 22:18:59 · 1052 阅读 · 0 评论 -
细说JVM系列:JVM对象的创建、内存布局、访问
对象的创建、内存布局、访问 这里会深入探讨HotSpot虚拟机在java堆中的对象分配、布局和访问的全过程。一.对象的创建 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加原创 2016-08-26 14:43:53 · 1784 阅读 · 0 评论 -
细说JVM系列:什么是java对象的引用
什么是java对象的引用下一篇,我们将介绍JVM的垃圾收集器和内存分配策略,在判断对象是否是垃圾时,主要通过对象的引用来判断,不论是引用计数算法还是可达性分析算法,他们都涉及java引用的定义,这里专门对java的引用来说明一下。在JDK1.2以前,java中的引用定义很传统:如果reference类型的数据中存储的数值代表的是(另外一块内存的起始地址),就称这块内存代表着一个引用。这种定义很存粹,原创 2016-08-26 15:27:23 · 1295 阅读 · 0 评论 -
细说JVM系列:自动内存管理内存回收:垃圾收集实践-垃圾收集器
自动内存管理内存回收:垃圾收集实践-垃圾收集器在java虚拟机中,垃圾回收器可不仅仅只有一种,什么情况下要使用哪一种,对性能又有什么样的影响,这都是我们必须要了解的,这里会具体介绍一下垃圾收集器的类型,以及他们的特点。一.串行回收器串行回收器是指使用单线程进行垃圾回收的回收器。每当回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回原创 2016-08-26 20:19:29 · 1068 阅读 · 0 评论 -
细说JVM系列:JVM内存空间分区
java虚拟机基本结构:JVM是一个内存中的虚拟机,那它的存储就是内存了,我们写的所有类、常量、变量、方法都在内存中,因此明白java虚拟机的内存分配非常重要,本部分主要讲解java虚拟机内存分配。本部分会从概念上介绍java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题。引入:一个示例下面通过一个简单的示例,来展示java堆、方法区和java栈之间的关系。public c原创 2016-08-25 21:31:25 · 8994 阅读 · 0 评论 -
细说JVM系列:自动内存管理内存分配:内存分配和回收策略
自动内存管理内存分配:内存分配和回收策略java技术体系中所提倡的自动内存管理最终可以归结为自动化解决了两个问题:给对象分配内存以及回收分配给对象的内存。,关于内存的回收,之前我们已经使用了大量的篇幅介绍了这个东西。接下来我们会探讨下自动化内存分配。对象的内存分配,往大了讲,就是在堆上分配。接下来我们将会讲解几条最普遍的内存分配策略。对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。原创 2016-08-26 20:57:04 · 1376 阅读 · 0 评论 -
细说JVM系列:分代收集算法补遗
分代收集算法补遗在前面我们就提到过,java堆为了更精细化的管理,又分为新生代和老生代。1.Java堆中各代分布图1:Java堆中各代分布Young:主要是用来存放新生的对象。Old:主要存放应用程序中生命周期长的内存对象。Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和和存放Instance的转载 2016-08-26 21:06:02 · 1151 阅读 · 0 评论 -
JAVA集合源码分析系列:TreeMap源码分析
treemap转载 2016-08-29 22:20:05 · 896 阅读 · 0 评论 -
JAVA集合源码分析系列:HashSet源码分析
HashSet原创 2016-08-29 22:19:20 · 857 阅读 · 0 评论 -
JAVA集合源码分析系列:TreeSet源码分析
TreeSet原创 2016-08-29 22:19:43 · 853 阅读 · 0 评论 -
关于编码规范记一篇blog(完善中)
类内容定义的顺序https://www.jianshu.com/p/200813474cd6类内容定义的顺序l 静态成员变量 / Static Fieldsl 静态初始化块 / Static Initializersl 成员变量 / Fieldsl 初始化块 / Initializersl 构造器 / Constructorsl 静态成员方法 / Static Methodsl ...原创 2019-07-27 14:55:12 · 153 阅读 · 0 评论 -
java main函数初探
JAVA中的主函数是我们再熟悉不过的了,它是一个很特殊的函数,那它为什么这么写,其中的每个关键字分别是什么意思呢?main函数详解 public static void main(String args[]) main函数,是主函数,被jvm调用,是程序运行的入口。Java虚拟机不会调用你自己写的普通的函数。String args[]是什么东西? 这个参数是jvm传给main函数的参数,原创 2015-04-19 17:37:33 · 1258 阅读 · 0 评论 -
集合、IO流部分思维导图框架梳理
下图是学习集合过程自己梳理的脉络,希望对你有帮助。原创 2015-04-23 00:09:35 · 5214 阅读 · 0 评论 -
变量声明有没有分配内存?
Q1: int i 这个有没有分配内存呢? int *p 呢? 具体是在栈空间还是在堆空间里分配内存呢? A1: int i; int *p; 这两个都在栈区分配了内存空间 但是p指向的地址为野地址,不可直接拿来使用 即p指向的空间没有分配 Q2:在Java中定义数组时必须分配内存,这句话是错的还是对的呢 A2: Java原创 2015-04-29 21:17:28 · 9149 阅读 · 0 评论 -
JVM系列2:垃圾收集器与内存分配策略
这里从三个问题来帮你理解jvm的垃圾回收器和内存分配策略:一.怎么判断哪些内存是垃圾?1.引用计数法2.根搜索算法,java采用的二.什么时候回收? 一个应用程序中那个线程运行有线程自身的优先级来决定的。垃圾回收线程几乎是所有线程中优先级最低的。三.如何回收?-垃圾回收算法1.标记-清理算法2.复制算法 我们首先一起来看一下复制算法的做法,复制算法将内存划分为两个区间,在任意时间点,所有动态分配原创 2016-04-10 15:47:20 · 806 阅读 · 0 评论 -
JVM系列3:虚拟机类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了如下图所示: 一.加载1.该阶段主要做啥加载阶段虚拟机需要完成三件事情: 1.通过一个类的全限定名来获取定义此类的二进制字节流。 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口2.类加载器 说到加载,原创 2016-04-10 15:47:54 · 745 阅读 · 0 评论 -
JVM系列4:JVM总结
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。 java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。JVM执行程序的过程 : I.加载class文件转载 2016-04-10 15:48:31 · 1977 阅读 · 0 评论