Java知识回顾(一)
一、java基本知识回顾
1.1、基本的DOS命令
磁盘操作系统(Disk Operating System)
命令 | 全称 | 意义 |
cls | clear screen | 清除DOS屏幕 |
dir | directory | 列出当前目录下所有的子文件(包括子目录) |
cd | change directory | 改变路径 |
exit | exit | 退出DOS界面 |
cd
命令
在dos中,可以使用
cd
命令进行目录的切换
目标:切换到上级目录、切换到根目录、切换到C盘
实现:
cd ..
cd \
c:
1.2、jdk、jre和jvm
名字 | 全称 | 意义 |
jdk | java development kit | java开发工具,针对开发人员 |
jvm | java virtual machine | java虚拟机,针对使用者(实现java可移植性) |
jre | java runtime environment | java运行环境,包含了jvm,针对使用者 |
简单来说,JDK是整个Java的核心部分,它包含了JRE、一些java工具和java基础的类库;
JRE包含了JVM和类库lib,只有JVM还不能进行class的执行,因为解释class的时候,JVM需要调用解释所需要的类库lib。
1.3、java的加载与执行
编译阶段:
java源程序经过java工具
javac
(java编译器)编译成字节码文件.class
(可以生成多个)
javac
+ 源文件路径运行阶段:
通过
java
命令运行字节码文件进行运行。(切换到java字节码文件所在目录)
java
+ 类名
Java运行阶段的执行过程:
java.exe命令会启动Java虚拟机(jvm),jvm会启动类加载器classLoader,
类加载器会在硬盘上搜索相应的字节码文件,找到该文件后会将该字节码文件装载到jvm中
jvm随后将字节码文件解释成机器语言
1.4、java语言中的注释
注释不会被编译到自己码文件中,对java源代码进行解释说明
名字 | 快捷键 | 意义 |
单行注释 |
| 只注释当前行 |
多行注释 |
| 注释一个区域 |
Javadoc注释 | 在一个方法或类的开头,输入 | java工具 |
/**
* Javadoc注释
* Javadoc注释
*/
1.5、java类的访问修饰符
名字 | 意义 |
public | “公共的” 被修饰的类、属性以及方法可以跨类、且允许跨包 |
protected | “保护访问权限" 被修饰的属性以及方法能被类本身的方法访问,即使子类不在同一个包 |
default | ”默认访问权限/包访问权限“ 只允许在同一个包中进行访问 |
private | ”私有的“ 只能被该类的对象访问,子类都没有访问权限 |
在java源文件中,可以存在多个类,但是只能存在一个public类(不是必须存在),且源文件名称必须与public类名相同。每一个class类都会定义生成一个XXX.class字节码文件。
每一个class文件当中都可以边写main方法,设定程序的入口,当要执行相应类
X
里的main方法时,java X
(X
中必须有main函数)
二、java语言基础
2.1、标识符
标识符用来标记类、方法、变量等程序员可以自己命名的东西;
标识符使用字母、数字和下划线
_
、美元符号$
进行命名,且不能由数字开头,且严格区分大小写,关键字不能作为标识符使用;
标识符命名规范
- 最好见名知义
- 遵守驼峰命名规范
UserService
- 类名、接口名: 首字母大写,后面每个单词首字母大写
class UserService
- 变量名、方法名:首字母小写,后面每个单词首字母大写
float userService
- 常量名:全部字母大写
final float USERSERVICE
2.2、关键字
在java中,关键字都是小写的
class、extends、implements、import、package、break、case等
2.3、变量
变量是内存中的一块空间,这块空间有“数据类型”、“名字”和“字面值”
变量是内存中存储数据的最基本的单元,有了变量之后,内存空间可以得到重复的利用率
变量的作用域
变量的作用域描述的是变量的有效范围
名字 | 含义 |
类级 | 全局变量或者静态变量, |
对象实例级 | 成员变量,需要实例化才会分配内存空间 |
方法级 | 方法内部定义,局部变量 |
块级 | 定义在一个块内的变量,如 |
// Identifer 是类名
public class Identifer {
static int i;//静态变量,在类名被加载时也被创建
public static void main(String[] args) {
doSome();
System.out.println(i);
}
// dosome 是方法名
static void doSome(){
i = 10;
}
public class Identifer {
int i;
public static void main(String[] args) {
doSome();
System.out.println(i);
}
static void doSome(){
new Identifer().i = 10;//实例化对象
}
变量的分类
按照变量出现的位置分类
名字 | 描述 |
局部变量 | 在方法体重声明的变量 |
成员变量 | 在类体内,方法体之外声明的变量 |
java遵循“就近原则”
数据类型
java程序中有很多数据类型,不同的数据类型占用不同的内存大小,数据类型的作用就是知道JVM在运行程序中分配数据内存空间大小
数据类型一共分为两大类:引用数据类型和基本数据类型
引用数据类型:类、接口、数组等(字符串)
基本数据类型:有四大类八小类(整数型、浮点型、布尔型和字符型)
名称 | 描述 | 占用空间大小[字节] | 默认值 |
byte | 字节 | 1 | 0 |
short | 短整型 | 2 | 0 |
int | 整型 | 4 | 0 |
long | 长整型 | 8 | 0 |
float | 浮点数(单精度) | 4 | 0.0 |
double | 浮点数(双精度) | 8 | 0.0 |
boolean | 布尔型 | 1 | false |
char | 字符型 | 2 | \u0000(\u表示unicode编码) |
编码方式
为了解决字符能够被机器所解释
英语 ASCII
中文 GB2312<GBK<GB18030
全球统一编码方式 unicode编码方式(java源代码采用
utf-8
较多)UTF-8/16/32....
整数类型
java中的整数型字面值是int类型
名称 | 方法 |
十进制 | 默认(10) |
八进制 | 以 |
十六进制 | 以 |
long x = 123;
//x 是long型,123是int类型
long x = 2147483647;
//编译出错,因为2147483647会被当做int处理,但是超出了int范围
long x = 2147483647L;
//就可以直接作为一个8位的long型数据
类型转换
- 八种基本数据类型除了布尔类型之间都可以相互转换
- 大容量类型转换给小容量无法直接编译,需要添加强制类型转化符,但是运行阶段可能会损失精度,将左边的二进制去掉,保留右边的二进制位。
- 当整数字面值没有超出byte、short和char的取值范围时候,可以直接赋值给byte、short和char类型的变量
- byte、short和char混合运算的时候,先转换为int类型再计算,当不同的数据类型进行计算时,先将数据转化为较大的数据类型再进行计算
long x = 100L;
int y = (int)x;
double z = 10/3
//结果为3.0 10/3结果为3,int类型3转化为浮点类型3.0
//重点,不要再编译器掺杂运行过程
short i = 1;
byte j = 2;
short k = i+j;
//编译报错,i和j在运算时,被当做int类型计算,计算结果为int类型,编译期不会判断是否在精度范围内,会报错。
short l = 3;
//编译通过,编译期判断int类型3没有超过short范围,可以直接赋值
2.4、运算符
加圆括号是一种编程规范,因为程序不只是写给自己看
算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。
- 算术运算符(
+、-
等) - 关系运算符(
>、<、!=
等)
关系运算符比较的是两个对象保存的值之间的大小
- 逻辑运算符(
&、|、!、&&
等)
其中
&
与&&
计算结果相同,但是短路与&&
存在短路现象
int x = 10;
int y = 8;
System.out.print(x<y & ++x<y)
//&后面的表达式依然会执行
System.out.print(x<y && ++x<y)
//&&后面的表达式不再执行,执行效率高,但是,在一定条件下,可能也需要第一种方式
- 赋值类运算符(
=、-=、+=
等,从右到左)
扩展类赋值运算符不改变数据类型
int a = 1;
byte a = a+5;//编译出错
byte a += 5;//编译通过,因为等于byte a = (byte)(a+5)
- 字符串连接运算符(
+
) - 条件运算符(三元运算符)(?:)
2.5、控制语句
- 控制选择结构语句(
if、switch
) - 控制循坏结构语句(
for、while、do while
)
//&&后面的表达式不再执行,执行效率高,但是,在一定条件下,可能也需要第一种方式
* 赋值类运算符(`=、-=、+=`等,从右到左)
> 扩展类赋值运算符不改变数据类型
```java
int a = 1;
byte a = a+5;//编译出错
byte a += 5;//编译通过,因为等于byte a = (byte)(a+5)
- 字符串连接运算符(
+
) - 条件运算符(三元运算符)(?:)
2.5、控制语句
- 控制选择结构语句(
if、switch
)
Switch(
int
或者String
),当然由于char
字符型、short
等数据类型先转化为int
,也可以使用case可以合并
switch(i){
case1:case2:case3:
java语句;
break;
default:
java语句;
}
- 控制循坏结构语句(
for、while、do while
)
for(初始化表达式;布尔表达式;更新表达式)
其中三个表达式都不是必须的
1. 执行初始化表达式(只执行一次)
2. 判断布尔表达式(更新表达式)
- 改变控制语句顺序(
break、continue
)
break可以指定中断的循环
for1
,使用的频率特别低
for1:for(int i = 0;i < 3;i++){
for2:for(int j = 0;j < 2;j++ ){
break for1;
}
}