# 常用变量声明方式 数据类型 变量名 = 初始值; # 必须以分号结尾,标识一行代码结束;可以只定义变量,不赋初值
变量声明练习
public class VarTest{ public static void main(String[] args){ // 1.声明一个变量并初始化 int age = 21; // 2.打印变量值 // + : 字符串连接符,将两边的内容连接起来,还是一个字符串 System.out.println("age = " + age); } }
PS E:\LaGou-Java\Class-Learning\Class-note\模块一 Java编程基础\02任务二 变量和数据类型\code> javac .\VarTest.java PS E:\LaGou-Java\Class-Learning\Class-note\模块一 Java编程基础\02任务二 变量和数据类型\code> java VarTest age = 21
由数字,字母,下划线组成(还有$,但是不常用),数字不能开头
不能使用Java语言关键字
区分大小写,长度没有限制但不宜过长
尽量见名知意,支持中文但不推荐使用
标识符可以给 类/变量/属性/方法/包起名字。
文件开头
// 导入java目录中util目录中的Scanner类 import java.util.Scanner;
文件main函数中实现部分
// 创建一个扫描器来扫描键盘输入的内容,System.in代表键盘输入 Scanner sc = new Scanner(System.in); // 通过扫描器读取一个字符串数据放入变量name中 name = sc.next(); // 通过扫描器读取一整数数据放入变量name中 age = sc.nextInt();
十进制:逢十进一
二进制:逢二进一
八进制,十六进制其实都是二进制的简写
byte
short
int**(推荐使用,默认为int类型)**
long
在Java程序中直接写出的整数数据叫做直接量/字面量/常量,默认为int类型。若希望表达比long更大的直接量,则在直接量的后面加上“l”或“L”,推荐“L”。
整数不能作为标识符的原因:
使用不同整数类型的变量为另一个变量赋值报错:
这是一个变量,数值是否会发生变化,不得而知
当进行赋值的时候,无法直接确定当前的变量是否在自己的整数范围之内,还需要继续进行计算才能确定,直接报错让程序员自行进行检查
// 6.错误代码测试 int i2 = 25; byte b2 = i2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失 System.out.println("b2 = " + b2);
比long还大的整数表示:
// 5.声明一个long类型的变量并初始化 // 若描述比long类型还大的数据则使用java.math.BigInteger类型 long L1 = 2147483650L; System.out.println("L1 = " + L1);
float
在内存空间中占四个字节,叫做单精度浮点数,一般表示七位有效数字
七位有效数字:从左起第一位开始算起,小数点不算,数七位为有效数字,剩余部分无法保证有效,可能会出现精度损失
// float可以在直接量末尾添加f/F,以指示为float类型,但是因为七位有效数字,最后一位小数精度无法保证 float f1 = 3.1415926F; // f1 = 3.1415925 System.out.println("f1 = " + f1);
范围:-3.403E38 ~ 3.403E38(指数表示法)
int和float字节数相同,为什么表示范围不一样?
double**(推荐使用,默认为double类型)**
因为float,double计算不够精确,如何做到精确计算:
// 3.笔试考点 System.out.println("0.1 + 0.2 = " + (0.1 + 0.2)); // 0.1 + 0.2 = 0.30000000000000004 // float和double运算时会有误差 // 若希望实现精确运算,借助java.math.BigDecimal类型
char:
用于描述单个字符的数据类型(单引号引起来的单个字符)
在内存空间中占两个字节,并且没有符号位
表示范围为(0 ~ 65535)
计算机的底层只识别0和1组成的二进制序列,对于字符’a’这样的图案来说不满足该规则,因此该数据无法直接在计算机中存储,但现实生活中存在这样的图案数据需要计算机存储,为了使得该数据能够存储起来就可以给该数据指定一个编号,然后将编号存储起来即可,该编号就叫做ASCII。
ASCSI:
// 4.定义一个char类型的变量并初始化 char c2 = 98; System.out.println("c2: " + c2); System.out.println("c2 number: " + (int)c2);
Unicode字符集:
包含世界各国的字符
站长之家链接:http://tool.chinaz.com/tools/unicode.aspx
// 5.使用Unicode字符集打印名字 // 云梦归遥 - \u4e91\u68a6\u5f52\u9065 char c3 = '\u4e91'; char c4 = '\u68a6'; char c5 = '\u5f52'; char c6 = '\u9065'; System.out.println("My name is: " + c3 + c4 + c5 + c6);
特殊字符类型:
自动类型转换
自动类型转换主要是指从小类型到大类型之间的转换
long类型(8字节)到float类型(4字节)转化的原因:
强制类型转换
大类型到小类型之间的转换
目标类型变量名= (目标类型)源类型变量名;
强制转换不出现损失的情况(在当前数值范围之内):
byte b1 = 10; short s1 = 20; // 3.实现强制类型之间的转换 b1 = (byte)s1; System.out.println("b1 = " + b1 + ", " + "s1 = " + s1); // b1 = 20, s1 = 20
强制转换出现损失的情况(超出当前数值范围之内):
// 4.故意超出byte的范围 s1 = 128; b1 = (byte)s1; // short类型的s1:128的二进制数:0000 1000 0000,强转为byte时取低八位,1000 0000, // 但是byte类型第一位是符号位,转换为十进制数为-128 System.out.println("b1 = " + b1 + ", " + "s1 = " + s1); // b1 = -128, s1 = 128
// 4.故意超出byte的范围 s1 = 128; b1 = (byte)s1; // short类型的s1:128的二进制数:0000 1000 0000,强转为byte时取低八位,1000 0000, // 但是byte类型第一位是符号位,转换为十进制数为-128 System.out.println("b1 = " + b1 + ", " + "s1 = " + s1); // b1 = -128, s1 = 128