备考OCJP认证知识点总结(四)

一、学习内容摘要

1、String直接声明变量和new对象的区别
2、StringBuffer的方法并未针对线程安全进行同步,方法有append、delete(int start,int end)、insert、reverse(int offerset,String或其他基本类型)、以及toString
3、文件的声明和何时被创建,创建文件和文件夹的方法,用高级类包装低级I/O类,PrintWriter可用于包装其他Writer类,也可以直接从File或String构建,具有新增的append、format、printf方法
4、序列化,什么类可以被序列化,序列化时对象中什么变量会被序列化,牵扯继承时序列化有什么不同。
格式化。Locale对象的创建:Locale.getDefault()或用Locale.Italy等字段构建,DateFormat对象的获得:不能new 。getInstance显示详细信息,getDateInstance 只显示日期,参数有style和locole


二、知识点总结

1、使用有效地控制台对象调用方法readPassword时返回的是一个char类型数组,目的是为了防止他人在String常量池中获取密码信息。
2、在序列化过程中,对象的transient变量将被赋予该变量类型的一个默认值,序列化操作对static变量没有任何影响。
3、File.separator是一个分隔符字符,在路径中用。
4、只有在写入数据时才需要调用flush方法,与读相关的类不具备这个方法。
5、SetMaxinumFractionDigits方法应用于格式化而不是解析,且采取四舍五入而不是截断。
6、NextXxx方法通常在hasNextXxx之后调用。后者会判断下一个标记的类型,但不移动标记。
7、集合   TreeSet保证元素按自然顺序升序排列。自动排序:TreeSet  PriorityQueue  Sorted
Sorted修饰表示集合中的顺序是根据某个或某些规则确定的,排序是基于对象本身的属性进行的,最常见的是自然排序
PriorityQueue(自动排序)以用户定义的优先(comparator)排列元素,默认优先从小到大。Poll方法可用于迭代编译对象,迭代一次返回对象中具有最高优先级的项并从队列中删除他,而peek不删除
 ArrayList快速迭代快速随机访问,但插入、删除效率低,linkedList与之相反,提供新的方法可以从开始或末尾添加和删除元素,这使得栈或队列变得简单,迭代可能比ArrayList满,但是当需要快速插入和删除时选择更好。
重写hashCode()中return int时的运算包含素数便于使元素广泛随便分布在哈希码桶中。
 得到对象在哈希桶中广泛随机分布的方法有两种:在hashCode中对类的实例变量进行异或运算;将类的实例变量与素数相乘
Main(){  List<Integer>  list=new  ArrayList<Integer>(); append(list) } 改代码可编译且运行 list中将包含“0043”  因为旧式的遗留代码允许将任何东西(基本类型除外,但添加的基本类型会自动装箱)放到集合中。为了支持遗留代码,java5和6允许较新的类型安全代码使用旧式代码。

对于迭代:如果两个对象相等,则他们的哈希码也必须相等。   对于所有实例,hashCode返回同一个值是合法的,尽管在实践中效率很低。  hashCode重写规则:一致性:多次调用x.hashCode会返回同一个整数;如果x.euqls(y)为ture,则x.hashCode==y.hashCode为ture。如果为false,则x.hashCode不一定等于y.hashCode,但不等于会产生更好的效率。
如果不重写hashCode则new的每个项都会进入自己的桶,这时重写的equals不起作用
 equals重写注意参数是Object o  The hashCode method for a given class can be used to test for object inquality,but not object quality,for that class .   The hashCode method is used by the java.util,HashSet collection class to group the elements within that set into hash buckets for swift retireval 快速取出    set 用add添加重复元素时,将添加失败,且返回false。 HashSet迭代时不关心顺序,而LinkedHashSet会按照元素插入顺序迭代。如果没有重写hashCode方法,则默认的Object。hashCode将允许多个在意义上相等的对象添加到不允许重复的集合中。 toArray()返回的是Object,有参用法是Integer[]  in=new Integer[3]    in=list.toArray(in)  其中list是已声明泛型为Integer的ArrayList对象。  编译器编译时是看不见泛型的。    static void append(List list){  list.add(“0043”);}
