1、JVM、JRE、JDK之间的关系
个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编译器和各种工具,JDK包含JRE。
2、public、protected、default、private的区别
-
default:默认,什么都不写,在同一个包内可见,不使用任何的修饰符
-
public:可以修饰类,在一个java源文件中只能有一个public,并且一旦类被public修饰,那么java的源文件名要和这个类名一致。
-
protected:受保护的,受到该类所在包所保护,被protected保护的成员会被位于同一package中的所有类访问到。同时,被protected所修饰的成员也能被该类的所有子类继承下来。
-
private:私有的,只能在当前类中被访问,作用域最小。
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类 (不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
3、final、finally、finalize的区别
final:是一个修饰符,可以修饰变量、方法、类
-
修饰变量时,变量的值不能再改变。eg: final static int i = 100;
-
修饰方法时,方法不能重写,但不影响继承。eg: public final void test();
-
修饰类时,这个类不能被继承。(不能用final和abtract来修饰同一个类,同样final不能修饰接口) eg:final class Parent
finally:是一个关键字,通常在try-catch块中用于处理异常,无论try中是否发生异常,finally块一定会被执行。(通常进行资源释放的工作)
try{}catch{}finally{}
finalize:指finalize()方法,时Object类的方法,是在对象被垃圾回收器回收之前调用的,可以通过重写这个finalize()方法,给对象自己最后一个复活的机会,但不能保证finalize()方法立即执行,什么时候调用具体有虚拟机决定。一个对象的finalize()方法只会被调用一次,通常情况下不需要程序猿实现fianalize()方法
4、static关键字的作用
只有new对象之后,数据存储空间才会被分配,⽅法才能供外界调⽤。 但是当没有创建对象的时候也想要调⽤⽅法或者就是想为特定分配存储空间的时候,就需要⽤ static。所以有了static,成员变量或者⽅法就可以在没有所属类的时候被访问了。
5、面向对象、面向过程
个人理解:面向过程将任务拆分成一个一个步骤分别完成
⾯向过程的性能⽐较⾼,因为没有实例化等操作,开销⽐较⼩。
⾯向对象因为有了封装继承多态的特性,可以设计出低耦合的系统,使得系统更灵活、容易维护。
1). 封装是指封装成抽象的类,并且对于可信的类或者对象,是可以操作的,对于不可信的进⾏隐藏。 2). 继承是指可以使⽤现有类的所有功能,⽽且还可以在现有功能的基础上做拓展。 3). 多态是基于继承的,他是指⽗类中定义的属性和⽅法被⼦类继承之后,可以具有不同的数据类型或者表现出不同的⾏为,使得同⼀个属性在⽗类及其⼦类中具有不同的含义。
-
重载就是多态的⼀个例⼦,是编译时的多态。其实我们所说的多态是运⾏时多态,也就是说编 译的时候不确定调⽤哪个具体⽅法,⼀直延迟到运⾏时才可以确定,所以多态⼜叫延迟⽅法。
Java实现多态有3个必要条件:继承、重写和向上转型。只有满足这3个人条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
-
继承:在多态中必须存在有继承关系的子类和父类
-
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
-
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。
重载和重写
重载是编译时多态,重写是运行时多态
-
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表
-
重写发生在子类与父类之间,重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无关,即重载方法