什么是重写?什么是重载?
方法的重写(Override)和重载(Overload)是Java多态性的不同表现,重写是父类与子类之间多态性的表现,重载是一个类多态性的表现。
(1)方法重载是一个类中定义了多个相同的方法名,但是他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload)。
(2)方法重写是在子类存在的方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Override)。
List接口和Set接口有什么特点?
List接口:顺序存储、可以有重复值。
Set接口:无序存储、不能有重复值。
ArrayList与LinkedList有什么区别?
ArrayList与LinkedList都实现了List接口。
ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高
LinkeListd是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低
++i与i++的区别是什么?
++i:先赋值,后计算,i++:先计算,后赋值
Java中异常分为哪两种?
编译时异常,运行时异常
几个Java常见的编译时异常类?
NullPointerException:空指针异常
ArrayIndexOutOfBoundsException:数组下标越界
NumberFormatException:数字转换异常
IllegalArgumentException:参数不匹配异常
InstantiationException:对象初始化异常
ArithmeticException:算术异常
Java中主要有哪三种的循环结构?
(1)for循环
基本格式:
for(初始化语句;布尔表达式;更新循环控制变量){
//循环体
}
(2)while循环
基本格式:
While(布尔表达式){
//循环体
}
(3)do..while循环
基本格式:
do{
//循环体
}While(布尔表达式);
While循环和do...while循环的不同之处是什么?
do...while 循环的循环体至少执行一次,而While循环的循环体一次也不执行
continue 关键字的用法?
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
Spring框架中bean的创建方式和生命周期?
Bean的创建方式:构造器创建、静态工厂创建、实例工厂创建
Bean的生命周期:
实例化(Instantiation)
属性设置(populate)
初始化(Initialization)
销毁(Destruction)
(1)实例化Bean
(2)根据属性,注入需要的 Bean
(3)如果Bean 实现了BeanNameAware 等 aware 接口,则执行 aware 注入
(4)如果有BeanPostProcessor,则执行BeanPostProcessor#postProcessBeforeInitialization 方法
(5)如果Bean 是InitializingBean,则执行afterPropertiesSet 方法
(6)如果有initMethod ,则执行
(7)如果有BeanPostProcessor,执行BeanPostProcessor#postProcessAfterInitialization 方法
(8)使用Bean
(9)如果Bean 是DisposableBean,则执行 destroy 方法
(10)如果有destroy 方法,则执行
java8的新特性lambda表达式
Lambda表达式(闭包):lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。
Lambda表达式的使用场景:用以简化接口实现。
lambda表达式只能实现函数式接口。
Lambda 表达式的标准格式:
(参数类型 参数名) -> {
方法体;
return 返回值;
}
Lambda 表达式的省略规则:
1. 小括号中的参数类型可以省略。
2. 如果小括号中只有一个参数,那么可以省略小括号。
3. 如果大括号中只有一条语句,那么可以省略大括号,return,分号。
java8的新特性流式API
集合接口有两个方法来生成流:(1)stream()-为集合创建串行流。(2)parallelStream()-为集合创建并行流。
forEach: 用来迭代流中的每个数据。以下代码片段使用forEach输出了10个随机数:
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
map: 用于映射每个元素到对应的结果。以下代码片段使用map输出元素对应的平方数:
List<Interger> numbers=Arrays.asList(3,2,4,5);
//获取对应的平方数
List<Integer> squaresList =numbers.stream().map.(i->i*i).distinct().collect(collector.toList());
Filter: 用于通过设置的条件过滤出元素。以下代码片段使用Filter方法过滤出空字符串:
List<String> strings =arrays.asList(“abc”,”bcd”,”cde”,””);
//获取空字符串的数量
Long count = strings.stream.filter(string->string.isEmpty()).count();
Limit: Limit方法用于获取指定数量的流。以下代码片段使用Limit方法打印出10条数据:
Random Randoms = new Random();
Randoms.ints()limit(10).forEach(Systemout::println);
Sorted: 用于对流进行排序。以下代码片段使用Sorted方法对输出的10个随机数进行排序:
Random Randoms = new Random();
Randoms.ints().Limit(10).sorted().forEach(Systemout :: Println);
并行(parallel)程序:ParallelStream是流并行处理程序的代替方法。以下实例我们使用parallelStream来输出空字符串的数量
List<String>strings = Arrays.asList(“ab”,”bc”,””,”cd”,””,”ef”)
Longcount = strings.ParallelStream().filter(string-> string.isEmpty()).count();
Collectors类: 实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors可用于返回列表或字符串:
List<String>strings= Arrys.asList(“abc”,”bcd”,”def”,””,”efg”);
List<String>filtered=strings.stream.filter(string->!string.isEmpty()).collect(collectors.toList());
System.out.println(“筛选后的列表”+filtered);
StringmergedStrings = strings.stream().filter(string->!string.isEmpty()).collect(collectors.joining(“,”));
System.out.println(“合并后的字符串:”+mergedStrings);
统计: 产生统计结果的收集器,主要用于int,double,long等基本类型上
List<Integer> numbers = Arrays.asList(1,3,2,5,6,8);
IntSumarryStaticsstats = numbers.stream().mapTopInt((x)->x).sumarryStatics();
System.out.println(“列表中最大的数:”+stats.getMax());
System.out.println(“列表中最小的数:”+stats.getMin());
System.out.println(“列表中所有数之和:”+stats.getSum());
System.out.println(“列表中的平均数:”+stats.getAverage());