Main(){  List<Integer>  list=new  ArrayList<Integer>(); append(list) } 改代码可编译且运行 list中将包含“0043”  因为旧式的遗留代码允许将任何东西(基本类型除外,但添加的基本类型会自动装箱)放到集合中。为了支持遗留代码,java5和6允许较新的类型安全代码使用旧式代码。
不能将new ArrayList<Dog>/<Cat>()传给变元(ArrayList<Animal>   list),否则编译出错
通配符只可以针对引用声明使用,当创建一个新的类型集合时,他们不能作为类型参数。
如果添加到哈希码桶中的对象的实例变量的值的改变影响到哈希码值的改变将导致Hash集合无法通过键值找到该对象,也就无法对该对象进行任何操作,但对象仍在集合中。
For(int i:intList)遍历时,intList必须是已经声明泛型为Integer的集合类,否则编译出错
通配符?只能在声明集合时使用,不能再实例化集合时使用
The type List<A> is assignable to List <? extends A> 反之不可
The type List<Object> is assignable to List <?>  <?>=<? extends Object>
任何类型的List都可以赋给变元List<?>,但意味着不能添加任何东西到作为List<?>引用的列表中,声明泛型时只有extends 而没有 implements
Comparable  thisObject.CompareTo(anotherObject)   自定义如何比较 若thisObj>otherObj 返回一个大于0的数,当重写compareTo时应该将变元类型改为正在排序的类型。若thisObj与otherObj类型不同,则可编译但有异常
创建泛型方法:假如你想创建一个方法,它带有任意类型的一个实例,实例化该类型的ArrayList,并向ArrayList添加实例。基本而言,我们只不过想要一个实用工具方法,可以传递类型给她,且她能过利用该类型来构建一个类型安全的集合。


使用泛型方法,可以再没有特定类型的情况下声明方法,然后基于传递给方法的类型获得类型信息。如 class CreateAnArrayList{
Public  <T> void make ArrayList(T t){
List<T> list=new ArrayList<T>();
List.add(t);
}
}
如果传进一个Dog类型实例,则该方法会创建一个泛型为Dog类型集合
TreeSet 插入该Set的所有元素都必须实现Comparable接口,所有这些元素都必须是可相互比较的(类型相同,compareto返回不为0),即若有两个元素compareTo之后返回0,则add方法会添加失败
自然排序中,空格排在字符前面,大写字符排在小写字符前面,aAa排在aAaA前面
Collections.reverseOrder()返回一个Comparator,无参时按自然顺序逆序排序,有参MyComparator时按自己定义的顺序的逆序排序
Arrays/Collections。binarySearch(数组or集合,数组or集合元素),被查找的数组或集合必须在能够查找它之前进行排序,否则结果不可预测。但通常返回-1
数组与集合转换  Arrays。asList(myArray)  不论是否声明泛型,集合类的toArray都返回一个Object数组,需要强转。而get(int index)返回声明的对应泛型,无需强转

BinarySearch若是查找自然顺序的则无需第三个变元,若是Comparator排序后,则必须要第三个变元对应的Comparator
SortedSet 不能被实例化 即不能new
Lower <  floor<=  higher>  ceiling>=
tailMap(a) 返回一个子映射sortedMap 从键a开始,含a
Map带有两个用逗号分隔的类型参数


8、转义字符  \b空格 \n回车 \f换页  \” 双引号 \\ 斜杠 \t 水平制表符
元字符  \d 数字 \s 空格符 \w 字字符(字母数字或下划线) .点元字符 意味着此处可以是任意字符  若要将字符点号作为定界符 则String regex=“\\.”类似还有\\d
若字符串中用了\,而不是转义字符就会报错如“\s”
Scanner默认定界符是空格,可用new Scanner()。useDelimiter(String s(正则))重新设置定界符。Next()以String返回下一个标记,并移动到下一个标记。用nextXxx()之前应该用hasNextXxx(测试一下),否则类型不匹配抛出InputMismatchEx。\d+表示在一行中查找一个或多个数字
用带斜杠的元字符作为字符串参数设置定界符时记得加上一个转义斜杠

9、File   File dir=new File(“dir”); File file=new File(dir,“file”);可编译 但file.createNewFile()将抛出IO异常:系统找不到路径

10、Serialize   如果超类实现了Serialize,那么他的所有子类也如此。如果超类没有实现,而其子类实现了,那么在反序列化一个子类对象时,将会运行非序列化的超类的构造函数。writeObject和readObject是序列化系统提供的特殊回调契约的一部分,实质上是指:“如果你具有一对与这个签名完全匹配的方法,就会在序列化/反序列化的过程中调用这些方法”。
当保存Dog时,你可以进入序列化和反序列化的中间并说:“我想在序列化Dog对象时顺便表示其成员Collar类型对象的状态变量(一个int size)添加到流中”,但不要忘了defaultWirte(or Read) Object。序列化时要注意IO异常,因此要放入trycatch块中
Exist()可以测试文件或目录是否存在,而isFile()只能测试文件
序列化时看不见transient变量(若使用它,取它的类型的默认初始化值),static变量也不会受影响
只有在写入数据时才需要调用flush方法,与读相关的类不具备这个方法

当创建子映射时,就为新的集合提供了一个值的范围。当将键/值对添加到原始的TreeMap或部分复制的SortedMap中时,新的项会被自动添加到其它集合中。但向原始集合添加的新的项如果位于复制的范围之外,这时新的项只会出现在原始集合中。如果试图将一个超出复制范围的项添加到复制的集合中,则会抛出异常。
注意TreeSet和TreeMap的三个方法headXxx,subXxx,tailXxx,前者变元为终点,不包括在内,第二个变元为起点,和终点,起点包括在内,终点不包括在内,第三个变元为起点,包括在内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值