目录
14、java 中的 Math.round(-1.5) 等于多少?
16、String str="i"与 String str=new String(“i”)一样吗?
20、java 中操作字符串都有哪些类?它们之间有什么区别?
22、两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
23、int和Integer有什么区别,为什么要使用包装类?
24、抽象类(abstract class)和接口(interface)有什么区别?
28、Comparator 与Comparable 有什么不同?
32、同步和异步有何异同,在什么情况下分别使用他们?举例说明
35、List、Map、Set 三个接口,存取元素时,各有什么特点?
42、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
1、何为编程?
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。
为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。
2、什么是Java?
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
3、JVM、JRE和JDK的关系
- JVM
Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
- JRE
Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
- JDK
Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等
4、Java语言有哪些特点?
- 简单易学(Java语言的语法与C语言和C++语言很接近)
- 面向对象(封装,继承,多态)
- 平台无关性(Java虚拟机实现平台无关性)
- 支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)
- 支持多线程(多线程机制使应用程序在同一时间并行执行多项任)
- 健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
- 安全性
5、Java 8的接口新增了哪些特性?
- lambada表达式
- 函数式接口
- 方法引用
- 默认方法
- Stream API
- Optional
- Date Time API(如LocalDate)
- 重复注解
- Base64
- JVM的新特性(如元空间Metaspace代替持久代)
6、ArrayList和LinkedList有什么区别?
可以从它们的底层数据结构、效率、开销进行阐述哈
- ArrayList是数组的数据结构,LinkedList是链表的数据结构。
- 随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而ArrayList是基于索引(index)的数据结构,可以直接映射到。
- 插入、删除数据时,LinkedList的效率比较高,因为ArrayList要移动数据。
- LinkedList比ArrayList开销更大,因为LinkedList的节点除了存储数据,还需要存储引用。
7、重写和重载的区别
- 作用范围:重写的作用范围是父类和子类之间;重载是发生在一个类里面
- 参数列表:重载必须不同;重写不能修改
- 返回类型:重载可修改;重写方法返回相同类型或子类
- 抛出异常:重载可修改;重写可减少或删除,一定不能抛出新的或者更广的异常
- 访问权限:重载可修改;重写一定不能做更严格的限制
8、抽象类和接口有什么区别?
- 抽象类要被子类继承,接口要被子类实现。
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量,它的变量只能是公共的静态的常量
- 一个类可以实现多个接口,但是只能继承一个父类,这个父类可以是抽象类。
- 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
- 抽象级别(从高到低):接口>抽象类>实现类。
- 抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。
- 抽象类的关键字是abstract,接口的关键字是interface
9、静态代理和动态代理的区别?
静态代理中代理类在编译期就已经确定,而动态代理则是JVM运行时动态生成,静态代理的效 率相对动态代理来说相对高一些,但是静态代理代码冗余大,一单需要修改接口,代理类和委 托类都需要修改。
10、JDK动态代理和CGLIB动态代理的区别
JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承, 所以该类或方法最好不要声明成final。
11、&和&&的区别
- 按位与, a&b 表示把a和b都转换成二进制数,再进行与的运算;
- &和&&都是逻辑运算符号,&&又叫短路运算符
- 逻辑与,a&& b ,a&b 都表示当且仅当两个操作数均为 true时,其结果才为 true,否则为false。
- 逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true,整个表达式的值才是true。但是,&&之所以称为短路运算,是因为如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
12、Java中IO流分为几种?
Java中的流分为两种:一种是字节流,另一种是字符流。
IO流分别由四个抽象类来表示(两输入两输出):InputStream,OutputStream,Reader,Writer。
13、final 在 java 中有什么作用?
- final 修饰的类叫最终类,该类不