坦GA
积沙成塔
展开
-
Java中方法执行顺序
Java中方法执行顺序:首先是静态块先执行,静态方法,最后是构造函数。构造方法只有在new对象的时候才会执行,静态语句块和静态方法在类加载到内存的时候就已经执行了。另外,静态语句块只能给静态变量赋值,里面不能出现方法,同样,静态方法里面也不能出现静态语句块。先是静态语句块执行,然后静态方法加载到内存,静态语句块你不管它它会自动会执行,而静态方法它一直存在于内存中,只有你用类名点方法名的时候转载 2016-08-17 12:00:24 · 4243 阅读 · 0 评论 -
Object类中有哪些方法
在JDK1.7下,Object的源代码如下:public class Object { private static native void registerNatives(); static { registerNatives(); } public final native Class getClass(); public nat原创 2016-08-18 10:56:14 · 3322 阅读 · 0 评论 -
Java容器
在学Java以前,一说到存放东西,第一个想到的就是使用数组,使用数组,在数据的存取方面的却也挺方便,其存储效率高访问快,但是它也受到了一些限制,比如说数组的长度以及数组的类型,当我需要一组string类型数据的同时还需要Integer类型的话,就需要定义两次,同时,数组长度也受到限制,即使是动态定义数组长度,但是长度依然需要固定在某一个范围内,不方便也不灵活。 如果说我想要消除转载 2016-08-18 12:18:25 · 355 阅读 · 0 评论 -
Java中length,length(),size()区别
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性。2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法。3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看。 这个例子来演示这两个转载 2016-09-08 23:10:48 · 659 阅读 · 0 评论 -
Java中char类型能存储汉字吗
可以,Java中的char是Unicode编码,Unicode编码占两个字节,也就是16位,足够存储一个汉字。代码:public static void main(String[] args) { char c = '和'; System.out.println(c); }结果:和转载 2016-09-08 23:17:49 · 2409 阅读 · 0 评论 -
String到底创建了多少个对象
String到底创建了多少个对象?Java代码 String str=new String("aaa"); 这行代码究竟创建了几个String对象呢?答案是2个,而不是3个。由于new String("aaa")相当于"aaa"与一个就是创建出来的放在堆时原实例对象,而另一个就是放在常量池中的 "aaa" 对象,当然这里的str本身只是一个引用,放在转载 2016-08-18 20:48:25 · 669 阅读 · 0 评论 -
ArrayList源代码的分析
下面是ArrayList源代码实现,Java1.7版的。分析如下:1.ArrayList类继承AbstractList类,实现List、RandomAccess、Cloneable、java.io.Servializable接口。2.ArrayList类中定义了:DEFAULT_CAPACITY、EMPTY_ELEMENTDATA、elementData、size、MAX_ARRAY_原创 2016-08-12 21:11:44 · 625 阅读 · 0 评论 -
深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口转载 2016-08-18 22:37:02 · 380 阅读 · 0 评论 -
Myeclipse导入Spring源码后少jar包问题--使用Jar命令重新打包
由于将spring源代码导入到myeclipse后,缺少jar包, 所以从maven仓库中下载spring发布的spring-core jar包.为了方便理解目录结构,使用tree命令:tree [/f] >tree.txt/f 时,会生成full 全部子目录/文件 ├─pac_jar_cglib │ └─org │ └─s转载 2016-08-20 10:51:02 · 2011 阅读 · 0 评论 -
有return的情况下try catch finally的执行顺序(最有说服力的总结)
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally转载 2016-08-30 19:10:50 · 562 阅读 · 0 评论 -
Java中构造函数、static块、{}块的执行顺序
测试代码如下:父类:public class ParentTest { public ParentTest(){ System.out.println(0); } static{ System.out.println(1); } { System.out.println(2); }}子类:public class ChildTest ext原创 2016-08-30 20:56:33 · 605 阅读 · 0 评论 -
Java子类构造函数中默认调用父类的空参构造函数
测试代码如下:父类:public class ParentTest { public ParentTest(){ System.out.println(1); } public ParentTest(String name){ System.out.println(2); }}子类:public class ChildTest extends Par原创 2016-08-30 21:10:51 · 3336 阅读 · 0 评论 -
XML文件中不允许出现的字符
一共有五个:所有的特殊字符对应的编码:特殊字符 代替符号 特殊原因& & 每一个代表符号的开头字符> > 标记的结束字符标记的开始字符" &quo原创 2016-08-30 21:30:33 · 10816 阅读 · 0 评论 -
UML类图中箭头和线条的含义和用法
UML类图中箭头和线条的含义和用法UML中关系主要有依赖,聚合,合成,泛化和实现等,下面就让我们来看一下这些关系如何用UML箭头和线条来实现。关系后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。依赖(Dependency)实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于转载 2016-08-31 22:06:59 · 1321 阅读 · 0 评论 -
优先队列(堆)
优先队列(priority model)模型 insert:等价enqueue(入队)操作 deleteMin:它的工作是找出、返回并删除优先队列中最小的元素,等价dequeue(出队)操作优先队列基本模型: 优先队列可以用外部排序。在贪婪算法(greedy algorithm)的实现方面优先队列也是很重要的,该算法通过反复求出最小元来进行操作。一些简单的实现原创 2016-09-03 16:17:01 · 805 阅读 · 0 评论 -
时间复杂度和空间复杂度详解
算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或转载 2016-09-12 20:09:22 · 620 阅读 · 0 评论 -
Java序列化的几种方式
在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采用java对象的序列化和反序列化。随着Google工具protoBuf的开源,protobuf也是个不错的选择。对JSON,Object Serialize,ProtoBuf 做个对比。定义一个待传输的对象User转载 2016-09-01 10:15:17 · 583 阅读 · 0 评论 -
树的遍历
先序遍历:preorder traversal。 中序遍历:总的运行时间为O(N)。 后续遍历:总的运行时间为O(N)。 层序遍历:level order traversal。在层序遍历中,所有深度为d的节点要在深度d+1的节点之前进行处理。层序遍历与其它类型的遍历不同的地方在于它不是递归地执行的,它用到队列,而不使用递归所默示的栈。按顺序打印二叉查找树的代码: /原创 2016-09-13 10:47:45 · 543 阅读 · 0 评论 -
B树(Balanced-tree)
B-树是一种多路搜索树(并不一定是二叉的)。如果有更多的分支,那么就有更少的高度。这样,31个节点的理想二叉树(perfect binary tree)有5层,而31个节点的5叉树则只有3层,一颗M叉查找树可以有M路分支。随着分支增加,树的深度在减小。一颗完全二叉树(complete binary tree)的高度大约为log2N,而一颗完全M叉树(complete M-ary tree)的高原创 2016-09-13 11:06:21 · 2752 阅读 · 0 评论 -
Set、TreeSet、Map、TreeMap简单介绍
SetSet接口:不重复。SortedSet接口:不重复,有序TreeSet类:SortedSet接口的一种有序实现;基本操作花费对数最坏情形时间 默认情况下,排序假设TreeSet中的项实现Comparable接口。另一种排序可以通过用Comparator接口实例化TreeSet来确定。MapMap接口:关键字必须唯一,值不必唯一;isEmpty、cle原创 2016-09-03 09:05:59 · 897 阅读 · 0 评论 -
表的抽象数据类型(abstract data type,ADT)
抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。表ADT 我们将处理形如A0,A1,A2,A3,...,AN-1的一般的表,我们说这个表的大小是N。我们将大小为0的特殊的表称为空表(empty list)。 我们说Ai后继Ai-1(或继Ai-1之后,ii-1前驱Ai(i>0)。我们可以添加一些操作,比如next和previou原创 2016-09-03 09:57:57 · 1439 阅读 · 0 评论 -
队列的抽象数据类型(abstract data type,ADT)
队列(queue)是表。然而,使用队列时插入在一端进行而删除则在另一端进行。 队列模型 队列的基本操作enqueue(入队),它是在表的末端(叫做队尾(rear))插入一个元素 ,和dequeue(出队),它是删除并返回在表的开头(也叫队头(front))的元素。队列抽象模型:队列的数组实现 如同栈的情形一样,对于队列而言任何的表的实现都是合法的。像栈一样,对于原创 2016-09-03 11:04:44 · 3265 阅读 · 0 评论 -
23种设计模式都包括哪些
创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) 7. Bridge(桥接) 8. Composite(转载 2016-09-03 17:12:53 · 1861 阅读 · 0 评论 -
Java中Iterator(迭代器)的一般用法
迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。 Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返转载 2016-09-03 17:16:10 · 492 阅读 · 0 评论 -
栈的抽象数据类型(abstract data type,ADT)
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考察。对空栈进行的pop或top操作一般被认为是栈ADT中的一个错误。另一方面,当运行push时空间用尽是一个实现限制,但不是ADT错误。 栈有时原创 2016-09-03 12:26:16 · 6690 阅读 · 0 评论 -
LinkedList源代码的分析
以下是JDK1.7版本中LinkedList类的源代码,分析如下:1.LinkedList类:继承AbstractSequentialList并实现List、Deque、Serializable接口。2.LinkedList类:定义了 transient int size = 0; /** * Pointer to first node. * Inv原创 2016-08-13 09:07:28 · 841 阅读 · 0 评论 -
Java中按值传递和按引用传递的区别
//按值传递public class shiyan { //先创建一个更改变量的函数,并加上了打印的函数用于比较 public void change(int c){ c=c*5; System.out.println(c); } public static void main(String[] args) { // TODO Auto-generated转载 2016-09-05 09:55:42 · 337 阅读 · 0 评论 -
图的基本概念和表示
基本概念 一个图(graph)G=(V,E)由顶点(vertex)的集V和边(edge)的集E组成。每一条边就是一副点对(v,w),其中v、w ϵ V。有时也把边称做弧(arc)。有向(directed):如果点对是有序的,那么图就是有向的。有向图(digraph):有向的图有时也叫有向图。路径u,v,u可以被认为是圈,因为(u,v)和(v,u)不是同一条边。无向图:与有向图相对原创 2016-09-18 15:30:15 · 1112 阅读 · 0 评论 -
查找树ADT--二叉查找树
二叉树的一个重要应用是它们在查找中的使用。 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。这意味着该树所有的元素可以用某种一致的方式排序。 二叉查找树的平均深度是O(logN)。二叉查找树要求所有的项都能够排序。树中的两项总可以使用Comparable接口中的compareTo方法比较。BinaryNode原创 2016-09-05 18:20:54 · 1762 阅读 · 0 评论 -
数据结构--树(tree)的简单介绍
定义树的一种自然的方式是递归。一般的树: 一棵树是N个节点和N-1条边的集合。树叶(leaf):没有儿子的节点。兄弟(siblings):具有相同父亲的节点。用类似的方法可以定义祖父(grandparent)和孙子(grandchild)关系。节点n的深度(depth):从根节点到节点n的唯一路径的长。节点n的高度(height):从n到一片树叶的最长路径的长。祖先(原创 2016-09-05 15:32:49 · 4713 阅读 · 3 评论 -
JAVA中重写equals()方法为什么要重写hashcode()方法?
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:(1)当obj1.equals(obj2)为true时转载 2016-09-05 22:42:27 · 788 阅读 · 0 评论 -
Java:重写equals()和hashCode()
1.何时需要重写equals()当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。2.设计equals()[1]使用instanceof操作符检查“实参是否为正确的类型”。[2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。[2.1]对于非float和double类型的原语类型域,使用==比较;[2.2]对于对象引用域,递归调用equals方转载 2016-09-05 22:47:30 · 671 阅读 · 0 评论 -
Java拓扑排序
拓扑排序是对有向无圈图的顶点的一种排序,使得如果存在一条从Vi到Vj的路径,那么在排序中Vj就在Vi的后面。下面是课程先修结构(course prerequisite structure)的无圈图。有向边(v,w)表明课程v必须在课程w选修前修完。这些课程的拓扑排序是不破坏课程结构要求的任意的课程序列。显然,如果图含有圈,那么拓扑排序是不可能的,因为对于圈上的两个顶点v和w,v先于原创 2016-09-18 19:27:57 · 1157 阅读 · 0 评论 -
Java排序算法--希尔排序(Shellsort)
希尔排序 希尔排序:它通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。希尔排序也叫缩减增量排序(diminishing increment sort)。 希尔排序使用一个序列h1,h2,h3,…,ht,叫做增量序列(increment sequence)。在使用增量hk的一趟排序之后,对于每一个i我们都有a[i]k],所有原创 2016-09-13 09:03:49 · 548 阅读 · 0 评论 -
HashMap和HashTable的区别
http://blog.csdn.net/java2000_net/archive/2008/06/05/2512510.aspx 我们先看2个类的定义[java] view plain copypublic class Hashtable extends Dictionary implements Map,转载 2016-09-06 17:37:01 · 559 阅读 · 0 评论 -
Java中对象的销毁
为了让内存资源得到更大程度的利用以及循环利用,每一种语言都有自己的垃圾回收机制,即对于废弃的资源,不再使用的对象,需要将其所占用的内存资源进行回收,重新分配使用。在Java中,拥有一套完整的垃圾回收机制,当对象的生命周期结束时,Java虚拟机会自动回收无用的占用内存的资源。对象被Java虚拟机视为垃圾有两种情况:1.对象引用超过其左右范围;2.对象被赋值为null。当然,垃转载 2016-09-06 22:08:31 · 2006 阅读 · 1 评论 -
Java反射机制
原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 有些时候,我们用过一些知识,但是并不知转载 2016-09-20 10:22:59 · 636 阅读 · 0 评论 -
Java堆、栈溢出程序示例
原文地址:http://www.cnblogs.com/panxuejun/p/5882424.html堆溢出:/*** @author LXA* 堆溢出*/public class Heap{ public static void main(String[] args) { ArrayList list=new A转载 2016-09-23 12:02:28 · 873 阅读 · 0 评论 -
Java方法区溢出
原文地址:http://blog.csdn.net/kevin_luan/article/details/22982255方法区用于存放Class的相关信息,如:类名,访问修饰符,常量池,字符描述,方法描述等。对于这个区域的测试,基本思路是运行时产生大量的类去填满方法区,直到溢出。虽然直接使用Java SE API也可以动态产生类(如反射时的GeneratedConstructorAc转载 2016-09-23 12:12:02 · 4659 阅读 · 1 评论 -
动态代理Proxy和CGLib区别
原文地址:http://blog.csdn.net/hintcnuie/article/details/10954631什么是代理静态代理与动态代理静态代理实例JDK动态代理实例CGLib 简介CGLib 与JDK动态代理的区别1.静态代理与动态代理 代理模式是Java中常见的一种模式,英文名字叫走Proxy或者Surrogate,代理的本意是一个人代表另一个转载 2016-09-23 13:01:00 · 377 阅读 · 0 评论