第十三条:
应使得类对外暴露的接口最小化,能private就private,能final就final。
十四条:
应该提供访问方法而不应该公有域。
理由:可以在内部改变的时候外部调用可以不改变
十五条:
除非必要,尽量使用非可变对象。
理由:非可变对象的状态是可以预测的,如果一定是要可变的,要减少可变对象的状态。
第十三条:
应使得类对外暴露的接口最小化,能private就private,能final就final。
十四条:
应该提供访问方法而不应该公有域。
理由:可以在内部改变的时候外部调用可以不改变
十五条:
除非必要,尽量使用非可变对象。
理由:非可变对象的状态是可以预测的,如果一定是要可变的,要减少可变对象的状态。
昨天心有不甘,觉得Java的开发人员不可能出现这种错误的,所以又继续的看资料。
其实容器是分为元类型和和泛型(可能我扯中文太蛋疼了)。。实际意思就是对于编译器来说List<Object>和List不是一个事情,但是最终编译器会替我们将List<Type>的类型擦除,最终JVM看到的其实还是List而不是List<Object>然后做强制转换的。我们反编译一下这个java文件的class看看就清晰了。
package com.company; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; public class Main { public static void main(String[] args) { List<A> a = Arrays.asList(new A(), new B(), new C()); for (A aa : a) { System.out.println(aa instanceof C); } } } class A { public A() { System.out.println("new A"); } @Override public String toString() { return "I'm A"; } } class B extends A { public B() { System.out.println("new B"); } @Override public String toString() { return "I'm B"; } } class C extends B { public C() { System.out.println("new C"); } @Override public String toString() { return "I'm C"; } }
在1.8以前的版本这个代码是无法运行的,原因是List<>具有不可协变性,可是在1.8这个版本之后,这是可以运行的。而且里面的内容也的确是实例化了子类。然后我就蒙逼了。说好的Collettion的不可协变性完蛋了。。。。
在当前用户目录下新建一个sh
按照我的备份方式就是
tar -jPcf BackupPath.tar.gztoBackupPath
然后运行crontab -e写入
* * * * 1 sh {你sh所在的目录位置}+{你的sh文件名字全称}
保存,然后这个sh文件就会每周一执行一次
略方便
Java里面Static关键字不仅可以修饰变量,函数,类,甚至修饰一段代码。
Static关键字在虚拟机加载class阶段就会运行,所以运行等级高于Construct函数。