JAVA中@的作用
@代表注解,对某一事物进行说明
JAVA内置注解(三个):
- @Override:用在方法之上,用于说明此方法是改写父类,编译器还会帮你检查下面的类在父类中是否存在,如果不存在就报错
- @Deprecated:建议不使用的旧API,如果调用编译器就会抛出警告
- @SuppressWarnings:关闭警告消息
HashMap与HashTable的关系
相同点:
- 都实现了map、Cloneable、Serializable三个接口
- 数据结构相同,都是由数组元素为链表头节点的数组组成
不同点:
- HashMap继承自AbstractMap,HashTable继承自Dictionary
- HashMap在外部没有做同步处理的时候,是非同步(Synchronize)的,所以是非线程安全的
HashTable中的方法是同步的(Synchronize),是线程安全的,可以不在外部做同步处理直接使用 - HashTable中的键(key)与值(value)都不许为空,HashMap允许键(key)为空且只能有一个,可以有一个或多个键的值为空(所以HashMap不能用get来判断某个键是否存在,而应该用containsKey)
- 初始大小与扩容方式不同,HashTable中的hash数组默认大小为11,增加方式是(老值×2+1),HashMap中的hash数组默认为16,而且增加后一定是2的指数
JAVA修饰符
- private:表示私有,只在同类中可见,不能够用来直接修饰类
- public:表示公有,对所有类都可见
- protected:对同包内的类,以及自己的子类可见,不能修饰类
- default:默认修饰符既什么也不写,同包内可见同包子类可见,不同包子类不可见
JAVA局部变量、成员变量、类变量
成员变量(实例属性):
- 即类的属性,声明后会被自动赋予默认值
作用域:
- 在类内部,任何地方都可访问,属于一个对象
生存域:
- 从new产生一个实例-------堆内存被回收
局部变量:
- 定义在方法内部的变量,且不会自动赋予默认值
作用域:
- 仅限于定义它的方法内部访问
生存域:
- 从定义--------方法代码块结束
类变量(静态属性):
- 由static修饰的变量
作用域:
- 类被加载后,不被实例化也可访问
生存域:
- 类被加载后-------JVM退出
JAVA 关于static方法
能否被重写?
- 静态方法不支持多态,即使在子类中重写父类中的静态方法(父类与子类中有两个同名同参数列表的方法),虽不会报错(一般会有警告),但实际上只是把父类的静态方法隐藏了,父类与子类中的两个静态方法并没有什么联系,他们之间不具备多态性,如果刨根问底要问为什么的话,重写只有在某方法是基类接口的一部分时才能发生
能否被重载?
- 可以被重载
其他杂项
- 静态方法可以直接通过类名来访问,不需要实例化
- 静态方法中不可以调用super或者this,因为它不具备多态性并且不属于某个对象
- 静态方法不可以调用非静态的方法与属性,而非静态的方法可以调用静态的方法与属性