StringBuffer类:StringBuilder
String类一旦定义,就不能改变,只能改变String对象引用。任何一个字符都是String类的匿名对象。
String 与StringBuffer 均派生于CharSequence。
StringBuffer是线程安全的,StringBuilder(优先)不是。
RunTime类:
每个JVM进程中均有一个RunTime类的对象,维持一些运行时的属性即创建新进程的操作。
RunTime是单列类:Runtime run =Runtime.getRuntime();
可以取得内存等,gc()也在该类中。
Runtime最重要的作用是exec()调用本机方法,返回一个进程的对象。
System类:
System.gc() 会调用 Runtime.getRuntime().gc();
若一个对象在销毁前需考虑一些收尾的事,需考虑复写Object类的finalize()。在对象回收前,就算抛出了任何异常,也不会影响程序流程。
final:定义不能不继承的类,不能赋值的常量。
一个interface中,所有方法为公开、抽象方法;所有的属性都是公开public、静态static、常量final。 且必须给其初值.
Abstract:
1. 一个类中如果所有的方法都有实现,我们仍然可以定义这个类为abstract class
2. abstract不能和static,private放在一起定义方法。
抽象类是一个类,所以,它有构造方法。抽象类中的构造方法供子类实例化调用。
有5点不同:
1:interface被继承时用的关键字是implements,而且可以同时implements多个interface,而abstractclass被继承时用的关键字是extends,而且只能同时extends一个abstract class。
2:interface内定义的方法都是public的,而abstractclass内的则不一定。
3:interface内定义的成员对象都是public & static & final的,而abstract class不是 , 可以有自己的数据成员.
4:interface的方法不能有默认实现,只有一个声明,而abstractclass内声明abstract的方法不能有实现,非声明abstract的方法可以有默认实现。
在Java 8中,接口中的方法可以被实现。接口中被实现的方法叫做default方法,用关键字default作为修饰符来标识。也可以称为Defender方法。
5:interface被implements时,所有方法都必须被实现,必须声明是public的,而abstract class被extends时只有abstract的方法才必须被实现,别的有默认实现的直接被继承过来。
7比较器:
若需将一个类定义的可以排序,需让之实现Comparable<T>,并实现compareTo(T o),返回1,0,-1,再通过Array.sort()排序。
Compareble是类定义时的接口,实现compareTo,这样该类数组可以排序;定义在类内部。
Comparator是专门定义一个类的比较规则,实现compare。定义在类外部。
BigInteger不能保存小数,BigDecimal可以有小数。可以使用BigDecimal实现准确的四舍五入。
如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,即比较地址是否相同。
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。