目录
- 1 数据类型
- 1.1 数据类型一览表
- 1.2 注意事项
- 2 命名规范
- 2.1 标识符命名
- 2.1.1定义规则
- 2.1.2 命名约定
- 3 输入输出
- 3.1 输出语句
- 3.1.1 println语句
- 3.1.2 print语句
- 3.2 输入语句
- 3.2.1 使用方式
- 3.2.2 next()方法和nextLine()方法区别
- 4 程序结构
- 5 类型转换
- 5.1 隐式转换
- 5.2 数据范围从小到大排序
- 5.3 强制类型转换
- 5.3 byte、short、char三种数据类运算机制
- 5.4 Java常量优化机制
- 6 Java的运算符
- 6.1 算数运算符
- 6.1.1 算数运算符一览表
- 6.1.2 '/' 运算符
- 6.1.3 '+' 运算符
- 6.2 位运算符
- 6.3 赋值运算符
- 6.4 关系(比较)运算符
- 6.5 逻辑运算符
- 6.5 短路逻辑运算符
- 6.7 三元运算符
- 7 分支语句
- 7.1 顺序结构
- 7.2 if语句
- 7.3 switch语句
- 7.3.1 基本格式
- 7.3.2 case语句的穿透性
- 7.4 for循环语句
- 7.5 while循环语句
- 7.6 while循环语句
- 7.7 跳转控制语句
- 7.7.1 continue语句
- 7.7.1 break语句
- 8 Random随机数语句
- 8.1 使用步骤
- 9 一维数组
- 9.1 数组格式
- 9.2 数组动态初始化
- 9.3 数组的静态初始化
- 9.4 动态获取数组元素个数
- 10 二维数组
- 10.1 数组格式
- 10.2 二维数组动态初始化
- 10.3 二维数组的静态初始化
- 10.4 二维数组length用法
- 10.5 一维数组给二维数组赋值问题
- 11 方法
- 11.1 概述
- 11.2 方法的定义和调用
- 12 Java内存分配
- 13 进制
- 13.1 不同进制的书写格式
1 数据类型
1.1 数据类型一览表
数据类型 | 关键字 | 占用内存(字节) | 取值范围 |
整数 | byte | 1 | -128 ~ 127 |
整数 | short | 2 | -32768 ~ 32767 |
整数 | int | 4 | -231 ~ 231-1 |
整数 | long | 8 | -263 ~ 263-1 |
浮点数 | float(单精度) | 4 | 1.401298e-45 ~ 3.402823e+38 |
浮点数 | double(双精度) | 8 | 4.9000000e-324 ~ 1.797693e+308 |
字符 | char | 2 | 0 ~ 65535 |
布尔 | boolean | 1 | true、false |
注:e+38表示乘以10的38次方;
1.2 注意事项
- 变量使用之前一定要复制;
- 定义float类型变量的时候,需要在数值后面加入F标识,F可以大写也可以小写;
- 定义long类型变量的时候,需要在数值后面加入L标识,L可以大写也可以小写(建议大写,防止和1混淆);
int a = 10; //需要初始化变量
float b = 12.3F; //加上F标识符
long c = 1234569L; //加入L标识符
2 命名规范
2.1 标识符命名
2.1.1定义规则
- 组成元素:数字、字母、下划线(_)、美元符号($)组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
2.1.2 命名约定
小驼峰命名法:
- 标识符是一个单词时,首字母小写
- 范例:name
- 标识符由多个单词组成时,第一个单词首字母小写,其余单词首字母大写
- 范例:firstName
大驼峰命名法:
- 标识符是一个单词时,首字母大写
- 范例:Name
- 标识符由多个单词组成时,每个单词首字母大写
- 范例:FirstName
3 输入输出
3.1 输出语句
3.1.1 println语句
打印后换行
System.out.println("打印内容"); //打印后换行
3.1.2 print语句
打印后不换行
System.out.print("打印内容"); //打印后不换行
3.2 输入语句
3.2.1 使用方式
- 创建对象
- 调用方法
实例
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();//调用方法接收整形输入
String s = sc.next();//调用方法接收字符串
String s = sc.nextLine();//调用方法接收字符串
3.2.2 next()方法和nextLine()方法区别
- 作用:都是接收键盘录入的字符串;
- 区别:
next():在录入数据时,遇到了空格,就不在录入了。以空格作为录入的结束标记;
nextLine():将数据很完整的接收过来。以回车换行作为录入的结束标记; - 弊端:
next():录入数据的时候,可能会丢失数据;
nextLine():在调用该方法之前,如果调用过nextInt()方法,nextLine()将缺少录入机会; - 解决方案:
如果今后涉及到了整数和字符串同时录入,推荐使用nexInt和next方法配合使用;
4 程序结构
略【后来我忘了要写啥了 [・_・?] 】
5 类型转换
5.1 隐式转换
- 在数据类型中,将取值范围小的类型数据,给取值范围大的类型数据赋值,可以直接赋值;
- 小的数据类型和大的数据类型计算的时候,小的数据类型会先转换为大的数据类型在进行运算;
int a = 10;
double b;
b = a;//可以直击赋值
5.2 数据范围从小到大排序
byte—short/char—int—long—float—double
5.3 强制类型转换
- 定义:把一个表示数据类型范围大的数值或者变量赋值给一个表示数据范围小的变量;
- 格式:目标数据类型 变量名 = (目标数据类型) 值/变量;
int k = (int)88.88;
注意:强制类型转换可能会造成精度损失;
5.3 byte、short、char三种数据类运算机制
byte、short、char三种数据类型在运算时,不管是否有更高的数据类型,都会先提升为int数据类型在进行计算;
例如:
byte a=3,b=4;
byte c;
c=a+b; //这条语句运行就会出现错误,因为运算过程中a、b提升为int类型了,再赋值给c造成数据损失。
c=(byte)(a+b); //强制转换就不报错了,但是数据损失不会改变。
5.4 Java常量优化机制
举例:
byte d;
d = 3+7;//这句话不会报错
常量优化机制:在编译时,会先将3+4计算出结果7,然后自动判断该结果是否在byte取值范围内,在,就通过编译,不在,编译失败报错。
6 Java的运算符
6.1 算数运算符
6.1.1 算数运算符一览表
符号 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增运算符 |
- - | 自减运算符 |
6.1.2 ‘/’ 运算符
System.out.println(10/3); //=3,整数 / 整数 = 整数
System.out.println(10.0/3); //=3.333333333,浮点数 / 整数 = 浮点数;
System.out.println(10/3.0); //=3.333333333,整数 / 浮点数 = 浮点数;
6.1.3 ‘+’ 运算符
- ‘+’运算符在数据运算时为加法计算;
- ‘+’运算符在和字符串中作为字符串连接符使用;
System.out.println("abcd"+"1234"); //输出:abcd1234
System.out.println(1+99+"年"); //输出:100年
System.out.println("5+5="+2+8); //输出:5+5=28
System.out.println("5+5="+(2+8)); //输出:5+5=10
6.2 位运算符
符号 | 计算方式 |
& | 遇0为0,两边都是1才是1 |
| | 遇1为1,两边都是0才是0 |
~ | 0变1,1变0 |
<< | 有符号左移运算,左边符号位丢弃,右边补齐0 |
>> | 有符号右移运算,根据符号位补齐左边 |
>>> | 有符号右移运算,左边补齐0 |
异或运算的特点:一个数被另一个数异或两次,该数本身不变;
例:
/**不允许使用第三个变量,交换两个变量的值*/
int a=10;
int b=20;
a=a^b; //a = 10^20;
b=b^a; //b = 20^10^20 = 10^20^20 = 10;
a=a^b; //a = 10^20^10 = 20^10^10 = 20;
System.out.println(a);
System.out.println(b);
6.3 赋值运算符
符号 | 作用 |
= | 赋值 |
+= | 加后赋值 |
-= | 减后赋值 |
*= | 乘后赋值 |
/= | 除以后赋值 |
%= | 取余后赋值 |
注意:扩展赋值运算符隐含了强制类型转换;
short ss = 1;
ss = (short)(ss+1); //short类型在运算时会先提升为int类型,所以计算结果需要强制类型转换后才可以赋值给ss
ss +=1; //等价于 ss = (short)(ss+1);
6.4 关系(比较)运算符
符号 | 作用 |
== | 是否等于 |
!= | 是否不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
关系运算符的运算结果只有true和false;
6.5 逻辑运算符
符号 | 作用 |
& | 与:并且 |
| | 或:或者 |
! | 非:取反 |
^ | 异或:相同为false,不同为true |
6.5 短路逻辑运算符
符号 | 作用 |
&& | 短路与 |
|| | 短路或 |
- 逻辑与& :无论左边真假,右边都要执行;
- 短路与&&:如果左边为真,右边执行。如果左边为假,右边不执行;
- 逻辑或| :无论左边真假,右边都要执行;
- 短路与||:如果左边为假,右边执行。如果左边为真,右边不执行;
6.7 三元运算符
格式 | 作用 |
关系表达式 ? 表达式1 : 表达式2; | 首先计算表达式的值,如果为true,取值表达式1;如果为false,取值表达式2 |
int a=10;
int b=20;
int max = a>b ? a:b; //输出 b 的值 20
int min = a>b ? b:a; //输出 a 的值 10
7 分支语句
7.1 顺序结构
- 安装代码从上到下依次执行;
- 最简单、最基本语句结构;
7.2 if语句
格式一示例:
if(/*关系表达式*/){
;//语句体
}
格式二示例:
if(/*关系表达式*/){
;//语句体
}else{
;//语句体
}
格式三示例:
if(/*判断条件一*/){
;//语句体
}else if(/*判断条件二*/){
;//语句体
}else{
;//语句体
}
7.3 switch语句
7.3.1 基本格式
格式:
switch(/*表达式*/){
case /*值1*/: /*语句1*/ ; break;
case /*值2*/: /*语句2*/ ; break;
//……
case /*值n*/: /*语句n*/ ; break;
default: /*语句n+1*/ ; break;
}
注意:case: 后面的值只能你是常量不能是变量;
7.3.2 case语句的穿透性
如果switch语句中,case后面省略了break语句,就会开始case穿透;
现象:当开始case穿透,后的case就不在具有匹配效果,内部的语句都会执行,直到看到break语句或者将整个switch语句执行完毕才会结束;
应用实例:
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:System.out.println("今天为工作日");break;
case 6:
case 7:System.out.println("今天为工作日");break;
default:System.out.println("数据输入有误!");break;
}
7.4 for循环语句
格式示例:
for(int i=0; i<8; i++){
;//循环语句
}
7.5 while循环语句
应用实例:
int i = 0;
while(i<=100){
System.out.println("I love you.");
i++;
}
注:一般不确定循环次数的循环过程使用while语句;
7.6 while循环语句
应用实例:
int i = 0;
do{
System.out.println("I love you.");
i++;
}while(i<=100)
无论条件是否满足,都至少会执行一次循环体中的内容;
7.7 跳转控制语句
7.7.1 continue语句
应用实例:
for(int i=0; i<8; i++){
if(i==4){
continue;//当i等于4的时候不执行后面的循环语句,结束本次循环
}
System.out.println("电梯到"+ i + "层了。");
}
7.7.1 break语句
- 应用实例:
for(int i=0; i<8; i++){
if(i==4){
break;//当i等于4的时候跳出循环语句,终止整个循环语句
}
System.out.println("电梯到"+ i + "层了。");
}
- 跳出指定循环体
注释:上面的实例,当i等于4的时候跳出for循环体,如果for外面在套一或几层循环语句时,它只能跳出for循环,跳不出外层的while循环体或更多循环体;
为了解决这个问题,可以给外层 的循环体起一个名字,在使用break语句时,后面加上循环体名字,即可跳出指定的外层循环体;
应用实例:
lo:while(true){ //给循环体起个名字
for(int i=0; i<8; i++){
if(i==4){
break lo;//当i等于4的时候跳出循环语句,跳出指定名为lo的循环体,即while循环体。
}
System.out.println("电梯到"+ i + "层了。");
}
}
8 Random随机数语句
8.1 使用步骤
- 导包:import java.util.Random;//必须出现在类定义之前
- 创建对象:Random r = new Random();//r是变量名,可以变,其他的不允许变动
- 获取随机数:int number = r.nextInt(10);//随机数的生成范围:[0,10) 包括0,但是不包括10。number是变量名可以变,其他的不允许变动。
应用实例:
import java.util.Random; //导包
public class DemoRandom{
public static void main(String[] args){
//创建对象
Random r = new Random();
for(int i=0;i<10;i++){
//获取随机数
int num = r.nextInt(10)+1;//获取[1,10]闭区间的随机数
System.out.println(num);
}
}
}
9 一维数组
9.1 数组格式
格式一
- 数据类型[] 数组名;
格式二
- 数据类型 数组名[];
示例代码:
int[] arr; //创建一个名为arr的int类型数组
char cArr[]; //创建一个名为cArr的char类型数组
注:这里只是创建了数组类型的变量,并没有初始化,直接使用会报错!
9.2 数组动态初始化
格式
- 数据类型[] 数组名 = new 数据类型[数组长度];
示例代码:
int[] arr = new int[10];//通过new关键字,创建一个int类型的数组容器,该容器可以存储10个int类型的数据
9.3 数组的静态初始化
格式
- 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,……};
简化格式
- 数据类型[] 数组名 ={数据1,数据2,……};
示例代码:
int[] arr = new int[]{11,22,33};
int[] arr1 = {44,55 66};
9.4 动态获取数组元素个数
格式
- 数组名.length;
示例代码:
int[] arr = new int[]{11,22,33};
int a = arr.length;//获取元素个数
10 二维数组
10.1 数组格式
格式一
- 数据类型[][] 数组名;
格式二
- 数据类型 数组名[][];
格式三
- 数据类型[] 数组名[];
示例代码:
int[][] arr; //创建一个名为arr的int类型二维数组
char cArr[][]; //创建一个名为cArr的char类型二维数组
int[] iArr[]; //创建一个名为iArr的int类型二维数组
10.2 二维数组动态初始化
格式
- 数据类型[][] 数组名 = new 数据类型[m][n];
示例代码:
int [][] arr = new int[3][4];//定义一个三行四列的二维数组
10.3 二维数组的静态初始化
完整格式
数据类型[][] 变量名 = new 数据类型[][]{{数据1,数据2,…},{数据1,数据2,…},…,{数据1,数据2,…}};
简化格式
数据类型[][] 变量名 = {{数据1,数据2,…},{数据1,数据2,…},…,{数据1,数据2,…}};
示例代码
int[][] arr = new int[3][3]{{11,12,13},{21,22,23},{31,32,33}};
int[][] arr1 = {{11,12,13},{21,22,23},{31,32,33}};
10.4 二维数组length用法
应用实例:
//定义一个二维数组
int[][] arr1 = {{11,12,13,14},{11,12,13,14},{11,12,13,14}};
int le;
le= arr1.length;
System.out.println(le);//输出3,表示3个一维数组
le = arr1[1].length;
System.out.println(le);//输出4,表示第二个一维数组中有4个元素
10.5 一维数组给二维数组赋值问题
实例代码:
int[] arr1 = {11,12,13};
int[] arr2 = {21,22,23};
int[] arr3 = {31,32,33};
int[][] arr = new int[3][3];
arr[0] = arr1;
arr[1] = arr2;
arr[2] = arr3;
11 方法
11.1 概述
定义
- 就是一段具有独立功能的代码块,不调用就不执行;
方法使用须知
- 方法必须先创建才可以使用,该过程称为方法的定义;
- 方法创建后并不是直接运行的,需要手动使用后才执行,该过程称为方法的调用;
11.2 方法的定义和调用
定义示例:
public static void eat(){
System.out.println("吃饭方法");
}
调用示例:
public static void main(){
eat();//调用方法
}
12 Java内存分配
- 栈内存:方法运行时进入的内存,局部变量都存放于这块内存当中;
- 堆内存:new出来的容器都会进入堆内存,并且会存在地址值;
- 方法区:字节码文件(.class文件)加载时进入的内存:
- 本地方法栈:调用操作系统操作资源:
- 寄存器:交给CPU区使用:
13 进制
13.1 不同进制的书写格式
进制 | 格式 | 举例 |
二进制 | 0b开头 | 0b10 |
八进制 | 0开头 | 070 |
十进制 | 默认 | 98 |
十六进制 | 0x开头 | 0xa5 |