1. Java 构造方法和普通方法的异同。
    2. 什么是 Java 反射,有什么功能,获取类有哪几种方式?
    3. 创建对象由哪几种方式?
    4. Java 和 C++ 有啥区别?
    5. switch 语法支持哪些数据类型?String 的原理是什么?
    6. volatile 关键词有什么作用?
    7. 对 null 的理解?如何防止 NPE?
    8. 基本数据类型与位数?
    9. 什么场景会使用 finally?finally 代码块一定会被执行么?
    10. 异常的有哪几类,举例说明。异常处理的方式;多个异常如何处理?
    11. helloworld 的执行过程

    参考答案:

    1. 同:可重载,参数个数任意;
      1. 异:
        1. 方法名前者必须与类名相同,后者不作要求。
        2. 前者不能被继承,后者可以。
        3. 前者伴随着 new 一起调用,后者需要类或实例发起调用。
        4. 前者完成对象的初始化工作,后者执行具体的业务逻辑。
        5. 前者可通过 super 显示调用父类,后者不能使用 super 关键字。
        6. 前者未定义,编译器默认生成无参方法,后者无默认能力。
    2. 定义:允许程序在运行时进行自我检查,也允许对其内部成员进行操作
      • 功能
        • 得到一个对象所属的类
        • 获取一个类的所有成员和方法
        • 运行时创建对象
        • 在运行时调用对象的方法
      • 获取类的方式
        • class.forName(“类路径”)
        • 类名.class
        • 实例.getClass()
    3. new、反射机制、clone、反序列化

    4. | 比较点 | C++ | Java | | —- | —- | —- | | 语言类型 | 编译型语言 | 解释编译混合型语言 | | 执行速度 | 快 | 慢 | | 是否跨平台 | 否 | 是 | | 面向对象 | 面向对象和面向过程混合 | 纯面向对象 | | 指针 | 有 | 无 | | 多继承 | 支持 | 不支持 | | 内存管理 | 手动 | 自动 |

    5. 整型,枚举,字符串;原理是String的hashCode()返回的int类型值匹配

    6. 保证线程间的可见性;从内存间取数据,而不是缓存;不保证原子性。
    7. 不是合法的 Object 实例;无内存;表明该引用目前没有指向任何对象;
      1. 空判断;辅助工具类;
    8. 八大基本数据类型:
      1. int长度
        • byte(8 bit)
        • short(16 bit)
        • int(32 bit)
        • long(64 bit)
      • float长度
        • 单精度(32 bit float)
        • 双精度(64 bit double)
      • boolean 类型变量的取值
        • true
        • false
      • char数据类型:Unicode字符(16 bit)
    9. 必须要执行到的代码,比如请求日志。不一定:进入 try 之前抛一次或者调用 System.exit(0)
    10. 检查性异常
      • IO
      • SQL
    • 运行时异常
      • JVM处理
      • NullPointException
      • ClassCastException
      • ArrayIndexOutOfBoundsException
    • 出现异常后,一直往上层抛,直到遇到处理代码或最上层
    • 多态。若先捕获基类,再捕获子类。子类处理代码将永远不会得到执行
    1. javac 编译,ClassLoader 装载 class,解释执行&编译执行
      1. 编译:词法分析器—>语法分析器—>语义分析器—>代码生成器:字节码
      2. 类加载:装载—>链接(校验格式和引用类的存在性;准备;解析)—>初始化
      3. 类执行:
        1. 解释执行: