1.题目: JDK 和 JRE有什么区别?
JDK: Java Development Kit 的简称,Java 开发工具包,提供了Java的的开发环境和运行环境。
JRE: Java Runtime Environment 的简称,Java运行环境,为Java运行提供了所需环境。
JDK 包含 JRE,同时包含编译 Java源码的编译器 javac,还包含了很多Java 程序调试和分析的工具。简单来说,如果你需要运行编译后Java程序,只需安装 JRE 即可,如果你需要编写
或编译 Java源程序,需要安装JDK。
2.题目: Java跨平台运行的原理?
1、 java源文件要先编译成与操作系统无关的.class 字节码文件,然后字节码文件再通过 Java 虚拟机解释成机器码运行。
2、.class字节码文件面向虚拟机,不面向任何具体操作系统。
3、不同平台的的虚拟机是不同的,但它们给 JDK 提供了相同的接口。
4、 Java 的跨平台依赖于不同系统的Java 虚拟机。
3.题目: JDK 中哪些类是不能继承的?
不能继承的是那些用 final关键字修饰的类,一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的。
4.题目:Java 的安全性体现在哪里?
1、使用引用取代了指针,指针的功能强大,但是也容易造成错误,她组越界问题。
2、拥有一套异常处理机制,使用关键字 throw、throws、try、catch、
finally。
3、强制类型转换需要符合一定规则。
4、字节码传输使用了加密机制。
5、运行环境提供保障机制:字节码校验器->类装载器->运行时内存布局->文件访问限制。
6、不用程序员显示内存释放,JVM有垃圾回收机制。
5.题目:面向对象的特征有哪些方面?
面向对象的编程语言有封装、继承、多态。
1、封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。
2、继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入从若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。
3、多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定,多态性增强了软件的灵活性和扩展性。
6.题目:接口和抽象类有什么区别?
1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法声明,抽象类中可以做方法声明,也可以做方法实现。
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能声明,不能实现,接口是设计的结果,抽象类是重构的结果。
7、抽象类里可以没有抽象方法。
8、如果一个类里有抽象方法,那么这个类只能是抽象类。
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。
7.题目:什么是内部类?内部类的分类?
内部类的定义:将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
内部类的分类:
1、成员内部类 成员内部类可以无条件访问外部类的所有成员属性和成员方法。 当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。
2、局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
3、匿名内部类 匿名内部类就是没有名字的内部类。
4、静态内部类 指被声明为 static内部类,他可以不依赖内部类的实例,而通常的内部类需要实例化外部类,从而实例化。
8. 题目:什么是Java 的垃圾回收机制?
垃圾回收机制,简称 GC:
Java 语言不需要程序员直接控制内存回收,由 JVM在后台自动回收不
再使用的内存。提高编程效率。
保护程序的完整性。
JVM 需要跟踪程序中有用的对象,确定哪些是无用的,影响性能。
特点:
回收 JVM 堆内存里的对象空间,不负责回收栈内存数据。
无法处理一些操作系统资源的释放,如数据库连接、输入流输出流、Socket 连接。
垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。
可以将对象的引用变量设置为 null,垃圾回收机制可以在下次执行时回收该对象。
JVM 有多种垃圾回收 实现算法,表现各异。
垃圾回收机制回收任何对象之前,会先调用对象的 finalize()方法。
可以通过System.gc()或Runtime.getRuntime().ge()通知系统进行垃圾回收,会有一些效果,但系统是否进行垃圾回收依然不确定。
不要主动调用对象的finalize()方法,应该交给垃圾回收机制调用。
9.题目:Java 中会存在内存泄漏吗,请简单描述。
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。 Java 中有垃圾回收机制,它可以保证一对象不再被引用的时候,对象将自动被垃圾回收器从内存中清除掉。
Java 中的内存泄露的情况: 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露。例如,缓存系统,我们加载了一个对象放在缓存中,然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。
10.题目:内存泄漏和内存溢出的区别?
内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间
供其使用,出现 out of memory。
内存泄露(memoryleak):指程序在申请内存后,无法释放已申请的内存
空间,内存泄露堆积会导致内存被占光。
memory leak 最终会导致 out of memory.