记录。。。。

发现本身的脑子愈来愈很差使了,不少东西很容易迷糊或者忘掉,因此仍是记起来,免得又迷糊,忘掉了。java

--------------------------start正则表达式

容器部分

增强否循环其实就是语法糖,对循环的一种包装。数组

对于拥有迭代器的类,如ArrayList,LinkedList或者其余集合类,编译后实际上是转换成了 迭代器进行的。spa

对于没有迭代器的,如数组,会被转换成普通的for循环。.net

class 反编译后:设计

对于实现了 Iterable 都是能够迭代的,本接口相似于 可迭代的 一种标识(跟Serializable 差很少吧,不过须要实现里面的方法)3d

Iterable 跟 Iterator代理

都是接口,不过Iterable 更像是能力标识接口,Iterator 更像是实现功能接口。code

都是要实现方法,能够经过匿名内部类的方式。对象

TIJ4 P243-P244

异常继承体系

单继承或实现中:

在父类方法中,子类能够抛出一样的异常,或者抛出更小的,更细致的异常。即:子类异常不能比父类异常更大。

在父类方法中,没有抛出任何异常,子类也没法抛出异常。即:子类没法凭空抛出异常。

继承且实现同时有:

当两个父类(一个抽象类,一个接口)中同一个方法(方法名,参数列表都全同样),抛出的两个异常都是不相同的(两个异常没有继承关系),那么子类中的方法没法抛出异常,必须进行捕获。。。

当父类构造器中有某异常声明时,子类必须抛出次异常,且能够抛出其余异常,(由于子类构造器会调用父类构造器,若是将super()用try catch 捕获,会显示,super()必须在第一行)

TIJ4 P270-P271

收获:看完这个章节之后,对java中的那种继承貌似更有了一点感触,之前一直以为继承就是为了抽象出共同的属性,或者方法,接口更是没有什么用。。。仅仅是为了子类可替换性?可是今天看了异常,以为继承、抽象是很重要的,尤为是你定义好要抛出什么样的异常。这样设计,子类就能够很规范,何时子类必须捕获本身的异常,何时子类也能够抛出更细致的异常。

总感受那种高深的话在嘴边,但却又没办法说出来。。。。。。也可能只是有了一丁点感触,却又不是很深入,没能用本身的语言表达出来。

正则表达式

TIJ4中的String 部分中关于正则的都没有看,看不懂。等先入门了正则表达式在看。

加载顺序

静态变量

静态初始化块

变量

初始化块

构造器

若是有继承父类,则 先初始化父类, 在父类中 也是 这个顺序

静态变量

静态初始化块

变量

初始化块

构造器

所以

父类--静态变量

父类--静态初始化块

子类--静态变量

子类--静态初始化块

父类--变量

父类--初始化块

父类--构造器

子类--变量

子类--初始化块

子类--构造器

Java基础知识之初始化——定义时初始化和构造器初始化的差别?

定义时初始化和构造器初始化的差别:

变量定义时初始化的次数是一次,而构造器初始化的次数是两次。

一个类的准备工做包括三部分:

一、加载。这是由类加载器执行的。该步骤将查找字节码(一般在classpath所指定的路径中查找,单这并不是是必须的),而且从这些字节码中建立一个Class对象。

二、连接。在连接阶段将验证类中的字节码,为静态与分配存储空间,而且,若是是必须的话,将解析这个类建立的对其余类的全部引用。

三、初始化。若是该类具备超类,则对其超类初始化,执行静态初始化器和静态初始化块。

初始化被延迟到了对静态方法(构造器其实也是静态的)或者很是数静态域进行首次引用时才执行。(new 或者 使用静态方法,常量等,都会引发初始化)

Class.forName与Class.class的区别。

Class.forName会致使静态域的加载 Class.class则不会。即 不会触发第三步

静态编常量:static final

当访问static final 的常量的时候,也不会触发初始化,且仅仅会连接一次。

普通静态常量:static

当访问static的常量时,会触发初始化,初始化域会被触发,连接每次都会被触发。

即:每次都要为这个静态常量进行分配空间,初始化该存储空间。

TIJ4 P319-P320

关于动态代理

一直以为很神奇,动态代理究竟是咋么个回事,为何会生成一个这样子的类,为何会调用。

资讯

泛型

参数能够用在类名后,

也能够写在方法的返回参数前。

若是 类中有

那么方法中,属性中均可以使用T,使用泛型。

若是只是想单纯的对某个方法使用泛型,就在方法的返回值前添加。

 

枚举

以前,一同窗给我了一个截图,经过枚举调用方法。

相似截图

UriEncoder是枚举类,FIXING是一个枚举类型。

打开源码看了一下:

原来是在枚举内 实现了方法,而后就本身试着写了,可是发现怎么都调用不到。

而后看了整个类,发现,原来枚举内的方法,在枚举类内都有抽象定义。

而后在枚举中进行了具体实现,而后就能够经过不一样的枚举类型,调用具体的不一样的实现。

真的是秀。。。

关于泛型

List list=new ArrayList<Integer>();
List<Integer> list=new ArrayList<Integer>();
List<Integer> list=new ArrayList();

其中 第一行是没有泛型的。。。2 3行有。

由于泛型是在编译时候检查的,并且是经过引用进行检查的,new list 只是开辟了一个空间,并无对泛型进行一个约束。

 

泛型通配符:

当使用通配符

下界通配符

List<? extends zzz>=new ArrayList<xxx>  其中 xxx extends zzz

这是容许的,可是丢失了add的操做能力,没法添加任何元素。

上届通配符

相关文章
相关标签/搜索