JDK、JRE、JVM的区别和关系
区别:
jdk:java开发工具,用于Java程序的开发
jre:java运行环境,只能运行 .class文件 不能编译
jvm:Java虚拟机 运行时候的环境
关系:
JDK包含JRE,JRE包含JVM
- 有JVM就可以解释执行字节码文件(.class).
- JVM解释执行这些字节码文件的时候需要调用类库,如果没有这些类库JVM就不能正确的执行字节码文件,JVM+类库=JRE,
- 有了JRE就可以正确的执行java程序了,但是光有JRE不能开发Java程序,所以JRE+开发工具=JDK,有了JDK,就可同时开发,执行JRE.
对象之间的四种关系
- 依赖
- 关联
- 聚合
- 组合
接口和抽象类的区别
- 接口使用的是interface修饰、抽象类使用的是abstract修饰
- 接口和抽象类都不能被实例化
- 类可以实现多个接口所以是多继承、抽象类只能单继承
- Java8之前接口中的方法都是抽象方法,省略了public abstract。Java8之后,接口可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现
- 抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要方法体
- 如果一个类继承了抽象类,如果实现了所有的抽象方法,子类可以不是抽象类,反之,如果没有实现所有的抽象方法,子类仍然是抽象类。
方法体:在方法声明后的一对大括号以及中间的内容就称之为方法的方法体,方法体的内容包括局部变量的声明和Java语句。
索引的缺点
- 需要占用物理空间,建立的索引越多需要的空间越大
- 创建索引和维护索引需要消耗时间,这种时间随着数据量的增加而增加
- 会降低表的增删改的效率,每次增删改索引需要进行动态维护,导致时间变长
List和Set的区别
list:有序的,可重复,允许有多个null元素对象,可以使用iterator(迭代器)取出所有元素,在逐一遍历,还可以使用get获取指定下标的元素
set:无序的,不可重复的,最多允许有一个null元素对象,取元素时只能用iterator(迭代器)接口取出元素,在逐一遍历各个元素。
什么是反射
反射是Java被视为动态语言的关键,反射机制允许程序在执行期借助于反射API取得任何内部信息,并直接操作任意对象的内部属性及方法。
反射方式:实例化对象 getclass方法 得到完整的包类名称
反射的作用
- 操作因访问权限限制的属性和方法
- 实现自定义注解
- 动态加载第三方jar包
- 按需加载类,节省编译和初始化api的时间
反射的四个核心类:
类对象 类的构造器对象 类的方法对象 类的属性对象
反射的原理
反射的工作原理就是借助类对象 类的构造器对象 类的方法对象 类的属性对象这四个类在程序中运行时动态访问和修改任何类的行为及状态。
浅拷贝和深拷贝的区别
- 浅拷贝:基础数据类型直接复制数据值,引用数据类型只复制对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另外一个对象的值也随之改变。
- 深拷贝:基础数据类型直接复制数据值,引用数据类型开辟一个新的内存空间,在新的内存空间复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,另外一个不会改变。
- 深拷贝比浅拷贝速度较慢并且花销较大
并发和并行的区别
- 并发:两个或者多个事件在同一个时间间隔发生
- 并行:两个或者多个事件在同一时刻发生
- 并行在多处理器系统中存在,并发可以单处理器和多处理器系统中存在
Final关键字的作用
- 修饰类:该类不能再派生出新的子类,不能作为父类被继承,因此一个类不能同时被声明为abstr和final。
- 修饰方法:该方法不能被子类重写
- 修饰变量:该变量必须在声明的时候给定初值,后续只能读取、不能修改,如果变量是对象,则指的是引用不可修改,但是对象的属性是可以修改的。