java编程思想读书笔记三(11-21)
十一:持有对象
》持有对象实例
●数组将数字与对象联系起来。它保存类型明确的对象,查询对象时,不需要对结果做类型转换。他可以是多维的。
可以保存基本的数据类型。但是,数组一旦生成,容量就不会在变。
●Collection保存单一的元素,而Map保存相关联的键值对。有了泛型,你就可以指定存放的对象类型,获取的时候,也不需要类型转换。各种Collection与Map都可以自动调整大小。容器不能持有基本类型。但是会自动包装。
●像数组一样,List也建立数字索引与对象的关联。因此,数组和List都是排好的容器。List可以自动扩展。
●如果要进行大量的随机访问,就用ArrayList,如果经常插入删除数据,用LinkedList。
●各种Queue以及栈的行为,都有LinkedList支持。
●Map是一种将对象与对象相关联的设计。HashMap用来快速访问。而TreeMap保持键始终处于排序状态。所以没有HashMap快。
●Set不接受重复元素。HashSet提供最快的查询速度。而TreeSet保持元素处于排序状态。
十二:通过异常处理错误
2、异常情形是指阻止当前方法或做用户继续执行的问题。异常情形和普通问题是不同的,所谓的普通问题是指:在当前环境下能得到足够多的信息,总能处理这个错误。而异
常情形是指:在当前环境下,无法或的必要的信息来解决问题。
3、抛出异常之后会发生的几件事情:
a、将会以new的方式在堆上创建一场对象的引用。
b、当前的执行路径会被终止,并获得弹出的异常的引用。
c、异常处理机制接管程序,并且从一个恰当的地方来继续执行程序。这个恰当的地方一般为catch或者finally
4、所有的标准异常类都有两个构造器,一个是默认构造器,另一个是接受字符串作为参数,以便能把相关信息放入异常
对象的构造器。
5、监控区域:是指可能产生异常的代码,并且后面跟着处理这些异常的代码。
6、异常处理理论中有两种模型:
a、终止模型,在这种模型中,将假设错误非常关键,一直与程序无法返回到一场发生的地方继续执行。一单一场被抛出
,就表明错误已经无法挽回,也不能回来继续执行。
b、恢复模型:是指异常处理程序的工作室修正错误,然后重新尝试解决问题。
以上两种模型相比较来说,常常使用终止模型。因为从复杂程度来说,要实现恢复模型,要编写大量处理代码。
7、对于一般的用户新建异常来说,最重要的就是类名的命名,也就是说,从Exception继承异常之后,几乎不用改什么。
8、异常的构造器一般有两个,一个是默认构造器,一个是接受参数的构造器。如果程序员想要自己实现一些构造器,那
么一般来说要重写getMessag()函数。
普通自己构建的异常如下:
class MyException extend Exception
{
public MyException(){}
public MyException(String msg)
{ super(msg); }
}
9、printStackTrace()方法如果是无参数形式,则默认输出到标准错误流。当然,可以向其中传递输出流的参数。
10、Exception类中有个一个getMessage()方法。通过覆盖此方法可以实现自定义形式的输出。
11、Exception类是所有异常的基类,所以,当catch异常时,要把catch(Exception e)写在最后,因为派生异常类可以匹配基异常类。
12、printStackTrace()可以直接打印异常栈轨迹。我们也可以通过调用getStackTrace()函数来获取所有的栈顺序,此函数以数组的形式返回栈轨迹。元素0是栈顶元素。
13、对于重抛异常来说,如果仅仅是简单讲当前一场对象重新抛出,那么printStackTrace()函数将显示原来的异常抛出位置,而不会显示重抛位置。要显示重抛位置,则需要用
原先的异常再构建一个新的异常之后抛出。关于如何构造的问题:
a、对于Error、Exception、RuntimeException三种异常,可直接在构造函数出将原有的异常传递即可。
b、对于除了以上三种异常之外,则需要调用initCause(异常 e)方法将异常传递。
14、如果RuntimeException没有被捕获而直达main(),那么在程序退出之前会默认调用printStackTrace()。
15、对于finally处理模块,无论怎样,这个模块总会被执行,可以用来最后的释放资源等操作。更重要的是,在一个方法中,可以从多个点返回,并且可以保证重要的清理工作仍然会进行,比如:
void haha(int num)
{
try
{
switch(num)
{
case 0:
return;//返回
break;
case 1:
return;//返回
break:
deflaut:
break;
}
}
finally
{
System.out.println("ok");
}
}
此时,无论从何处返回则finally中的输出部分肯定会执行。
16、在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。
17、派生类构造器不能捕获基类构造器抛出的异常。
18、对于派生类的异常和基类的异常来说,其异常种类只能变小不能变大。
>>异常使用指南
●在知道如何处理的情况下才捕获异常。
●解决问题并且调用产生异常的方法。
●进行少许修补。然后绕过异常发生的地方继续执行。
●用别的数据进行计算。以代替方法预计会返回的值。
●终止程序
●进行简化
●安全
●把当前运行环境下能做的事情尽量做完,然后把异常抛到高层。
十三:字符串
●String对象是不可变的。修改String值的方法,实际上创建了一个全新的String对象。以包含修改后的字符串。而最初的String对象则丝毫未动。
●用于String的“+”与“+=”是java中仅有的两个重载过操作符,而java并不允许程序运重载任何操作符。
●当你为一个类编写toString()方法时,如果字符串操作比较简单,那就可以信赖编译器,它会为你合理的构造最终的字符串结果。但是,如果你要在toString()方法中使用循环或者比较复杂的字符串连接操作,那么最好自己创建一个StringBuilder对象,用它来构造最终的结果。
●如果你想要打印出某个对象的地址,用Object.toString()而不是直接打印this。
●System.out.format的用法和C中的printf()用法相同,当然,Java也提供了System.out.printf()此种写法。
●关于正则表达式的部分可以用到的时候再涉猎,因为很多东西我们平时是不会接触的。
》十四:类型信息
●运行时信息可以使得你可以在运行时发现和使用类型信息。
●每个类都有一个Class对象。可以使用.class来创建Class对象的引用。
●所有的类都是在对第一次使用时,动态加载到JVM中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法。因此,使用New操作符创建类的新对象也会被当做对类的静态成员的引用。
●Class对象仅在需要的时候才被加载,Static初始化是在类加载时进行的。
●仅使用.class语法来获取的引用不会引发初始化。但是为了产生Class引用,Class.forName()立即就会进行初始化。
●
●
●
●
java编程思想读书笔记三(11-21)的更多相关文章
- JAVA编程思想读书笔记(三)--RTTI
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...
- JAVA编程思想读书笔记(四)--对象的克隆
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
- JAVA编程思想读书笔记(五)--多线程
接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...
- JAVA编程思想读书笔记(二)--容器
接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...
- Java编程思想读书笔记之内部类
现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
- Java编程思想读书笔记(二)【一切都是对象】
begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方 ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
- Java编程思想读书笔记_第三章
本章提到的关于==的部分,一个完整的实验如下: class Test { public static void main(String[] args) { Integer i = new Intege ...
随机推荐
- Tabio – 轻松,高效的管理 Chrome 标签页
Tabio 是一个 Chrome 扩展,旨在简化大量浏览器标签页的管理.它提供的搜索功能允许您快速.轻松地找到您需要的选项卡.Tabio 便于组织你的标签,简单的拖拽排序.您也可以使用输入.删除和箭头 ...
- 读《数据结构与算法 Javascript描述》 | 平淡无奇
“平淡无奇”,一句话总结. 当初买这本书的原因,在意的是有没有什么令人惊喜的东西,特别是针对Javascript代码的奇思妙想,所以就买下了这本书. 在买的几本书里面,最先看的也是这一本,但看起目录就 ...
- C#开源项目汇总
Discuz nt: 一个开源的论坛项目.估计你现在逛过大大小小的论坛没有成百上千,也有几十个吧,其中是个论坛6个以上都是Discuz(以前大部分都是php版的),现 在官方也早就放出了DotNet( ...
- disable-the-loopback-check-for-specific-host-names-on-all-sharepoint-web-and-application-servers/
Microsoft has introduced new feature – Loopback Security Check in Windows Server 2003 SP1 to prevent ...
- iOS端项目注释规范附统一代码块
代码的注释经常被人忽略,以至于在后期维护的时候较为困难.我们准备在XX项目开始之前制定一套规范的注释体系,致力于达到就算维护人员改变也能快速上手的效果. 1.属性注释 属性注释 使用 /** 注释*/ ...
- iOS6、7、8、9新特性汇总和适配说明
iOS6新特性 一.关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调,收到内存警告时在didReceiveMemoryWarning中进行相关的处理 ...
- OC中的面向对象语法4
一. 继承 1. 继承的基本用法 l 设计两个类Bird.Dog // Bird的声明 @interface Bird : NSObject { @public int weight; } - (vo ...
- 微信企业号开发之-如何获取secret 序列号
最近有项目基于微信企业号开发,简单记录下如何查看企业号secert 工具/原料 微信企业号 方法/步骤 用管理员的帐号登录后,选择[设置]-[权限管理]进入管理组设置界面 在左边点击[ ...
- 【转发】NPAPI开发详解,Windows版
NPAPI开发详解,Windows版 9 jiaofeng601, +479 9人支持,来自Meteor.猪爪.hanyuxinting更多 .是非黑白 .Yuan Xulei.hyolin.Andy ...
- ADO.Net(四)——扩展属性和配置文件应用
一.扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展 ...