自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

翻译 [疯狂Java]面向对象:不可变类

1. final只是保证被修饰的变量的值不可变!    1) 注意!保证的是值不可变,什么是值?对于一个引用来说,就是指针咯,即指针的值不变,即其指向不变,但是我还是可以通过这个指针来调用可以改变该对象成员的方法啊!!    2) 即final如果修饰引用变量,只能保证该引用的指向不变,但不能保证该引用指向的对象不变,其指向的对象还是可以改变的!!    3) 例如:final Per

2016-06-26 17:22:42 1175

翻译 [疯狂Java]面向对象:final修饰符(修饰变量、方法、类)

1. final修饰变量:    1) 当final修饰变量时,其功能类似C++的const,有不可变的意思(类似常量),但是其用法比C++的const灵活地多,功能也更丰富;    2) 用final可以修饰任何变量(成员变量、静态成员变量、局部变量等);    3) final变量的三大规则:         i. 定义和初始化可以分开:final不像C++的const必须在定

2016-06-26 16:52:04 1609 1

翻译 [疯狂Java]面向对象:单例模式

1. 单例模式的应用:    1) 单例类就是指该类最多只能创建一个对象,不能创建超过一个的对象;    2) 这样做的原因:要么就是为了降低系统开销,要么这种类型的对象创建了多个没有任何意义,最多只需要一个就行,例如窗口管理器、假脱机打印设备、数据库引擎访问结点;2. 单例模式的模板:    1) 这种模式下构造器的使用肯定是受限的!因为不能让外界自由使用,否则就能创建多

2016-06-26 16:00:47 981 1

翻译 [疯狂Java]面向对象:常量池、equals标准模板

1. Java的常量池:    1) 一般来说,常量对一个编程语言来说就是指编译时就可以确定的值,说白了就是字面值;    2) 例如数字字面值5、1.3、5L、0xAFF,字符串字面值"lala"等;    3) 和C/C++管理常量不同的是(C/C++直接将常量编译到代码段里了,例如b = val + 5就直接编译成add b, val, 5,这个5直接出现在代码段中),Java使

2016-06-26 11:04:23 910

翻译 [疯狂Java]面向对象:基本类型的包装器类型、自动装箱/拆箱、包装器类型大小/相等比较

1. 基本类型的包装器类型:    1) Java并不是严格的面向对象语言就是因为存在8中基本类型数据(int、char、double、boolean等),它们并不是类对象;    2) 提供这8中基本类型主要是为了照顾C程序员的传统习惯;    3) 为了让这8中基本类型也能面向对象,Java为其提供了包装器类型,名称都是各个基本类型的首字母大写(Long、Double、Float、

2016-06-25 18:00:40 1342

翻译 [疯狂Java]面向对象:构造器(this、super)

1. 构造器基本概念:    1) Java构造器和C++基本一致;    2) 主要特点:         i. 名称和类名一样;         ii. 不得有返回类型(其默认返回构造的对象本身(this)),如果你强行加返回类型,系统就会把它当做一个普通的方法了,必须通过引用来调用,而不是用new来调用了;         iii. 会在初始化代码执行之后再执行:其实构造

2016-06-25 11:18:40 842 1

翻译 [疯狂Java]面向对象:自发性多态问题

1. 自发性多态:    1) 自发性多态使用不当往往会造成意想不到的错误,所以编程时一定要注意!    2) 先看示例:class A { void show() { // 该方法将会在子类中被重写 out.println("A"); } void test() { // 在其中调用另一个会被子类重写的方法 show(); }}class B extends

2016-06-24 17:53:07 602

翻译 [疯狂Java]面向对象:初始化块、初始化代码、初始化顺序

1. 初始化块:    1) 在类中可以定义和方法平行的代码块,例如:public class A { { /* 初始化块 */ } ... },即直接用花括号括起来的代码块;    2) 这种代码块就是初始化代码块,用于给数据成员初始化,里面可以调用方法,使用if、for等Java语句,也就是说初始化块本质上和普通方法没有区别;    3) 初始化块会在构造器之前执行,对数据成员初始

