java深入学习笔记_第1页
java深入学习笔记_第2页
java深入学习笔记_第3页
java深入学习笔记_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java 深入学习笔记 面向对象编程的三原则(封装,继承,多态) 怎样理解? Java 封装的基本单元是类。 为什么对整数或字符不使用 new 关键字?答案是 java 的基本类型并不是作为对象实现的。类是一个逻辑 结构,而对象则有其物理真实性(在内存中占有空间) 。 构造函数调用是在对象被创建后,new 运算符完成之前,将调用构造函数。 一个构造函数隐含的返回类型是类类型本身。 This.关键字 一般是在方法内部使用 this 关键字来引用当前对象。 This 调用的是方法对象的一个引用。 当局部变量和一个实例变量同名时,局部变量隐藏了实例变量。 使用 this 可以解决在实例变量和局部变量之间可能出现名字空间冲突的问题。 垃圾收集机制 由于对象是使用 new 运算符动态第分配内存,所以还要销毁这些对象、释放其存储空间以备从新分配。 工作原理:当不存在对一个对象的引用时,就假定不在需要该对象了,垃圾(garbage)收集仅仅在执行 时偶尔出现,finalize() 仅在垃圾收集之前被调用。 堆栈类 在 java 中类是一种机制,正是通过它实现了封装,创建一个类时,就是创建一个新的数据类型,这个数 据类型定义了被操作的数据的本质和操作数据的例程, 堆栈类有一点要注意,保存堆栈的数组可以被堆栈类外面的代码改变,这使得堆栈很容易被误用或受到损 坏。 方法重载(java 实现多态的方式之一) 重载的价值是:它允许相关方法通过使用一个公用的名称来访问。 对象参数 把对象作为参数进行传递是常用的用法,对象参数常用在构造函数中, 参数传递: 按值调用,按引用调用 Static 关键字 通常,类成员必须通过它的类的对象访问。然而,可以创建这样一个成员,他能够被它自己使用,而无需 引用一个特殊的实例。当声明一个对象为 static 时,可以在类的任何对象创建之前访问它,而无需引用任 何对象,被声明为 static 的变量本质上是全局变量,当声明该类的对象时,不会产生 static 变量的副本, 类的所有实例共享同一个 static 变量。 如果要通过计算来初始化 static 变量,可以声明一个 static 块,这个块仅在该类被第一次加载时执行一次。 内部类 and 嵌套类( nested classed) 嵌套类的作用域由包含它的类的作用域限定因此,如果类 B 在类 A 内定义,则类 B 为 A 所知,但不被 A 的外面所知。嵌套类可以访问嵌套它的类的成员,包括私有成员,但包围类不能访问嵌套类的成员。 有两种类型的嵌套类:静态的和非静态的,静态嵌套类是一个具有 static 修饰符修饰的类,因为是静态的, 所以他必须通过对象来访问其包围类的成员,也就是说,他不能直接引用包围类的成员,因为有了这个限 制,所以很少使用静态嵌套类。 最重要的嵌套类是内部类(inner ),内部类是一个非静态的嵌套类。它可以访问它的外部类的所有变量和 方法,并且可以象外部类的其他非静态成员那样以同样的方式直接引用他们,因此,一个内部类是完全在 其包围类的作用域内的。 但是内部类的成员仅在内部类的作用与内是可知的,不可以被外部类使用。 String 类 理解字符串第一件事是:创建的每一个字符串实际上都是一个 String 类型的对象,即使是一个字符串常量, 也是一个 String 对象。 理解字符串第二件事是:String 类型的对象是不可改变的。一旦创建一个 String 对象,就不能改变其内容。 变长参数(varargs) 一个变长参数由三个句点(。 。 。 )来指定。 一个方法既可以带正常参数,也可以带变长参数,但是变长参数必须是该方法最后声明的参数,例如: Int doIt(int a, int b, double c, int . vals); 而且只能有一个 varargs 参数。可变参数与模糊性。 超类变量可以引用子类对象(父类的引用指向子类的对象 ): 决定了可以访问什么成员的是引用变量的类型,而不是它引用的对象类型。也就是说,将一个子类对象的 引用赋给一个超类引用变量时,只可以访问由超类所定义的那部分对象。 Super 的两种常见的形式:第一种调用超类的构造方法。第二种访问被子类成员所隐藏的超类成员。 在多级层次结构中,super0 方法总是引用最近超类中的构造方法,如果一个超类构造方法要求参数,那么 所有的子类必须“向上 “传递耐那些参数不管之类是否需要参数。 动态方法调度 方法重写构成了 Java 最强大的一个概念基础:动态方法调度(dynameic method dispatch) 动态方法调用是一种机制,借助与这种机制,对一个已重写方法的调用将在运行时,而不是在编译时解析。 前面讲过,超类引用变量可以引用子类对象,java 使用这个事实来解决在运行时对 重写方法的调用。其运行原理是: 当一个超类引用调用一个重写方法时,Java 根据在调用时被引用对象的类型来决定执行哪个版本的方法, 因此这个决定是在运行时作出的。但引用不同类型的变量时,将调用不同版本的重写方法。换句话说,是 被引用对象的类型(不是引用变量的类型)决定将执行那个版本的重写方法,因此,如果超类包含一个被 子类重写的方法,那么当通过超类引用变量来引用不同类型的对象时,就会执行那个方法的不同版本。 为什么重写方法: 重写方法允许 java 支持运行时的多态,多态是面向对象编程的本质,它允许通用类指定方法,这些方法 对该类的所有派生类都是公用的,同时该方法还允许子类定义这些方法中的某些或全部特定实现,重写方 法是 java 实现其多态性 “一个接口,多个方法 ”的另一种方式。通过同时使用继承和重写方法,超类能 够定义供其所有之类使用的方法的通用形式。 通过继承和运行时的多态性的双重机制,可以定义一个一致的接口,该接口可以被几个不同但却相关的对 象使用。 继承中使用 final 关键词 final 有三种用途。第一,它可以用于创建一个以命名常量的等价物,第二个用法是适用于继承, 使用 final 来阻止重写 第三个用法是用来阻止继承 正则表达式(规则表达式) Java.util.regex 包,它是描述字符序列的字符串, 有两个可支持规则表达式的处理的类:Pattern and Matcher.,使用 pattern 来定义规则表达式,使用 matcher 来匹配其他序列中的模式。 Pattern 该类没有构造方法,而是再调用 compile()工厂方法是创建模式。 Matcher 该类没有构造方法,而是在调用 matcher()工厂方法时创建一个 Matcher, Mathcers()模式全局匹配,放回的是布尔值 Find()判读部分匹配, 返回布尔值,对 find()的每一次调用都会从上一次到达的位置开始。 通过调用 group()方法,可以得到一个包含最后匹配结果的字符串序列,如果不存在匹配项,会抛出 IllegalStateException, 通过调用 start()方法,可以得到当前匹配的输入序列每一个匹配项的开始索引值,通 过 end(),可以得到超过当前匹配项末尾的一个索引。通过 replaceAll(),可以用另一个血泪来替换一个匹配 序列在文中出现的所有地方,newStr 指定新字符串序列。 在默认情况下,find() 首先找到与模式相符的最长序列,这被称为勉强模式(greedy behavior) .我们可 以向模式中添加?量词来指定“勉强模式(reluctant behavior) ”, Java 集合框架 所在包 java.util 自动装箱为简单类型的使用提供了变量 利用自动装箱/拆箱,可以在使用集合中存储简单类型变得十分便利,因为一个集合只能存储引用,而不 是简单类型,有了自动装/拆箱以后,若需要存储或检索简单类型,java 可自动地执行正确的装箱和拆箱 操作,而无须再手动的方式。 List 接口 List 接口扩展了 Collection,并声明集合的行为是存储一个序列的元素,列表中可以包含相同的元素。 Set 接口 Set 接口定义了一个组,他扩展了 Collection 接口并且声明该集合不允许存在相同的元素,该接口是一个 泛型接口 SortedSet 接口 该接口扩展了 Set 接口并且声明了自己是升序的集合,Null 不允许存于集合中, Queue(队列)接口 Queue 是 1.5 新增的,他扩展了 Collecion 接口,并声明一个队列行为(通常是一个先进先出列表) ,他也 是一个泛型接口,在使用 Queue 时,有几点要注意,首先,只能从队列的顶部删除元素,其次,只有两种 方法可以获得删除元素:poll() 和 remove(),offer()方法只能添加一个元素到队列中,因为一个队列的长 度固定。 Collection(集合) 类 所有集合类都不是同步的,但可以得到同步的效果 ArrayList 类 扩展了 AbstractLIst 接口,并且实现 List 接口 声明:class ArrayLIst ArrayList 支持按需要增长的动态数组,在 Java 中,标准数组是固定长度的,数组创建以后,不能增长或 收缩,这也意味作你必须知道数组将容纳多少元素,但有时候不知道多少元素,直达运行时才确定,为了 处理这种情况,集合框架定义了 ArrayList。实际上,一个 ArrayList 是一个对象引用的变长数组,也就是 说,一个 ArrayList 可以动态增减大小, 从 ArrayList 中得到一个数组 将集合转化成数组的几个原因: 对于一些特定的操作获得更快的处理。 传递数组到一个没有被重载额方法中以接受集合。 集成新的基于集合的代码和没有使用集合的遗留代码。 转换 ArrayList 到一个数组有两种方法: Object toArray(); T toArray(T array ) 第一个版本返回一个 Object 数组,第二个返回与 T 同一类型元素的素质,一般情况下使用第二种形式, 因为它返回了数组的确切类型。 LinkedList 类 该类实现了 List 接口和 Queue 接口,他提供了一个链表型的数据结构, 声明:class LinkedList HashSet 类 它创建了一个使用哈希表存储的集合, TreeSet 类提供了一个使用树结构存储 Set 接口的实现,对象以升序存储,访问和遍历是很快,TreeSet 是 存储大量能很快查找排序信息的很好选择 在集合中存储用户定义的类 集合能够存储任何内嵌的对象,包括用户创建的类对象, Map 接口 该接口将唯一键映射到值,键是用来查找值的对象。该接口是泛型。 映射循环使用两个基本操作:get() and set()。映射不是集合,因为它不实现 Collection 接口。但是能够得 到映射的集合视图,方法是使用 entrySet()方法,它放回一个包含映射中元素的集合。为了获得键的集合 视图,可以使用 keySet()方法,为了获得值的集合视图,可以使用 values()方法, SortedMap 接口 扩展了 Map,他确保了以键的升序方式保持键值对。 HashMap 类 该类是使用哈希表实现 Map 接口。它不保证元素的顺序。 TreeMap 接口 该类可以以排序的方式存储键值对,并允许快速查找。树映射保证了它的元素以键的升序存储。 比较函数 TreeSet and TreeMap 都以排序的方式存储元素。如果想以不同的顺序排列元素,需要再构造一个集合或 者映射时指定一个比较函数对象。 Comparator 接口定义了两个方法:compare() and equals(). Compare()方法比较两个元素的顺序,如果相等,则返回 0,大则返回正,否则相反。 泛型的添加从根本上改进了集合的使用和安全,因为它: 1, 确保只有对合适类型对象的引用才能够存储在集合中。因此,集合总是包含对以知类型对象的引用。 2, 从集合中检索的引用,减少了强制类型转换的需要。相反,从集合中检索的引用将被自动强制转换为 合适的类型。 Vector 它实现了动态数组。这与 Arraylist 类似,但两者有区别,Vector 是同步的。 可以使用 addEle

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论