继承中 “编译看左边,运行看右边”的含义。
当父类的引用指向了子类的对象时,在编译时,它的成员变量和方法是由父类确定。在运行时,结果由子类对象确定
class Father(){
public void test2(){}
}
class Son(){
public void test(){}
public void test2(){
}
}
Father f = new Son();
f.test()// 当Father类中没有test()方法时,如果实例调用该方法则编译报错
f.test2()//当Father类中有test2()方法时,如果实例调用该方法编译通过,运行结果由Son类决定。
当Son类重写了父类的test2()方法,则执行Son类中的test2()方法
Son s = new Son();则可以调用Son类中的特有方法
java中数组扩容的几种方式
1,arraycopy(不需要导包)
此处定义了一个静态方法实现数组扩容
public static int[] test(int[] a){
int[] b = new int[a.length*2];
System.arraycopy(a, 0, b, 0, a.length);
//(原数组,原开始下标,目标数组,目标开始下标,从原数组复制的长度)
//如果不是拿原数组的所有数据要注意下标越界问题
return b;
}
2,导包import java.util.Arrays;
toString方法,把数组转换位字符串形式并返回
例如:
int[] a = {1,3,5,7,9};
System.out.println(Arrays.toString(a));
//输出结果: [1, 3, 5, 7, 9]
1)使用copyOf方法扩容数组
copyOf:复制或者截取指定数组并返回
double[] a = {1,3,5,7,9};
a = Arrays.copyOf(a, a.length*2);
//(原数组,从原数组复制的元素个数如果超出原数组大小后面补默认值)
//各种类型数组默认值
//整型数组的默认值是 0
//浮点型数组的默认值是 0.0
//布尔类型数组的默认值是 false
//字符类型数组的默认值是 0
//引用类型数组的默认值是 null
System.out.println(Arrays.toString(a));
//[1.0, 3.0, 5.0, 7.0, 9.0, 0.0, 0.0, 0.0, 0.0, 0.0]
2)使用copyOfRange
copyOfRange:将数组中指定范围复制新数组并返回
public class Test3 {
public static void main(String[] args) {
float[] a = {1,3,5,7,9};
a = Arrays.copyOfRange(a,1,a.length*2);
//(原数组,原数组开始下标,原数组结束下标)这里从3开始复制
//目标数组长度=结束-开始
System.out.println(Arrays.toString(a));
//[3.0, 5.0, 7.0, 9.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
}
关于mybatis二级缓存的一点个人想法
网上其他很多博客都说mybatis二级缓存默认不开启,但是在配置文件不写setting设置二级缓存开启,也可以实现二级缓存的功能,但是设置了二级缓存把value="false"时没有二级缓存,由此,mybatis的二级缓存现在应该已经是默认自动开启状态.