java知识点回顾

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sophisticated_/article/details/89098212
  • 表达式类型自动提升:整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型
short value = 5;
value = value - 2;

value - 2会将表达式类型提升至int类型,这样把右边int类型赋给左边short类型会发生错误

  • 使用foreach循环迭代数组时,并不能改变数组元素的值,因此不要对foreach循环变量进行赋值

  • java的子类不能获得父类的构造器

  • 初始化块在创建java对象时隐式执行,在执行构造器之前执行

  • 类初始化阶段,先执行最顶层父类的静态初始化块,然后依次向下执行到当前类的静态初始化块
    对象初始书阶段,先执行最顶层父类的初始化块、最顶层父类构造器,然后依次向下执行到当前类的初始化块,当前类构造器

  • new String("hello")一共产生两个字符串对象。常量池用于管理在编译时被确定并保存在已编译的.class文件中的一些数据
    在这里插入图片描述

  • 强引用,不会被GC
    软引用(SoftReference),内存空间足够,不会被回收,系统内存不足,系统可能会回收,通常存在于内存敏感的程序中
    弱引用(WeakReference),当GC运行时,不管内存够不够,总会回收
    虚引用(PhantomReference),类似没有引用,主要用于跟踪对象被垃圾回收的状态,必须和ReferenceQueue联合使用

  • BigDecimal 要使用String对象作为构造器参数

  • 不管为泛型的类型形参传入哪一种类型形参,它们依然被当成同一个类处理
    在这里插入图片描述
    实际输出为true,不管泛型实际类型参数,在运行时总有同样的类

  • List<String> 类并不是List<Object>类的子类

  • 不允许创建泛型数组
    在这里插入图片描述

  • 被transient关键字修饰的变量在序列化时会忽略

  • 某个类变量使用了final修饰,它的值可以在编译时就确定,程序其他地方使用该变量实际上并没有使用该变量,而是相当于使用常量。不会导致该类的初始化

  • 抽象类在被继承时体现的是 is-a 关系,接口在被实现时体现的是 can-do 关系。抽象类是模板式设计,而接口是契约式设计

以下是视为主动使用一个类,其他情况均视为被动使用!

1):初学者最为常用的new一个类的实例对象(声明不叫主动使用)

2):对类的静态变量进行读取、赋值操作的。(静态,final且值确定是常量,是编译时确定的,调用的时候直接用,不会加载对应的类)

3):直接调用类的静态方法。

4):反射调用一个类的方法。

5):初始化一个类的子类的时候,父类也相当于被程序主动调用了(如果调用子类的静态变量是从父类继承过来并没有复写的,那么也就相当于只用到了父类的东东,和子类无关,所以这个时候子类不需要进行类初始化)。

6):直接运行一个main函数入口的类。

猜你喜欢

转载自blog.csdn.net/Sophisticated_/article/details/89098212