2016-06-24 17:24:41 1003 1

翻译 [疯狂Java]面向对象:多态、编译时类型、运行时类型、向上兼容、兼容下反转、instanceof

1. 想明白多态必须先理解两个概念:编译时类型和运行时类型    1) 这两种类型都是针对引用变量的;    2) 编译时类型:         i. 是声明引用变量时的类型;         ii. 例如:String s;  // 那么s的编译时类型就是String    3) 运行时类型:         i. 是引用实际指向的对象的类型,和编译时类型完全没有任何关系

2016-06-24 11:43:37 1178 2

翻译 [疯狂Java]面向对象:继承、覆盖、super

1. 类的继承:    1) Java使用extends关键字来继承一个类,例如:public class Son extends Father { ... }表示Son类继承Father类;    2) Java不支持C++非常麻烦的多继承,即extends只能继承一个父类;    3) Java使用extends来表示继承,从词义来看继承也是一种对父类的扩展,即子类可以获得父类的全

2016-06-23 21:59:58 773 1

翻译 [疯狂Java]面向对象:封装(JavaBean)、包(package)、import(导入和静态导入)

1. 封装的关键——访问控制符:    1) Java有4种访问控制级别,范围从小到大(从严到宽)依次为:private、default(包)、protected、public    2) 4中访问控制符的限定范围:         i. public:最宽松,对于一切都是可以访问的;         ii. private:最严,只有在当前类中可见,类外的一切都不可见(都无法访问

2016-06-23 13:29:35 1881

翻译 [疯狂Java]面向对象:命名规范、重载、值传递、可变参数、static/this

1. 命名规范:    1) 类:由多个单词连缀而成,单词之间不要分隔符,每个单词首字母大写,其余小写;    2) 数据成员:应该是名词,多个单词连缀而成,首字母小写,其余单词首字母大写,其余小写,中间不要使用分隔符;    3) 方法:应该以英文动词开头,命名规则和数据成员相同;2. 方法重载:    1) 重载在所有语言中的最基本要求是一致的,必须、至少要求方法名

2016-06-23 11:37:26 1145

翻译 [疯狂Java]正则表达式:捕获组、反向引用、捕获组命名

1.

2016-06-20 16:12:47 6126 1

翻译 [疯狂Java]正则表达式:Java正则表达式语法、贪婪模式/勉强模式

1. 基本字符和特殊字符:    1) 正则表达式前面讲过了,是需要先编译再执行的,因此从某种方面来将正则表达式其实也是一种特殊的编程语言;    2) 既然是编程语言(特殊的编程与语言)那么它就有它自己的源代码字符、关键字等概念了;    3) 正则表达式没有像其它编程语言一样的关键字(像if、else、while等),它的关键字是特殊字符,因此正则表达式的源码分为基本字符和特殊字符

2016-06-20 15:10:31 2015

翻译 [疯狂Java]正则表达式:Pattern、Matcher、String对正则表达式的支持

1. 正则表达式引擎:    1) 正则表达式其实跟SQL语句一样,其实本质都是查询命令,需要先编译然后再用相应的执行引擎启动并查询;    2) 为什么正则表达式的本质是命令?         i. 由于正则表达式中包含很多特殊字符,如*、^等,它们并不属于普通的纯文本字符;         ii. 它们对于引擎来讲其实是一种特殊的命令(动作),例如*会被解释为“连续0个或多个任

2016-06-14 16:47:21 1982

翻译 [疯狂Java]泛型:泛型的底层原理(类型擦除、原生类型、编译前检查)

1.

2016-06-07 21:07:43 1437 1

翻译 [疯狂Java]泛型:泛型构造器、泛型方法的重载问题、泛型数组的问题(应该摒弃)、?下限的典型应用

1. 泛型构造器:    1) 构造器也是方法,既然有泛型方法,那么构造器也可以定义为泛型方法,那么就变成了泛型构造器;    2) 由于构造器也是方法,因此反省构造器的定义和普通泛型方法的定义完全相同,例如:public MyClass(T t) { ... }    3) 使用泛型构造器:          i. 和使用普通泛型方法一样没区别,一种是显式指定泛型参数,另一种是

