Think in Java学习小结
这波lucio来全学了
这个作者很懒,什么都没留下…
展开
-
第1章 对象导论
这一章是对面向对象编程思想的一个概括的介绍,让我们了解其特性和一些思路,在这里摘要重要的语句作为小结。面向对象程序设计(Object-oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。做个比喻:每个对象看起来都有点像一台微型计算机——它具有状态,还具有操作,用户可以要求对象执行这些操作。原创 2015-11-13 21:25:17 · 1930 阅读 · 0 评论 -
第10章 内部类
将一个类的定义放在另一个类的定义内部,这就是内部类。原创 2017-03-19 17:35:21 · 648 阅读 · 0 评论 -
第7章 复用类(组合与继承的选择?是否需要上转型!!!)
“组合”与“继承”的选择:一个最清晰的判断方法就是问一问自己是否需要从新类向基类进行向上转型,如果必须向上转型,则继承是必要的;但如果不需要,这组合可能是更好的选择。原创 2017-03-07 23:10:22 · 547 阅读 · 0 评论 -
第8章 多态
多态:也称动态绑定、后期绑定或运行时绑定。对象既可以作为它本身的类型使用,也可以作为它的基类使用。把对象的引用视为对其基类的引用的做法称为“向上转型”。原创 2017-03-12 15:25:41 · 373 阅读 · 0 评论 -
第11章 Java容器类
Java容器类的用途是“保存对象”,分为Collection和Map两个概念。Collection:独立元素的序列,包括List、Set、Queue。Map:一组成对的“键值对”对象。包括HashMap和TreeMap。原创 2017-03-22 15:05:39 · 536 阅读 · 0 评论 -
第12章 通过异常处理错误
Java的基本理念是“结构不佳的代码不能运行”。Java使用异常来提供一致的错误报告模型,使得构件能够与客户端代码可靠地沟通问题。 异常使我们可以将每件事都当做一个事务来考虑,而异常可以看护着这些事务的底线。 我们还可以将异常看做是一种内建的恢复系统,因为(在细心使用的情况下)我们在程序中可以拥有各种不同的恢复点。如果程序的某部分失败了,异常将”恢复“到程序中某个已知的稳定点上。 异常允许我们(如果没有其他手段)强制程序停止运行,并告诉我们出了什么问题,或者(理想状态下)强制程序处理问题,并返原创 2017-03-22 20:07:50 · 580 阅读 · 0 评论 -
java编程思想-字符串
String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。转载 2017-04-09 21:27:38 · 633 阅读 · 0 评论 -
数据结构基础:哈希表(HashMap)原理分析
构造一种结合两种优点的“链表散列”的数据结构,可以理解为链表的数组,HashMap就是基于其实现的。转载 2017-04-09 21:48:39 · 797 阅读 · 0 评论 -
什么是线程安全
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。转载 2017-04-09 22:19:10 · 380 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashM转载 2017-04-09 21:58:51 · 315 阅读 · 0 评论 -
Java多线程-线程的同步与锁
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。转载 2017-04-10 20:29:43 · 256 阅读 · 0 评论 -
启动一个线程是用run()还是start()? 为什么?
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。转载 2017-04-10 20:38:54 · 6010 阅读 · 0 评论 -
Java对象的强引用,软引用,弱引用和虚引用
众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。转载 2017-04-10 21:08:52 · 282 阅读 · 0 评论 -
第9章(4) 工厂方法设计模式
工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。工厂模式是一种类创建型模式。通过工厂方法模式,我们的代码将完全与接口实现分离。原创 2017-03-18 21:58:45 · 619 阅读 · 0 评论 -
第9章(3) 适配器设计模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。原创 2017-03-18 21:54:15 · 649 阅读 · 0 评论 -
第9章(2) 策略设计模式
所谓策略模式就是定义了算法族,分别封装起来,让他们之前可以互相转换,此模式然该算法的变化独立于使用算法的客户。例如:创建一个能够根据所传递的参数对象不同而具有不同行为的方法。策略是指传递进去的参数对象,它包含要执行的代码。这使得你的方法更加灵活、通用,并更具可复用性。原创 2017-03-18 21:47:04 · 518 阅读 · 0 评论 -
第2章 一切都为对象
这一章介绍Java编程中一些基本的概念,有一些自己以前不知道的细节,加粗标出。2.1 用引用操纵对象Java中一切都视为对象,但操纵的标识符实际上是对象的一个“引用”(reference)。原创 2015-11-13 22:08:45 · 1252 阅读 · 0 评论 -
第5章(2) Java的垃圾回收器
“自适应的、分代的、停止-复制、标记-清扫”式的垃圾回收器:Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式;同样,Java虚拟机会跟踪“标记-清扫”的效果,要是堆空间出现很多碎片,就会切换回“停止-复制”方式。这就是“自适应”技术,您可以给它个罗嗦的称呼:“自适应的、分代的、停止-复制、标记-清扫”式垃圾回收器。原创 2015-11-24 02:08:57 · 3111 阅读 · 1 评论 -
第5章(1) 构造器
构造器是一个在创建对象时被自动调用的特殊方法。1. 构造器的命名:构造器采用与类相同的名称。这么做的意义在于:(1). 避免与类的某个成员的名称冲突。(2)让编译器自己知道应该调用那个方法。2. 构造器是一种特殊的方法:创建对象时,会为对象分配存储空间,同时调用相应的构造器,以确保对象得到恰当的初始化。无参构造器又叫做默认构造器,当没有为类提供任何的构造器时,编译器会自动帮你创建一个默认构造器。当然我们也可以自己添加带参数的构造器,可以用于在初始化对象的时候提供参数。原创 2015-11-24 00:47:18 · 1101 阅读 · 0 评论 -
第2章番外 Java的命名规范
Java开发者对Java的代码风格有自己的规范,良好的代码风格是非常重要的。下面来说下各种命名规范:包命名(全小写,反写域名)Java引入包的机制很大程度是为了解决重名问题,这有点想C++的命名空间的作用。包实际上提供了一种命名机制和可见性机制。为了最大程度地防止重名,包名必须具有唯一性。原创 2015-11-14 01:23:29 · 1610 阅读 · 0 评论 -
第2章番外2 令人惊喜的注释文档
注释文档:Java带给我最大的惊喜还是它的注释文档,注释文档的出现将代码和文档链接起来,为我们免去了编写修改文档的麻烦,而且生成的HTML文档格式也是美cry的。javadoc:javadoc就是用于提取注释生成文档的工具,它是JDK的一部分。Javadoc不仅整合注释里的信息,还把相邻的类名或者方法名提取出来,让我们用最小的力气生成好看的文档。生成方式:1. 命令行:javadoc -d 文档存放目录 -author -version 源文件名.java原创 2015-11-15 01:04:37 · 3376 阅读 · 0 评论 -
第3章 操作符
Java中有关操作符的语法大多与C++中的类似,就不再重复说了,只说下其中特殊的地方。5. 测试对象的等价性关系操作符==和!=适用于所有的对象,但其意义是对引用的比较,所以只是用不同的引用创建值两个相等的对象,它们的比较也是false的。如下面的代码Integer n1 = new Integer(47);Integer n2 = new Integer(47);System.out.println(n1==n2);输出结果为false。那怎么比较两个对象的实际内容是否相同呢?这时必须要调用原创 2015-11-15 02:21:18 · 3475 阅读 · 0 评论 -
第4章 控制执行流程
依旧只说与C++不同的地方。1.Java不支持goto语句,而是使用了别的方法实现了类似但有限制的跳转功能。2.所有条件语句的条件表达式的结果都必须是布尔值,这与C++是不同的。3.foreach语法:用于更加简洁的对数组和容器进行遍历。语法是这个样子的原创 2015-11-15 03:17:42 · 1445 阅读 · 0 评论 -
第5章(5) 枚举类型
枚举类型用enum关键字声明,其实质是类,有自己的方法:toString():显示某个enum实例的名字。ordinal():表示某个特定enum常量的声明顺序。values():按照enum常量的声明顺序,产生由这些常量值构成的数组。原创 2015-11-26 02:36:49 · 1255 阅读 · 0 评论 -
第5章(3) 初始化
所有成员都要初始化:1. Java尽力保证所有变量都能在使用前得到正确的初始化。若被定义成相对于一个方法的“局部”变量,这一保证就通过编译期的出错提示表现出来。2. 基本类型的情况这是不同的,一个类的所有基本类型的数据成员都会保证获得一个初始值。即使作为局部变量,也是如此。3. 类中定义一个对象的引用时,如果不将其初始化,则自动初始化为null。原创 2015-11-26 01:17:52 · 688 阅读 · 0 评论 -
第5章(4) 可变参数列表
当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表。可以使用Object数组来实现这样的功能。因为,所有的类都是直接或间接继承于Object类。原创 2015-11-26 01:57:24 · 1217 阅读 · 0 评论 -
第6章 访问权限控制
引言:访问权限(或隐藏具体实现)与“最初的实现并不恰当”有关。程序员分为两类,类库的消费者和类库的开发者,类库的消费者希望类库出现新版本的时候,他们并不需要改写他们的代码,而类库的开发者则必须有权限对类库进行修改和改进,而不影响客户端程序员。这就要求我们将“变动的事物”与“保持不变的事物”区分开来。这正是访问权限的作用所在。原创 2015-12-01 02:15:18 · 1231 阅读 · 0 评论 -
第9章(1) 接口和抽象类
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象方法:仅有声明而没有方法体。(相当于C++中的纯虚函数)abstract void X(); 抽象类:包含了一个或多个抽象方法的类叫作“抽象类”。抽象类,是普通的类与接口之间的一种中庸之道。如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。 下面是抽原创 2017-03-18 21:41:16 · 555 阅读 · 0 评论 -
JAVA设计模式之单例模式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。转载 2017-04-12 21:31:36 · 419 阅读 · 0 评论