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程序的步骤
-
编写Java源程序(后缀名.java)
-
编译,用javac命令编译Java程序(javac 源文件.java),生成字节码文件; 后缀名.class
-
编译完成会得到 .class 文件(文件名相同)
-
用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. 什么是数组,它有什么特征?
概念: 数组是连续存储相同数据类型元素的集合
特点:
-
数据类型相同
-
数据是有顺序的
-
通过数组的下标访问数据
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用途:
-
普通的直接引用,作为方法的参数,返回值
-
解决局部变量和成员变量的二义性
-
在本类之间,构造方法之间的相互调用
super用途:
-
super表示超(父)类对象,this表示对象本身
-
super可用于访问父类的方法和属性,使用形式为super.方法(属性)
-
在类的继承中,子类的构造方法中默认会有super()语句存在(默认隐藏)
-
调用父类构造方法时,必须位于第一行(和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。