Java基础知识(六)
51. 在 Java 语言,怎么理解 goto
goto 这个词是 C 语言中的,goto 语句通常与条件语句配合使用,可用来实现条件转移,构成循
环,跳出循环体等功能。而在结构化程序语言中一般不主张使用 goto 语句, 以免造成程序流程的
混乱,使理解和调试程序都产生困难。但是在 java 语言中,goto 这个词只是作为了保留字,不推荐
使用,因为 java 语言讲究简单,方便
52. 请描述一下 Java 5 有哪些新特性
1、泛型
2、For-Each 循环
3、自动装包/拆包
4、枚举
5、静态导入
6、Annotation(框架配置,代码生成 的里程
7、可变参数
8、字符串格式化器(java.util.Formatter)
9、新的线程模型和并发库 Thread Frameword
53. Java 6 新特性有哪些。
1、引入了一个支持脚本引擎的新框架
2、UI 的增强
3、对 WebService 支持的增强(JAX-WS2.0 和 JAXB2.0)
4、一系列新的安全相关的增强
5、JDBC4.0
6、Compiler API
7、通用的 Annotations 支持
54. Java 7 新特性有哪些
1.switch 中可以使用字串了
2.运用 List tempList = new ArrayList<>(); 即泛型实例化类型自动推断
3.语法上支持集合,而不一定是数组
4.新增一些读取环境信息的工具方法
5.Boolean 类型反转,空指针安全,参与位运算
6.两个 char 间的 equals
7.安全的加减乘除
8.map 集合支持并发请求,且可以写成 Map map = {name:“xxx”,age:18};
55. Java 8 新特性有哪些
1.Lambda 表达式 − Lambda 允许把函数作为一个方法的参数,用更简洁的语法实现以前复杂的
功能代码
2.方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实例)的方法或构造器。
与 lambda 联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
3.接口中可以使用 default 关键字声明一个默认实现方法。
4.新的编译工具,如:Nashorn 引擎 jjs、 类依赖分析器 jdeps。
5.新添加的 Stream API(java.util.stream) 把真正的函数式编程风格引入到 Java 中。
6.加强对日期与时间的处理。
7.Optional 类用来解决空指针异常。
8.Java 8 提供了一个新的 Nashorn javascript 引擎,它允许我们在 JVM 上运行特定的 javascript 应
用。
56. 描述 Java 动态代理
代理模式是常用的 java 设计模式之一,java 中的代理实现主要有基于接口的 jdk 动态代理和
基于类的 cglib 动态代理,代理的特点就是会为目标对象产生代理对象,从而在调用实际目标对象方
法时实现无侵入式的代码扩展,比如一些框架中的拦截器机制、springAOP 面向切面机制都是基于
动态代理模式实现的,其次也可以更安全的保护目标对象。动态代理的目的主要就是为了解决一些
安全性问题(不让客户直接调用目标对象的功能,而是相当于通过中介),其次就是可以在调用目
标功能方法之前、之后额外添加一些功能,比如日志、事务等,并且还能阻止调用功目标功能,从
而实现权限控制等
57. 为什么要使用单例模式
1、避免在开发程序的时候,创建出一个类的多个实例(占用空间,性能问题),所以使用单例
模式,保证该类只创建一个对象;
2、一般单例模式通常有两种形式:它的构造函数为 private 的,必须有一个静态方法,静态方
法返回自己的实例;实行形式有两种,懒汉式和饿汉式;所谓的饿汉式就是在声明实例的时候直接
初始化对象,而懒汉式是先声明一个空对象,在静态方法中实例化该对象并返回
//构造方法私有化,让外界无法创建对象
private Test() {
}
//在当前类中声明静态对象,并提供公共静态方法让外界调用获取对象
private static Test t;
public static Test getInstance(){
if(t==null){
t=new Test();
}
return t;
}
58. Java 中有哪些常用排序方式,使用 Java 实现冒泡排序
排序主要用于将一组无需数据进行升序/降序排列,Java 中有很多种排序方法,如:冒泡排序,
选择排序,插入排序,快速排序等,其中在大量数据无需数据中效率最高的属于快速排序,比如实
际工作中如果需要对数据排序,我们可以借助 JDK 中自带的 Arrays.sort 方法,它内部采用了快速排
序,效率非常高,当然也可以自己实现。
冒泡排序代码如下:
import java.util.Arrays; public class BubbleSort {
public static void BubbleSort(int[] arr) {
int temp;//定义一个临时变量
for(int i=0;i<arr.length-1;i++){
//循环的轮数
for(int j=0;j<arr.length-i-1;j++){
//从前往后循环比较,从第 1 个数往后依次比较
if(arr[j+1]<arr[j]){
//如果后面的数字小于前面的则交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int arr[] = new int[]{1,6,2,2,5};
BubbleSort.BubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
}
59. Java 中垃圾回收有什么目的?什么时候进行垃圾回收?
Java 语言中一个显著的特点就是引入了垃圾回收机制(简称 GC),使 c 语言程序员最头疼的内
存管理的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃
圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以
有效的防止内存泄露,有效的使用空闲的内存。简单的理解,就是当对象失去引用后,系统会在调
度的时间对它所占用的内存进行回收。
60. 如何实现对象克隆
实现对象克隆有两种方式:
1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;
2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。