2016-06-07 14:42:35 2874

翻译 [疯狂Java]泛型:泛型方法、泛型方法VS类型通配符(?)

1. 定义泛型方法:    1) 如果你定义了一个泛型(类、接口),那么Java规定,你不能在所有的静态方法、静态初块等所有静态内容中使用泛型的类型参数!!例如:class A { public static void func(T t) { // 错误!在所有静态内容中不得使用泛型的类型参数 }}!!这个原因会在泛型底层原理中详细介绍,这里就只要先记住这个规则就行了!!

2016-06-06 17:09:44 12988 4

翻译 [疯狂Java]泛型:类型参数多态问题、类型通配符(?)、类型通配符的上下限、类型参数的上限(类、接口)

1. 泛型类型参数的多态问题:    1) Java泛型有一个很奇怪的特点:那就是如果A是B的父类,那么泛型类Generic却不是Generic的父类,这就意味着不能把Generic的对象赋给Generic的引用了!!!!和泛型不一样的是数组就不存在这个问题,如果A是B的父类,那么A[]也是B[]的父类,在多态赋值的时候就不存在任何问题;    2) 可是Java的泛型为什么要这样设定

2016-06-06 13:06:16 6415 1

翻译 [疯狂Java]泛型:泛型的定义(类、接口、对象)、使用、继承

1. 设计泛型的初衷:    1) 主要是为了解决Java容器无法记忆元素类型的问题:         i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放了!         ii. 但是这样设计有明显的缺点:             a. 取出元素的时候必须进行强制类型转换(尽管集合在运行时里面元素的“运行时类型

2016-06-02 21:12:44 13455 3

翻译 [疯狂Java]集合:Collections工具类、Enumeration(摒弃)

1. Collections工具类简介:    1) Java提供的专门用来操作集合的工具类(全部都是静态工具方法),可以操作Set、List、Map;    2) 主要功能包括:         i. 对集合元素进行排序(包括改变集合元素的原有顺序)、查询、修改;         ii. 设置集合的属性(只读、可变等);         iii. 对集合进行同步控制(使普通集

2016-06-01 13:37:41 1190

翻译 [疯狂Java]集合:IdentityHashMap、EnumMap

1. IdentityHashMap:    1) 是一种特殊的HashMap,还是用key的hashCode来决定entry的槽位,但是不用key的equals方法来决定是否相等了,而是默认使用地址(即使实现了equals,equals也不起作用)来决定是否相等了!    2) 所以叫做Identity,就是直接用内存地址严格定义相等;    3) 示例:class R { i

2016-05-31 21:54:24 617

翻译 [疯狂Java]集合:SortedMap、TreeMap、equals/compareTo的标准写法

1. SortedMap的实现类——TreeMap:    1) 就像SortedSet的实现类TreeSet一样,TreeMap的数据结构完全和SortedSet一样,用红黑树实现;    2) TreeMap和TreeSet比较之后的特点就是:         i. 是根据Entry的key的大小进行排序(对Entry进行排序),即用key来代表Entry的大小;       

2016-05-31 21:00:43 3861

翻译 [疯狂Java]集合:HashMap、Hashtable(摒弃)、LinkedHashMap、Properties

1. Map最常用的实现类——HashMap:    1) Map最常见的实现类就和Set最常见的实现类一样都是用哈希表这种数据结构存放数据,它有两个这样的实现类,一个是HashMap,另一个是Hashtable;    2) Hashtable在Java 1.0就存在了,非常古老,命名也不符合Java规范,并且实现地也非常不好,因此现在已经不用了;    3) HashMap和Has

2016-05-31 14:29:34 802

翻译 [疯狂Java]集合:Map

1. Map简介:    1) 首先Map和Collection在一个层级上,都是抽象集合接口,表示字典(存放键值对的集合,其中键不能重复(是键值对的唯一标识));    2) 但是Map的实现类有HashMap、LinkedHashMap、SortedMap、TreeMap、EnumMap,可以看到命名和Set实现类的命名完全一样!!    3) 其实Map就是Set,只不过是一个存

