以下内容仅仅为学习过程中经由老师提及的学习部分,后续也将会持续更新或增加。
一、JDK和JRE的区别?
JDK(Java Development Kits)-- Java 开发工具集
JRE(Java Runtime Environment)Java 运行时环境
JDK用于开发,是给开发人员用的,JRE 用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无序安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。
JDK包含了JRE,JDK 和 JRE 中都包含 JVM。也可以说JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。
二、JVM(Java virtual machine)是什么?
JVM 可以理解成一个可运行 Java 字节码的虚拟计算机系统
它有一个解释器组件,可以实现 Java 字节码和计算机操作系统之间的通信
对于不同的运行平台,有不同 的 JVM。
三、封装
在开发中, 为了避免出现逻辑错误, 我们建议对所有属性进行封装(private关键词进行修饰),并为其提供setter及getter方法进行设置和取的操作。
四、static关键字
static表示“静态”的意思,可以用来修饰成员变量和成员方法。
static的主要作用在于创建独立于具体对象的域变量或者方法。
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访
问。并且不会因为对象的多次创建 而在内存中建立多份数据。
特点:
1. 静态成员 在类加载时加载并初始化。
2. 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
3. 在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
五、JAVA三大特性
即封装、多态、继承
1.封装
封装指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。
封装目的:增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。
2.继承
继承是指将多个相同的属性和方法提取出来,新建一个父类。
Java中一个类只能继承一个父类,且只能继承访问权限非private的属性和方法。 子类可以重写父类中的方法,命名与父类中同名的属性。
继承目的:代码复用。
3.多态
多态可以分为两种:设计时多态和运行时多态。
设计时多态:即重载,是指Java允许方法名相同而参数不同(返回值可以相同也可以不相同)。
运行时多态:即重写,是指Java运行根据调用该方法的类型决定调用哪个方法。
多态目的:增加代码的灵活度。
六、抽象类和接口的区别
1、抽象类要被子类继承,接口要被类实现。
2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。
3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明静态方法)
6、接口不能有构造方法,但是抽象类可以有
七、方法重载和重写的区别
重写(override)规则:
1、 参数列表必须完全与被重写方法的相同;
2、返回类型必须完全与被重写方法的返回类型相同;
3、访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected.
4、父类的成员方法只能被它的子类重写 。
5、声明为static和private的方法不能被重写,但是能够被再次声明。
区别
1、发生的位置
重载:一个类中
重写:子父类中
2、参数列表限制
重载:必须不同的
重写:必须相同的
3、返回值类型
重载:与返回值类型无关
重写:返回值类型必须一致
4、访问权限:
重载:与访问权限无关
重写:子的方法权限必须不能小于必父的方法权限
5、异常处理:
重载:于异常无关
重写:异常范围可以更小,但是不能抛出新的异常。
八、多态的表现形式
设计时多态:即重载,是指Java允许方法名相同而参数不同(返回值可以相同也可以不相同)。 是一个类中方法的多态性体现。
运行时多态:即重写,是指Java运行根据调用该方法的类型决定调用哪个方法。是子父类中方法的多态性体现。
九、异常处理常见面试题
1. try-catch-finally 中哪个部分可以省略?
答: catch和finally可以省略其中一个 , catch和finally不能同时省略
注意:格式上允许省略catch块, 但是发生异常时就不会捕获异常了,我们在开发中也不会这样去写代码.2. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
答:finally中的代码会执行
详解:
执行流程:
1. 先计算返回值, 并将返回值存储起来, 等待返回
2. 执行finally代码块
3. 将之前存储的返回值, 返回出去;
需注意:
1. 返回值是在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不
会改变
2. finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说返回的值不是try或
catch中的值
3. 如果在try或catch中停止了JVM,则finally不会执行.例如停电- -, 或通过如下代码退出
JVM:System.exit(0)