1.jdk8中 接口中可以添加default方法,实现类不需要实现default方法,与抽象类有点像,default与访问权限的修饰符不是一个东西
interface B { public void run(); default public void sleep() { System.out.println("I'm sleep..."); } } //也可以直接定义实现静态方法 public interface TestMethod { public static void method() { ...}}复制代码
1、定义一个静态的带有方法体的方法
2、接口不能创建对象,调用静态方法不需要对象
(1)如果多个接口定义了同样的静态方法,即使存在实现类,同时实现多个接口,仍然是不可使用实现类名调用接口的方法
(2)如果多个接口定义了同样的默认方法,实现类实现多个接口时,必须重写掉默认方法,否则编译失败。在接口中可以定义实现的方法体是java8的一大特性,可以定义多个静态或者默认的方法,静态必须加上static,默认方法必须加上default关键字
2.泛型中<E>常用于元素,<T>常用于类
3.HashSet会根据hashCode和equals判断元素是否相等去重,不排序。TreeSet既能去重,也能排序
TreeSett=new TreeSet 或TreeSet t=new TreeSet (E extends Comparator) 复制代码
4.method(T[] t),参数可以是E extends T ,eg:method(Integer[] t),传入参数可为int[] m,集合却不能这样传 ,T[] t={new E extends T} ,集合add时类似可以传子类
publicvoid method(ArrayList list){} <=> public void method(ArrayList list){代码块2} 复制代码
编译器不允许代码块2写add方法,因为如果传入参数为ArrayList<Dog>,结果添加了一个Cat,就出问题了
5.可执行的jar秘诀在于manifest文件,socket是长连接,客户端每隔一段时间向服务器发送数据包
6.RMI(java函数库的一部分):客户端,客户端辅助程序(服务代理),服务端辅助程序,服务端,服务端接口必须是serializable,RMI客户端需要取得远程服务的地址和名称 servlet,jsp不属于java函数库
7.正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,高位用0进行补位(自然而然的,就由负数变成了正数了),正数或者负数左移,低位都是用0补
8.JVM中String 的机制,当你new 一个String时,总会在堆中新建一个对象,然后String 引用指向这个对象,然后检查String pool(字符串池)中有没有和这个字符串内容一样的字符串,没有的话,将此字符串加入String pool。 当你用形如 String a = "abc",声明一个字符串时,jvm先检查串池里有没有 abc 这个字符串,有的话直接指向此字符串,没有的话在串池中增加这个字符串,然后指向它, String pool不是对象,是不受GC管理的
9.断言主要用来排错,如果不对程序直接停住
10.枚举默认继承Enum,不能再继承其它类,枚举可以实现接口,不使用枚举也可以用其它方式代替实现类似的效果,使用后更优雅