第十三条:
应使得类对外暴露的接口最小化,能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函数。