Java面试题

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源程序(后缀名.java)

  2. 编译,用javac命令编译Java程序(javac 源文件.java),生成字节码文件; 后缀名.class

  3. 编译完成会得到 .class 文件(文件名相同)

  4. 用java命令运行Java程序(java 类名),java 命令的类名,不要跟后缀名

3. 变量是什么?变量的三要素是什么?

变量:变量是存储信息(数据)的容器。

语法: [ 修饰符 ] 数据类型 变量名字 [赋值操作]

变量的三要素

1.数据类型: 决定在内存中分配的空间

2.变量名 : 空间别名

3.值 :空间中存储的数据

4. 变量的命名规范

1、变量名小写开头,第二个单词的首字母大写,如:xxxYyyZzz;

2、由字母, 下划线, 数字, $符号组成

3、数字不能开头

4、不能为Java中的关键字或保留字

5. java 数据类型和默认值

—— 基本数据类型;整型,浮点型,布尔型,字符型

—— 引用数据类型,类类型,枚举,接口,数组

基本数据类型及其默认值:

整型:

byte : 0 short : 0 int: 0 long:0L

浮点型:

float:0.0F double:0.0D

布尔型:

boolean : false; 只有true和false两个取值。

字符型:

char : ‘\u0000’;

6. 基本数据类型转换的规则

当进行数学运算时,数据类型会自动发生提升到运算符左右之较大者(最少会提升到int型)

由小转大:自动类型提升,直接赋值即可;

由大转小:需强制转换;

7. ==与.equals()有什么不同

==是比较对象内存地址的值, equals是方法;

字符串的内容相同,引用地址不一定相同,用equals方法可以判断两个字符的值是否相等

8. 单| & 与 双|| && (短路)区别?

单| &:两边的表达式 无论结果如何,都会进行运算

双|| &&:当运算符的左边已经可以判断结果时,运算符的右边的表达式不会执行

|| 有真为真:左边true ,右边的表达式不会执行

&& 有假为假:左边false,右边的表达式不会执行

9. if…else…和写两个if 有什么区别

两个if为两次选择判断.两条语句,都会执行

if…else为一次判断,

if为选择条件1,else为除去选择条件1之外的其他情况.,一条语句只会执行一次

10. 列举出switch( )括号中能接受的所有数据类型

java5之前:
byte 、short、char、int

java5以上支持: enum枚举 java7以上支持: String 类型

11. break、continue和return的区别?

循环结构的控制:

break 语句可以立即退出循环,阻止再次反复执行循环代码。

continue 语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环。

return 退出当前方法,终止当前方法的执行。

12. 什么是数组,它有什么特征?

概念: 数组是连续存储相同数据类型元素的集合

特点:

  1. 数据类型相同

  2. 数据是有顺序的

  3. 通过数组的下标访问数据

13. 数组的创建与使用方式

定义数组

声明 int[ ] arr;
初始化
new int[长度];
new int[]{元素1,元素2,…};
int[] arr = { 元素1,元素2,…};

数组的访问

长度 arr.length 数组的长度固定

索引 arr[索引],索引从0,最大到length-1

遍历 通过循环遍历;foreach

for( 数据类型 : 要遍历的数组){

}

14. 方法的定义和使用

语法:

[修饰符] 返回的数据类型 方法名 ( 参数1,参数2,… ){

方法体 // 方法中执行的代码

[return 返回的数据] //当方法有返回值不可以省略

}

修饰符:public private protected
static …

返回的数据类型:
方法的返回的数据的类型,可以是基本数据类型和引用数据类型

如果方法没有返回值 void

return 返回的数据

方法名:我们给方法取的名称

命名规范:

1、首字母小写,第二个单词的首字母大写

2、字母 $ _ 数字不可以开头

3、不可以使用关键字和保留字

参数: 数据类型 变量名

方法体:调用方法时,会要执行的代码

如果该方法拥有返回值,一定要提供 return 返回数据值。

15. Arrays工具类API有哪些常用方法?

sort(arr) 排序

binarySearch(arr, key) 查找

copyOf ( arr,length) 复制

fill ( arr,value) 自动填充,一次性添加多个相同数据

toString(arr) 把数组转换为字符串

equalse (arr1,arr2) 判断两个数组是否相同

