1、关于final:
① final和static不能同时修饰类
② static修饰方法,能够被子类继承,但不能被子类重写
③ static final修饰的变量,类型和值均是固定的
2、关于static修饰的变量介绍
① 修饰成员变量: static修饰的成员变量称为静态成员变量,也称为类变量,它不属于某一个对象,而是由所有对象共享的。 静态变量存储在方法区,并且只有一份,所以我们在创建静态成员变量时可以给它就地初始化。静态成员变量既可以通过对象访问,也可以通过类名访问,但一般使用类名访问。生命周期伴随类的一生,随类的创建而创建,随类的销毁而销毁。
② 修饰成员方法: static修饰的成员方法称为静态成员方法,又称类方法,它也不是某个对象所特有的。 可以通过对象调用,也可以通过类名调用,一般使用类名调用。比起普通的成员方法,静态成员方法只是多了个static的修饰。静态成员方法不能直接访问非静态成员变量和非静态成员方法。因为静态成员方法属于类,不依赖于对象,而非静态成员变量和非静态成员方法依赖于对象,要想在静态成员方法中访问非静态成员对象和非静态成员方法,需要先在方法中创建一个对象才可以访问。而类方法和类变量都是属于类的,所以可以直接访问。非静态成员方法中可以直接访问类变量和类方法:
③ 静态成员属于类,随着类的加载而加载,先于实力变量出现,所以实例既可以调静态也可以调实例,静态只能调静态。
3、关于锁临界资源:临界资源就是指多个线程争抢的资源,如果多个线程同时执行,会产生高并发问题,所以多个线程不能同时在方法内部执行。只能有先后顺序的一个一个进行.。将并发操作同一临界资源的过程改为同步执行就可以有效的解决并发安全问题。
举例:设临界资源是个数组,如果锁定的是这个数组,后面对数组进行了扩容缩容等操作,就会产生新的数组,锁定的对象会改变,但如果是集合,如ArrayList集合,内部存储的是一个数组,对集合操作就越是对内部的数组操作,不会对集合产生影响,所以锁定的对象也不会改变。
4、java每次创建变量需要申请空间,java编译器自动执行,省略了这个过程,而c需要先申请存储空间
5、集合中元素默认是object类型,所有类都直接间接继承了object,所以限定时需要是引用类型,实际上是多态
6、关于代码的侵入性:为了实现某个一次性的功能而将代码写进框架太深,后面想修改或者舍弃,牵一发而动全身,不利于代码的维护
7、comparator接口需要重写只有一个抽象方法,该接口还有toString和equals方法,为的是自己使用,不是为了子类实现使用。
8、元素本身能比较大小,但不满足你的实际需求,可以临时传入一个比较规则,比如字符串,对继承了comparator的集合进行重写。