一、标识符
1、标识符与关键字
标识符是在编程是使用的名字,使用时须遵循一定的规则:
- 可以包含数字,但不能以数字开头
- 除下划线(_)和美元符号($)以外,不包含任何其他特殊字符,如空格
- 不能用Java关键字或保留字做标识符
- Java标识符大小写敏感
关键字有:int、void、short、if、for、continue、do、break、else等有特殊含义的不能作为标识符。
保留字是指被保留但目前尚未被使用的关键字,为了保留未来可能使用的关键字而被保留,例如goto、const。
2、变量
变量是Java程序中最基本的存储单元,用来存储数据
- 变量名必须是一个有效的标识符
- 变量名不可以使用java的关键字
- 变量名不可以重复
/**
* 变量
* @Author:SmallG
* @CreateTime:2023/7/19+16:07
*/
public class VarDemo {
public static void main(String[] args) {
//声明(定义)一个变量 变量的类型 变量名(自己命名的标识符)
int v1; //声明一个int类型的变量 变量名是v1
//变量需要初始化
v1 = 1;
//打印输出v1
System.out.println(v1); //1
//声明一个变量
int v4 = 100;
//使用变量
System.out.println(v4); //100
//修改变量
v4 =200;
//再次访问
System.out.println(v4); //200
}
}
二、数据类型
1、基本数据类型
四类八种基本数据类型:
- 整数类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
byte:字节类型,1字节(8个二进制位),数据范围是 -2^7 ~ 2^7-1(-128~127)。
short:短整型,2字节(16个二进制位),数据范围是 -2^15 ~ 2^15-1(-32768~32767)。
int:整型,4字节(32个二进制位),数据范围是 -2^31 ~ 2^31-1(-2147483648~2147483647)。
long:长整型,8字节(64个二进制位),数据范围是 -2^63 ~ 2^63-1。
float:单精度浮点数,4字节(32个二进制位),数据范围大约是 -3.403E^38 ~ 3.403E^38。
double:双精度浮点数,8字节(64个二进制位),数据范围大约是 -1.8E^308 ~ 1.8E^308。
char:2字节(16位),数据范围是0~2^16-1(0 ~ 65535)。可以表示汉字,一个汉字占两个字节的内存空间。
boolean:表示判断的结果,Java规范没有明确的规定,不同的JVM有不同的实现机制。
(为什么-1?因为有个符号位)
(负的比正的多一个,在于出现两个零。例如:10000000看为-128)
案例测试1:
1、声明并输出4种整型的最大值和最小值
2、声明并输出2种浮点类型的最大值和最小值
/**
* @document:测试不同数据类型的最大值最小值
* @Author:SmallG
* @CreateTime:2023/7/19+17:41
*/
public class Scope {
public static void main(String[] args) {
//1、byte,short,int,long
//定义变量的格式:数据类型 变量名 = 值;
byte bMax = Byte.MAX_VALUE;
byte bMin = Byte.MIN_VALUE;
System.out.println(bMax); //127
System.out.println(bMin); //-128
short sMax = Short.MAX_VALUE;
short sMin = Short.MIN_VALUE;
System.out.println(sMax); //32767
System.out.println(sMin); //-32768
int iMax = Integer.MAX_VALUE;
int iMin = Integer.MIN_VALUE;
System.out.println(iMax); //2147483647
System.out.println(iMin); //-2147483648
long lMax = Long.MAX_VALUE;
Long lMin = Long.MIN_VALUE;
System.out.println(lMax); //9223372036854775807
System.out.println(lMin); //-9223372036854775808
//浮点型
float fMax = Float.MAX_VALUE;
float fMin = Float.MIN_VALUE;
System.out.println(fMax); //3.4028235E38
System.out.println(fMin); //1.4E-45
double dMax = Double.MAX_VALUE;
double dMin = Double.MIN_VALUE;
System.out.println(dMax); //1.7976931348623157E308
System.out.println(dMin); //4.9E-324
//字符型
char c1 = 'a';
char c2 = 67; //可以存储数字,0~127对应ASCII对应的值,128~65535默认按照空格处理
char c3 = '关'; //可以存储汉字
System.out.println(c1); //a
System.out.println(c2); //C
System.out.println(c3); //关
}
}
案例测试2:
/**
* @document: 数据类型案例
* @Author:SmallG
* @CreateTime:2023/7/20+9:08
*/
public class StudentInformation {
public static void main(String[] args) {
/*
表示学生的信息 标识符命名要符合驼峰标识
*/
int studentId = 12345; //定义学生的学号
String studentName = "SmallG"; //学生姓名
int studentAge = 22; //学生年龄
double studentScore = 90.5; //学生成绩
char gander = '男';//学生性别
boolean isMarried = false; //是否结婚
//输出学生信息
System.out.println("学生信息:");
System.out.println("学号:" + studentId);
System.out.println("姓名:" + studentName);
System.out.println("年龄:" + studentAge);
System.out.println("成绩:" + studentScore);
System.out.println("性别:" + gander);
System.out.println("是否结婚:" + isMarried);
}
}
2、引用数据类型
(1)字符串类型
java中使用string类型的变量来存储字符串类型的数据,在声明时和基本数据类型很像。
字面量:在计算机中,字面量是用于表达源代码中一个固定值的表示法。所有固定的值都是字面量。
/**
* @document:字面量
* @Author:SmallG
* @CreateTime:2023/7/19+17:32
*/
public class Literal {
public static void main(String[] args) {
int a = 3; //其中3是字面量,3默认为int类型
long b = 5L; //其中5是字面量,L代表long类型
short c = 6; //其中6是字面量,自动转换成int类型
byte c1 = 1; //自动转换为int类型
double d = 5.5; //5.5是字面量
float f = 6.6F; //6.6是字面量,因为字面量默认是double类型,所以结尾要加上F
char e = 'a'; //a是字面量
}
}
3、数据类型转换
(1)小范围的数据可以自动转换为大范围数据类型
byte、short和char可以自动转换为int
int可以自动转换为long
long可以自动转换为float
float可以自动转换为double
/**
* @document: 自动类型转换
* @Author:SmallG
* @CreateTime:2023/7/20+9:37
*/
public class AutoConversion {
public static void main(String[] args) {
byte b = 100;
int i = b; //byte类型可以自动转换为int类型
long l = i;
float f1 = b;
float f = l;
double d = f;
//关于不同类型的计算
double x = 5 + 5.0; //整数5自动转换为double类型然后再计算
}
}
(2)大范围的数据转换为小范围的数据类型需要强制转换
如果大范围的数据没有超过小范围的数据的范围,可以成功转换,如果超过小范围则会出现溢出和精度损失。
/**
* @document:
* 强制类型转换
* 会出现的两个风险
* 1、溢出
* 2、精度损失
* @Author:SmallG
* @CreateTime:2023/7/20+10:07
*/
public class ForcedConversion {
public static void main(String[] args) {
short s1 = 123;
byte b1 = (byte) s1; //范围内的数据,可以成功转换
System.out.println(b1); //123
short s2 = 256;
byte b2 = (byte) s2; //超出范围出现溢出问题
System.out.println(b2);
//0 正数超范围按照最小值加上相应的数,如果是负数超范围,按照最大值减去相应的值
long l1 = 12389;
int i1 = (int) l1; //范围内的数据,可以成功转换
System.out.println(i1); //12389
long l2 = 238923332233L;
int i2 = (int) l2; //超出范围,发生溢出问题
System.out.println(i2); //-1594836343
double d1 = 2.5;
float f1 = (float) d1;
System.out.println(f1); //范围内的数据,可以成功转换 2.5
double d2 = 1.0/3;
float f2 =(float) d2;
System.out.println(f2); //精度损失 0.33333334
}
}