2016-05-29 15:35:51 751

翻译 [疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析

1. Deque:    1) 是Queue的子接口,表示双端队列,即两端(队尾和队首)都能插入和删除的特殊队列;    2) 当然,Deque可以使用Queue的全部方法,但是自己也扩展了很多方法,主要用于操作两个端口的:特点就是Queue的每种方法都多了一个操作队尾的版本(同时也提供了一个名称上呼应的操作队首的版本(first(队首)、last(队尾)),和Queue的完全相对应(就是

2016-05-29 09:24:18 9268 1

翻译 [疯狂Java]集合:Queue、PriorityQueue

1. Queue:    1) Java专门提供的一种表示队列的数据结构,直接继承自Collection,也是一种抽象接口;    2) 其有很多形式的实现类:PriorityQueue(堆,即优先队列,时刻保持堆序)、Deque(双端队列,队列两头都可插拔)、ArrayDeque(用数组实现的Deque,Deque也是一个接口)、LinkedList(用双向链表来实现的双端队列,经常当成

2016-05-28 15:27:01 640

翻译 [疯狂Java]集合:ArrayList、Vector(摒弃)、Arrays.ArrayList(只读、不可变长)

1. List的实现类:    1) 最常见的两个实现类分别是ArrayList(用数组实现)、LinkedList(链表实现),但由于LinkedList具有双端队列的特性因此这里先不介绍LinkedList;    2) 早期List的实现类是Vector(也是用数组实现的),但是Vector是旧的标准,并且很多方面实现的不是很好,因此现在已经摒弃了,基本上都是用ArrayList这个

2016-05-28 14:52:59 8652

翻译 [疯狂Java]集合:List、ListIterator

1. Java的List集合简介:    1) List是一个抽象接口,其代表了一种有序(插入顺序)、可重复的集合,简单地来看完全可以当成一个可变长的数组;    2) 它有不同的实现类:ArrayList/Vector(从名称上看就是用数组实现的)、LinkedList(很明显使用链表实现的);    3) List的元素是可索引的,按照插入顺序,首元素索引是0(即从0开始计);

2016-05-28 11:23:45 753

翻译 [疯狂Java]集合:EnumSet、各Set性能分析(选择)

1. EnumSet——专门存放枚举类型元素的Set:    1) EnumSet只能存放一种枚举类型的元素,具体存放什么枚举类型的元素可以通过两种方法指定,一种是显式,一种是隐式;    2) 一旦元素的枚举类型确定那么集合就确定了(即只能存放该种枚举类型的元素,不能同时存放多种枚举类型的元素!!否则就会抛出异常);    3) 枚举集合EnumSet底层并不是直接存放枚举对象的,而

2016-05-27 15:41:02 2039

翻译 [疯狂Java]集合:SortedSet、TreeSet

1. SortedSet:    1) 顾名思义就是有序的Set,但是它的有序和LinkedHashSet不一样,LinkedHashSet维护的是插入时的顺序,而SortedSet维护的是元素之间大小关系的顺序(比如升序、降序等,是根据大小关系来维护顺序的);    2) 这种维护是时刻维护的(就跟堆维护堆序一样),每次插入元素的时候就会根据其大小放入合适的位置,删除一个元素后也会调整剩

2016-05-27 13:09:05 6619

翻译 [疯狂Java]集合:Set、HashSet、LinkedHashSet

1. Set:    1) Set其实就是Collection,它几乎没有扩展Collection的任何功能(没有在Collection的基础上添加任何额外的方法);    2) 只不过Set的add方法要求添加的元素不能重复,如果重复则添加失败返回false;2. HashSet:    1) 是Set的最常用的一种实现,实现方法是哈希表;    2) 按照哈希算法存

2016-05-24 16:21:57 1368

翻译 [疯狂Java]集合:专门用于聚集操作的一次性集合——Stream(流)