16. 什么是面向对象?

面向对象是一种编程思想,是一种思维方式:

通过创造和寻找对象的方式,由对象处理所遇到的问题,同时处理和维护好多个对象之间关系的过程。

17. 什么是对象?什么是类?类与对象的关系?

对象:
现实世界中,可以明确标识的一个具体的实体。

类:

类是对一批拥有相同属性和方法的对象的模板,是现实世界中的实体在计算机中的反映。

类与对象的关系:(Java 程序世界,先定义类,在创建对象)

类是对象的抽象描述,而对象是类的具体实例。

Java 中的类 --> 定义的Class

Java 中的对象 --> 通过new 创建的类的实例

18. 如何定义一个类

定义类:定义类其实是在定义类中的属性和方法

属性:对应类中的变量。

行为:对应类中的方法。

[<修饰符>] class
<类名>{

[<属性声明>]

[<构造器声明>]

[<方法声明>]

}

定义属性

属性声明的一般格式:

[<修饰符>] <类型> <名称>;

定义方法

方法的基本语法:

[<修饰符>] <返回类型>
<名称>([<参数列表>]){

[<执行语句>]

}

19. 什么是构造方法

构造方法就是类构造对象时调用的方法,主要用来实例化对象。

构造方法是特殊的方法

语法

【修饰符】 类名(参数){

属性初始化操作;

注:

1、构造方法必须和类名相同

2、构造方法没有返回值(包括void也没有)

3、构造方法的调用,是在创建对象时,通过new关键字

20. 什么是封装?

封装:

隐藏属性,提供公开方法访问属性。

作用: 属性信息进行隐藏,保护信息。

封装的步骤:

实现封装的步骤:

1、修改属性的可见性,限制访问。通常设置为private。

2、提供访问器方法(getter、setter)对属性进行访问。

3、在访问器中添加控制语句,对属性读写的进行限制。

21. JAVA中访问修饰符有哪些?

访问修饰符

publuc 公共的 (所有的类都可以访问)

protected 受保护的(同一个包,和外包的子类可以访问)

default/package 默认不写包内的(在同一个包内的类可以访问)

private 私有的(只在类的内部可以访问)

22. this、super的用法与区别?

this关键字代表当前类对象。

this用途:

  1. 普通的直接引用,作为方法的参数,返回值

  2. 解决局部变量和成员变量的二义性

  3. 在本类之间,构造方法之间的相互调用

super用途:

  1. super表示超(父)类对象,this表示对象本身

  2. super可用于访问父类的方法和属性,使用形式为super.方法(属性)

  3. 在类的继承中,子类的构造方法中默认会有super()语句存在(默认隐藏)

  4. 调用父类构造方法时,必须位于第一行(和this不能同时存在于构造方法中)

23. 重写(override)与重载(overload)的区别

1、方法重载是同一个类中的行为;方法重写是在子类和父类中的行为

2、方法重载要求不同同名方法的参数有所变化(无论是数量还是类型);而方法重写要求同名方法的参数等必须相同

3、重写是对功能的拓展;重载是对功能的重新实现

24. 抽象类必须要有抽象方法吗,和普通类有哪些区别?

不需要,抽象类不一定非要有抽象方法。

l 普通类不能包含抽象方法,抽象类可以包含抽象方法。

l 抽象类不能直接实例化,普通类可以直接实例化。

25. 抽象类能使用 final 修饰吗?

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,编辑器也会提示错误信息。

26. 接口和抽象类有什么区别?

实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

构造函数:抽象类可以有构造函数;接口不能有。

实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

27. Java 容器都有哪些?

Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示:

1). Collection
List
ArrayList
LinkedList
Vector

2). Set
HashSet
LinkedHashSet
TreeSet

3). Map
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable

28. List、Set、Map 之间的区别是什么?

List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。

三者之间的区别,如下表:
在这里插入图片描述

HashMap 的实现原理:

HashMap 基于 Hash 算法实现的,我们通过put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。

30. ArrayList 和 LinkedList 的区别是什么?

·
数据结构实现:

ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。

·
随机访问效率:

ArrayList 比 LinkedList 在随机访问的时候效率要高,因为LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。

·
增加和删除效率:

在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

·
综合来说:

在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值