override:同一个class文件里可以写多个类,但只能有一个公共类就是与文件同名的。static静态方法不能被override。被向上转型后仍然是使用子类覆盖了的方法(始终使用对象本身类型的方法)。但覆盖的方法应该是更进一步,更精确的描述。需要符合父类的约定。 但访问性可以被扩大,但不能缩小
外部类无法通过继承外部类覆写内部类。但可以通过继承内部类来覆写。
本地内部类:方法里的类。匿名内部类,return new ccc() {}之类
都可以访问宿主类的成员。外部都不能访问,区别是有无名字的构造函数,可否创建多个相同。
内部类的标示符: 外部类名$内部类.class。
内部类的意义就在于,不会受宿主继承某个类的影响(同多重继承)。GUI上用途广泛。p.new inner();
java的异常处理:throw一个new exception类型,原意是我表示反对,异常类型通常很简单只用名字或者一段str消息就可标明,用catch处理(handler),catch(type id)可以有多个,但只捕获到最符合的一个。余下的并不处理。异常情况分终止模型(termination)和继续(resumption)。
错误消息通常用system.err.print来显示,因为system.out可能会被重定向,缓存,和被系统暂缓输出。而err即使被重定向也会在屏幕上打印出来,而且会被记录在log4j中
。
initCase可以加入数据给错误对象
newe.initCase(e);
throw newe;
nullPointerException,runtimeException系统会自动抛出处理。
在final里再出错,会导致lostMessage
覆写方法时候只能抛出基类版本所声明的异常。
读写文件方法:
in=new BufferReader(new FileReader(path))
in.close(),in.readLine()
RuntimeException(e)可以用来包装错误对象,用e2.getCase()来拆箱
toString的重载最后用return返回值。
Class信息的保存是用一个叫Class Object的对象来创建的 。这个对象存储在同名的。class文件里。java程序在启动时并没有完全装载。
Class.forName是一个class的静态方法,返回Class本身的引用。第二种方法:类名.class更好。接口,数组和原始类型都可以用这个方法。
instanceof判断一个对象是不是某个类的实例。常用在下传之前。equals比较值,==比较内存引用。
实例化可以:[Class].newInstance
getClass()==返回的是包.类名,强类型的类名,不和父类匹配。要么是这种类型,要么不是
而instanceOf和 类.isInstance(对象),和父类匹配。是这种类型或者是派生的
class.forName(x),newInstance()会抛出异常。但用.class不会
==和equals在object类中是一样的。
getClass()是Class对象的引用。其他常用的方法:x.isInterface(),x.getSuperclass(),x.getName().
与反射不同之处:java.lang.reflect 反射能范围更广,x.getMenthod(),x.getConstructors(),用于网络分布式,反射能获取.
RTTI是编译时打开.class文件,而反射是可以不获取.class文件的。
正则表达式用法:import java.util.regex Pattern p=Pattern.compile("\\w+\\.") p.matcher("word")
indexOf(string),replaceAll("")也可以使用正则("p","word")
indexOf(string),replaceAll("")也可以使用正则("p","word")
数组越界会抛出RuntimeException数组放入时做类型检查,容器却不做但容器可以自动扩展。对象数组持有引用,原型数组持有值。对象数组初始化后默认都是null,
算法:随机挑出一个20长度数组中的一个值,组成新数组,要求不要重复。可设一个同长度数组,标示i位的选择与否。
Arrays类:equals()比较2数组是否相等,sort排序,fill填充,binarySearch已排序2分查找,asList转成LIst.
stringBuffer适合拼接 StringBuffer s= new StringBuffer("a"); s.append("b");
Arrays.fill(a1,a2)
System.arraycopy()可以拷贝各种数组,浅拷贝Arrays.asList(a)可以用[啊,b]方式序列化数组。
comparable接口,实现compareTo比较对象返回true false,用于Array.sort()的自动比较。这就是策略对象,不是将比较代码放在比较方法里,而是放在被比较的类中。
匿名类:public static Generator gen(){
return new Generator{
next(){return new thisclass(x)}
}
}
查看时间追踪软件,manictime timetracker。
comparator接口同时实现compare和equals
Array.binarySeach,返回负值表示你如果要维护数组应该插在哪,正值表示位置。不支持重复元素。
linkedHashSet和TresSet可以支持重复元素。
原型数组不允许使用comparator。sort可以接收实现comparator接口的对象来排序
Arrays.binarySearch(s,array,comparator)