首页 > 代码库 > java随记2
java随记2
1、Arrays
java8里新添加了parallelSort等parallel开头的方法,表示利用cpu并行的能力
2.面向对象
如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类
子类不会获得父类的构造器,但子类构造器可以使用super调用父类构造器。但super调用也必须出现在构造器第一行,所以super和this不会同时出现。
另外,不管是否使用super调用来执行父类构造器,子类构造器总会调用父类构造器一次。因为系统会在执行子类构造器前,隐式调用父类无参数的构造器,父类会先调用更父类的构造器,所以最先执行的总是java.lang.Object类的构造器。
多态
java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
当把一个子类的实例对象直接赋给父类引用变量时,这个引用变量的编译类型是父类,运行类型是子类,所以当运行时调用该引用变量的方法时,总是表现出子类的方法,于是:相同类型的变量,调用同一个方法时,呈现多种不同的行为特征,这就是多态。
与方法不同的是,变量则不具有多态性,调用时依然是父类的变量值。
引用变量在编译阶段只能调用其编译类型所具有的方法,但运行时则执行它运行时类型所具有法方法,因此,多态时,可通过反射来调用父类所不具有的子类法方法。
递归
public static int fn(Integer n){ if(n.equals(0)){ return 1; } if(n.equals(1)){ return 4; } return 2*fn(n-1)+fn(n-2); }
1、如果一个包装类和一个基本类型比较大小,或者是两个基本类型进行比较大小,直接用==就好;
如果是两个包装类进行比较大小,那么使用equals(),返回值是true,false,或者使用Xxx.compare(),返回值是1,0,-1。(这里的equals()方法,已经被包装类重写过了,不是Object的equals())
2、==和equals方法的区别
当使用==来判断两个变量是否想等时,比较的是栈内存中的值,如果两个变量是基本类型变量,且都是数值类型,那么栈内存中个存放的是基本类型变量的值,所以只要两个基本类型变量的值想等,就会返回true。但对于两个引用类型变量,由于栈内存中存放的是变量的引用,所以只有当这两个引用类型变量指向同一个对象是,==才会返回true。==不可用于比较类型上没有父子关系的两个对象。
equals()方法是Object类的一个实例方法,但这个方法和==没区别。不过String类和基本类型的包装类重写了这个equals()方法,不再比较引用对象的引用地址,而是比较所引用的值。
系统自动为接口里的成员变量添加public static final修饰符.
所以接口里定义int MAX = 50;和定义 public static final int MAX = 50;的意义是一样的.
3.Lambda表达式示例
Runnable r = () -> { for (int i = 0; i < 100; i++) { System.out.println(i); } }; new Thread(r,"线程1").start(); new Thread(r,"线程2").start();
Lambda表达式只能实现一个函数式接口(只有一个抽象方法的接口)
跟匿名内部类有很大的相似处
4.强制垃圾回收
System.gc()
Runtime.getRuntime().gc();
重写finalize()方法,可以看出是否执行了垃圾清理
java随记2