JAVA基础知识归纳(二)

JAVA基础知识归纳(一)

JAVA中@的作用
@代表注解,对某一事物进行说明
JAVA内置注解(三个):

  1. @Override:用在方法之上,用于说明此方法是改写父类,编译器还会帮你检查下面的类在父类中是否存在,如果不存在就报错
  2. @Deprecated:建议不使用的旧API,如果调用编译器就会抛出警告
  3. @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,因为它不具备多态性并且不属于某个对象
  • 静态方法不可以调用非静态的方法与属性,而非静态的方法可以调用静态的方法与属性

猜你喜欢

转载自blog.csdn.net/weixin_43815930/article/details/104870611