1. Java 8新增的Stream特殊集合:    1) Stream,即流,和之前讲过的I/O流并非一种流,是一种特殊的有序、可重复集合,可以往流中放很多元素;!!它不属于Collection、Map体系,但是Collection可以转化成Stream;    2) 它的特殊之处在于,流专门用于对集合中的元素进行聚集操作(聚集操作泛义上将就是诸如统计操作之类的操作,比如求平均值、最

2016-05-24 11:16:54 4943

翻译 [疯狂Java]集合:Collection的迭代器Iterator、使用Predicate筛选集合中的元素

1. Iterator——迭代器:    1) 和C++中迭代器的概念一样,二要素:         i. 迭代器必定从属于某个容器,其作用就是用来遍历所属容器中的元素的!         ii. 迭代器是在容器的数据视图之上进行迭代,因此不能再迭代过程中修改容器中的数据,否则会抛出异常!除非使用迭代器的专用方法对数据进行修改;    2) Java的迭代器只在Collection

2016-05-23 21:36:02 6161 1

翻译 [疯狂Java]集合:Java集合框架、Collection、forEach遍历器/Consumer函数接口、forEach遍历集合

1. Java集合框架:    1) Java中集合就是用来存放多个元素的数据结构,可能你会想到数组也可以存放多个元素,但是数组可以保存基本类型,而Java的集合只能保存引用类型数据!!    2) Java将集合分成两大类,一类是具有关联关系的集合(即映射关系,以Map为代表的根接口),另一类是无关联关系的集合(像链表、集合之类的,以Collection为代表的根接口),也就是说Coll

2016-05-23 14:45:52 3297

翻译 [疯狂Java]基础类库:BigDecimal(精确实数)

1. BigDecimal简介:    1) 用Java的基础类型来表示数据还是有一定的局限性的:         i. 对于整型最明显的就是存在界限问题,由于使用有限位二进制数来表示整型,必定存在上下限,不能表示更大范围的数了;         ii. 对于浮点型就不用说了,根本无法精确表示,例如一个字面值0.1也无法在底层用二进制精确表示!    2) BigDecimal——

2016-05-22 16:14:30 952

翻译 [疯狂Java]基础类库:Random(随机数生成)、ThreadLocalRandom(线程安全随机数生成)

1. Random类的使用方法:    1) 和其它语言一样,Java的Random其实也是一个为随机序列生成器,同样需要一个序列种子作为序列的开关,如果种子相同则产生的序列相同;    2) 构造器:Random([long seed]);  // 无参则默认使用当前时间作为序列种子!省去了C语言那种还要使用time.h库获取当前时间的步骤,非常贴心!    3) 接着调用next系

2016-05-22 14:18:56 5249 2

翻译 [疯狂Java]基础类库:StringBuilder/StringBuffer

1. 两者的区别:    1) 两者功能上完全一样,两者包含的方法也一模一样,只不过Builder是线程不安全的,而Buffer是线程安全的;    2) 由于Builder适用于单线程,因此Builder效率要明显高于Buffer,因此一般单线程的应用首选Builder;    3) 它们俩和String的区别就是String不能修改内容,但它们俩可以;!!以下就以Str

2016-05-20 14:56:58 486

翻译 [疯狂Java]基础类库:String

1. Java字符串对象:    1) Java提供了三种字符串类型:String、StringBuilder、StringBuffer;    2) 其中String是不可变类型,即一旦初始化后其内容不可改变,后两种是可变类型,专门用来对字符串进行修改;    3) 后两者的区别就是StringBuffer是线程安全的,而StringBuilder是线程不安全的(即只能用于单线程),

2016-05-20 10:49:27 542

翻译 [疯狂Java]基础类库:Object、深拷贝、Objects工具类

1. Object类简介:    1) 是Java所有类型的基类,如果一个自定义的类没有extends显示指定其父类则它默认继承Object类;    2) 常用方法(通常需要根据需求覆盖,Object本身对它们的定义极其简单):         i. 相等判断:public boolean equals(Object obj) { return (this == obj)

2016-05-19 16:57:15 3782

提示
确定要删除当前文章?
取消 删除