Java 面试集合 (四)
1. jdk,jre,jvm 之间的关系
JVM 是 Java 虚拟机, 是 Java 跨平台的重要保障, JVM 实现 Java 跨平台的前提, 可以针对不同的操作系统, 有不同的 JVM.
可以说 Java 语言是跨平台的, 但 JVM 不是.
JRE 是 Java 运行时环境, 包含 JVM + 核心类库.
JDK 是 Java 开发工具包, 包含开发工具 + JRE.
![ab7653affab982b574eb7acc55df2e04.gif](https://img8.php1.cn/3cdc5/15da4/78c/35043ef91835baa5.gif)
分析图
2. Java 的分类 - JAVASE,JAVAEE,JAVAME
JavaSE 为标准版, JavaEE 为企业版, JavaME 为微型版
3. Java 中关键的保留字
Java 中有两个关键字目前没有用, 为 goto 和 const, 在 Java 中, 所有的关键字为小写.
4. 标识符
标识符规则:
可以使用字母, 数字,_ , 以及美元符号 $
, 在 Java 中可以使用中文命名, 但建议不用使用, 不能使用关键字, 也不能以数组开头, 注意区分大小写, 要见名知意
5. 驼峰命名法
类名和接口名, 如果有多个单词组成, 那么每个单词的首字母要进行大写, 如 HelloWorld
变量名和方法名, 如果有多个单词组成, 那么第一个单词的首字母要小写, 其余的单词开头的首字母要大写, 如 helloWorld
常量名, 无论有多少个单词组成, 所有字母都是大写, 强调一点的是每个单词之间要以 _ 隔开, 如 HELLO_WORLD
包名, 无论有多少个单词组成, 所有的字母都是小写, 强调一点的是每个单词之间用以 . 隔开, 如 cn.dashucoding.com
6. 注解
在 Java 中的注解是用来解释说明代码的作用, 有何用途, 作为一名合格的程序员, 必须懂得给代码添加注解.
单行注释
// 注释文字
多行注释
/* 注释文字 */
文档注释
/** 注释文字 */
文档注释中的文字是可以提取出来形成文档的
7. 字面量
字面量: 指的是在计算机中不可变的值
1. 整数常量 (所有的整数)
2. 小数常量 (所有的小数)
3. 字符常量 (将一个字母, 数字, 符号, 用 '' 标识起来)
4. 字符串常量 (将一个或者多个字符用 "" 标识起来)
5. 布尔常量 (true 和 false)
6. 空常量 (null)
8. 进制
二进制: 以 0b/0B 作为开头 (0~1, 满 2 进 1)
八进制: 以 0 作为开头 (0~7, 满 8 进 1)
十进制: 没有特殊标识 (0~9, 满 10 进 1)
十六进制: 以 0X/0x 作为开头 (09,af, 满 16 进 1)
进制间的转化
十进制转二进制: 不断除以 2, 然后取余数
二进制转十进制: 从最低位依次乘以 2 的位次次幂, 然后求和
同理:
十进制转其他进制: 除以对应的进制数, 然后取余数
其他进制转十进制: 从最低位依次开始, 按位次乘以进制的位次次幂, 然后求和
二进制转八进制, 也是从低位开始, 每三位二进制为一组, 产生一个八进制数字, 最高位不足三位, 就补 0, 凑齐三位即可.
口诀: 三变一
八进制转二进制, 每一位八进制数都会产生三位二进制数字, 不足三位就补 0 即可.
口诀: 一变三
同理
二进制转十六位进制: 口诀为四变一
十六位进制转二进制: 口诀为一变四
9. 变量
格式:
数据类型 变量名 = 数据;inti=2;
// 变量的声明
inti;
// 变量的赋值
i=2;
// 存储
bit 为最小单位, 8 位为 1 字节 (byte, 简写为 B)
数据类型
数据类型: 基本数据类型 和 引用数据类型
基本数据类型byte-1short-2int-4long-8
float-4double-8char-2boolean
long---lfloat---f
![ab7653affab982b574eb7acc55df2e04.gif](https://img8.php1.cn/3cdc5/15da4/78c/35043ef91835baa5.gif)
基本数据类型. png
引用数据类型
引用数据类型: 数组, 类, 接口
![ab7653affab982b574eb7acc55df2e04.gif](https://img8.php1.cn/3cdc5/15da4/78c/35043ef91835baa5.gif)
引用数据类型. png
10. 数据类型的转换
数据类型的转换:
自动类型转换 / 隐式转换
强制类型转换 / 显式转换
自动类型转换: 小的类型可以自动转为大的类型
![ab7653affab982b574eb7acc55df2e04.gif](https://img8.php1.cn/3cdc5/15da4/78c/35043ef91835baa5.gif)
大包围小的
char 可以转换为 int,long 可以转换为 float, 其他往前转换, 可能产生精度损失
![ab7653affab982b574eb7acc55df2e04.gif](https://img8.php1.cn/3cdc5/15da4/78c/35043ef91835baa5.gif)
转换// short char
// ok 可行 字面量如果在范围内允许转化
shorta='b';
charc=97;
// not 不可行 可能超过范围, 所以不允许转化
charc='a';
shortb=c;
强制类型转换: 大类型强制转化为小类型, 会可能会导致数据丢失精度// 强制类型转换
doubled=3.14
inti=(int)d;
11. 运算符
+ - */ % + --
++ / -- 自增 / 自减intj=i++;// j = i ; i++
intj=++i;// ++i ; j = ++i
赋值运算符
&#61; &#43;&#61; -&#61; *&#61; /&#61; %&#61; &&#61; |&#61; ^&#61; <<&#61;>>&#61;>>>&#61;
关系运算符
> <>&#61; <&#61; &#61;&#61; !&#61;
逻辑运算符
& 与
Or 或
Not 非
^ 亦或
&& 短路与
|| 短路或
短路 表示如果前面的表达式正确, 后面的就不再运行
&&: 前边的表达式结果为 false, 后面的就不再运行
||: 前面为 true, 后面就不再运行
位运算
& | ^ <<左移 >> 右移 >>> 无符号右移 ~ 取反
&, 将 1 看作 true, 将 0 看作 false,0 & 任何数为 0,1 & 奇数为 1,1 & 偶数为 0.
| , 有 1 为 1.
三元运算符
格式:
逻辑值? 表达式 1: 表达式 2
运算符的优先级
() ~ &#43;&#43; -- ! */ % - <<>>>>> 关系 逻辑 & | ^ 三元 赋值
一元运算 > 二元运算 > 三元运算 > 赋值
12. 流程控制
if,if-else, if-else if
分支结构
if(逻辑值){
代码块;
}
if(逻辑值){
代码块;
} else {
代码块;}
switch(逻辑值){
case 值:
代码块;
break;
case 值:
代码块;
break;
...
}
switch 支持byte/short/char/int/String
while(逻辑值){
代码块;
}
do{
代码块;}while(逻辑值);
while,do-while
for(定义循环变量;控制条件;改变循环变量){
代码块;
}
13. break 和 continue
break: 表示终止当前的一层循环结构
continue: 表示跳过当前一次循环继续下一个循环
14. 数组
格式:
数据类型 [] 数组名 &#61; new 数据类型 [长度];
数据类型 [] 数组名 &#61; new 数据类型 []{元素 1, 元素 2, 元素 3...};int[]arr&#61;newint[]{2,3,4,5,6};
int[]arr&#61;{2,5,7,8,9};
数组的应用
数组名 [下标]
数组名. length
遍历数组
获取数组中最值
数组的排序
反转数组
数组元素的查找for(inti&#61;0;i
System.out.println(arr[i]);
}
for(inti:arr){
System.out.println(i);
}
// 冒泡排序
for(inti&#61;1;i
for(intj&#61;1;j<&#61;arr.length-i;j&#43;&#43;){
if(arr[j-1]>arr[j]){
inttemp&#61;arr[j-1];
arr[j-1]&#61;arr[j];
arr[j]&#61;temp;
}
}
}
// 选择排序
for(inti&#61;1;i
for(intj&#61;i;j
if(arr[i-1]>arr[j]){
inttemp&#61;arr[i-1];
arr[i-1]&#61;arr[j];
arr[j]&#61;temp;
}
}
}
数组: Arrays.sort, Arrays.toString, System.arraycopy , Arrays.copyOf
15. 内存
Java 内存:
栈内存, 堆内存, 方法区, 本地方法栈, PC 计数器 (寄存器)
栈内存用来存储的是变量
堆内存用来存储的是对象
16. 方法
格式:
修饰符 返回值类型 方法名 (参数列表){
方法体;
return 返回值;
}
方法的重载
方法名相同但参数列表不同
方法的传值
方法的传值, 基本类型传实际值, 引用类型传地址
17. 快捷键
Ctrl &#43; x 剪切
Alt &#43; / 快捷提示键
Ctrl &#43; Shift &#43; o 导包
Ctrl &#43; Shift &#43; f 调整格式
Ctrl &#43; F 搜索
Ctrl &#43; D 删除一行
18. 成员变量和局部变量
成员变量在类中, 局部变量在方法中
成员变量作用在整个类中, 局部变量只能在它的方法中, 或者语句中
成员变量存储在堆内存中, 并自动赋予默认值;
局部变量存储在栈内存中, 不自动赋予默认值
构造方法, 与类名同名, 没有返回值, 构造方法可以重载
this 关键字, 代表本类中的对象的引用
可以用 this 调用本来中的对应形式的构造方法
面向对象的特征为封装, 继承, 多态
来源: http://www.jianshu.com/p/d6417f60d2b4