一、常量
- 1.常量概念
- 在程序运行过程中,其值不可以发生改变的量
- 2.常量分类
- 字符串常量:用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等
- 整数常量:整数,例如:-10、0、88等
- 小数常量:小数,例如:-5.5、1.0、88.88等
- 字符常量:用单引号括起来的一个字符,例如:‘a’、‘5’、‘B’、'中’等
- 布尔常量:布尔值,表示真假,只有两个值true和false
- 空常量:一个特殊的值,空值,值为null,不可以在输出语句中直接打印(除空常量外,其他常量均可使用输出语句直接输出)
public class Demo1Constant {
public static void main(String[] args) {
System.out.println("你好,黑马程序员");
System.out.println(123);
System.out.println(12.3);
System.out.println('a');
System.out.println(true);
System.out.println(false);
System.out.println(5 > 10);
//System.out.println(null); //null在输出语句中会报错
}
}
二、变量
- 1.什么是变量
- 变量就是内存中的存储空间,空间中存储着经常发生改变的量(数据)
- 2.变量的定义格式
- 数据类型 变量名 = 数据值;
public class Demo1Variable {
public static void main(String[] args) {
// 格式:数据类型 变量名 = 数据值;
// 整数类型变量
int a = 10;
System.out.println(a);
// 小数类型变量
double b = 12.3;
System.out.println(b);
// 字符类型变量
char c = 'a';
System.out.println(c);
// 布尔类型变量
boolean d = true;
System.out.println(d);
}
}
三、数据类型
- 1.计算机存储单元
- 我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位 (bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示
- 而计算机中最基本的存储单元叫“字节(byte)”,通常用大写字母”B”表示,字节是由连续的8个位组成
- 2.Java中的数据类型
- Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括基本数据类型和引用数据类型两种
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
整数类型 | byte | 1 | -128~127 |
short | 2 | -32768~32767 | |
int(默认) | 4 | -2的31次方到2的31次方-1 | |
long | 8 | -2的63次方到2的63次方-1 | |
浮点类型 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数: 1.401298E-45到3.402823E+38 |
double(默认) | 8 | 负数:-1.797693E+308到-4.9000000E-324 正数:4.9000000E-324 到1.797693E+308 | |
字符类型 | char | 2 | 0-65535 |
布尔类型 | boolean | 1 | true,false |
在java中整数默认是int类型,浮点数默认是double类型
四、变量的注意事项
- 在同一对花括号中,变量名不能重复
- 变量在使用之前,必须初始化(赋值)
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容
五、键盘录入
- 1.导包:
import java.util.Scanner
- 2.示例
import java.util.Scanner;
public class Demo1Scanner {
/*
步骤1: 导包, 需要写在class的上面,import java.util.Scanner;
步骤2: 创建对象Scanner sc = new Scanner(System.in);只有sc可以改变, 其他属于固定格式
步骤3: 使用变量接受数据int i = sc.nextInt();只有i变量可以改变, 其他属于固定格式
*/
public static void main(String[] args) {
// 步骤2: 创建对象
Scanner sc = new Scanner(System.in);
// 步骤3: 使用变量接受数
int a = sc.nextInt();
System.out.println(a);
}
}
六、标识符
- 1.什么是标识符
- 标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名
- 2.Java中标识符的组成规则
- 由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字
- 不能使用java中的关键字作为标识符
- 标识符对大小写敏感(区分大小写)
- 3.java标识符的命名约定
- 小驼峰式命名:变量名、方法名;首字母小写,从第二个单词开始每个单词的首字母大写
- 大驼峰式命名:类名;每个单词的首字母都大写
- 标识符的命名最好可以做到见名知意
七、类型转换
在Java中,一些数据类型之间是可以相互转换的。分为两种情况:自动类型转换和强制类型转换
- 1. 隐式转换
- 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可
public class Demo1Conversion {
/*
隐式转换: 将数据类型中, 取值范围小的数据, 给取值范围大的类型赋值, 可以直接赋值
*/
public static void main(String[] args) {
int a = 10; // int 4个字节
double b = a; // double 8个字节
System.out.println(b); //10.0
}
}
- 2.类型从小到大关系图
- 3.类型提升
- 小的数据类型和大的数据类型运算,小的会提升为大的类型之后再进行运算
- 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型
- boolean类型不能与其他基本数据类型相互转换
- 小的数据类型和大的数据类型运算,小的会提升为大的类型之后再进行运算
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);
- 4.强制转换
- 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量
- 强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量
public class Demo2Conversion {
/*
强制转换: 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量
简答理解: 大的给小的, 不能直接给, 需要强转
格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
*/
public static void main(String[] args) {
int a = 10;// int 4个字节
byte b = (byte)a;// byte 1个字节,错误: 不兼容的类型: 从int转换到byte可能会有损失精度
System.out.println(b);
double num1 = 12.9;
int num2 = (int)num1;
System.out.println(num2);
}
}
- 5.类型转换案例
- 解决方案:
byte c = (byte)(a + b);
- 常量优化机制:
- 这里的3和4是两个常量, Java存在常量优化机制, 会在编译的时候就会让3和4进行相加, 然后会自动判断7是否在byte的取值范围内
- 不在范围内: 编译出错
- 在范围内: 通过编译
- 这里的3和4是两个常量, Java存在常量优化机制, 会在编译的时候就会让3和4进行相加, 然后会自动判断7是否在byte的取值范围内
- 解决方案:
byte a = 3;
byte b = 4;
byte c = a + b; //错误。因为两个byte变量相加,会先提升为int类型
byte d = 3 + 4; //正确。常量优化机制