第二章 Java变量及基础数据类型
2.1 变量及标识符
2.1.0 Java 标识符规则
- 定义:有字母、数字、_、$组成的
- 最基本的定义:以英文字母开头
- 大小写敏感
- 标识符不得和关键字重复
- 不能以数字开头,不能使用空格分隔
- 长度无限制
- 常量记得赋初值
命名尽可能使用英文命名,多个单词尽可能采用 驼峰命名法 (首字小写,每遇到一个新单词,首字母大写)
eg:
setTimeOut
myName
helloWorld
2.1.1 注释
- 注释主要起解释说明的作用、可以有效的增强程序的可读性和可维护性、Java语言支持三种格式注释:单行注释、区域注释、文档化注释。
单行注释:以“’//”开头,到行尾结束 区域注释:以“/ ”开始,** “/”结束,中间可以跨多行注释内容 文档注释:以“/ ”开始,*“**/”结束,中间可以跨行注释内容
// 单行注释
/**/ 会显示绿色的注释
/***/ 文档注释,会显示蓝色的注释
2.1.2 变量的定义
一、变量是在程序运行的过程中,其值可以改变的量
- 变量的定义由变量类型和变量名(标识符)
- 变量的声明就是一条完整的 Java语句,必须在结尾处用分号
eg:
int number; //定义一个整形变量
二、 什么是标识符?
- 标识符由字母、数字、下划线(_)和美元符号($)组成
- 标识符不能是Java关键字和保留字、但可以包含其内
- 标识符大小写敏感
- 标识符没有长度限制
- 标识符不能有空格
eg:
width、heigh、userName、_sys_sar、$change
2.2 数据类型
2.2.1 数据类型
Java数据类型中分为 基本数据类型 和 引用数据类型 两大类
- 基础数据类型 (8种)
整形:byte、short、int、long(整数) —> 默认值 0
浮点型:float、double(带小数点的数值类型) —> 默认值 0.0
字符型:char(使用单引号【’】包含的字符) —> 默认值 “\u0000” (Java 10)
布尔型:boolean(使用true or false表示的数据值)—> 默认值 false - 引用数据类型
- 除了 基础数据类型 之外都是 引用类型
- 包括 API 中的类:比如 String、File
- 也包括自定义的类,比如 Person,Student
- 数组 int [], String [], 接口等等
整形数据范围 byte < short < int < long
类型 | 存储需求 | 取值范围 |
---|---|---|
byte(位) | 1字节 | -128 ~ 127(-2^7 - 2^7 -1) |
short(短整型) | 2字节 | -32,768 ~ 32767 (-2^15 - 2^15 -1) |
int(整数) | 4字节 | -2,147,483,648 ~ 2,147,483,647 (20 亿左右) (-2^31 - 2^31 -1) |
long(长整数) | 8字节 | -9,223,372,036,854,775,808 ——9,223,372,036,854,775,807 (-2^63 - 2^63 -1) |
char(字符) | 16 | 0~65536 (‘\u0000’~ ^\uFFFF’) |
浮点型
类型 | 存储需求 | 取值范围 |
---|---|---|
float(单精度) | 4字节 | 大约 士3.40282347E+38F(有效位数6~7位) |
double(双精度) | 8字节 | 大约 士1.79769313486231570E+308(有效位数15位) |
不同的类型有不同的范围的数据
- 描述数字,首选 int(整数)、double(小数)
- 数据传输或者进行文字编码转换使用 byte(类型) 【二进制处理操作】
- 处理中文时,最方便的操作的是使用字符 char 来完成 (可选概念)
- 描述内存或者文件大小,描述主键列(自动增长:使用 long)
2.2.2 基本数据类型的使用
- 变量的初始化,给一个变量赋初值
声明了一个变量之后,必须利用赋值语句进行初始化
eg:整形使用
public class Test{
public static void main(String [] args){
int number=10;//number被赋值为整数10
//这句话的意思是,声明了一个 int 类型变量的数据,变量名为,number,把10赋值给number
}
}
eg:浮点数使用
建议使用 double 类型(数据类型转换【小类型 —> 大类型转换】)
public class Test{
public static void main(String [] args){
double x = 5.5;// 定定义一个浮点数类型
int x=10,y=2;
System.out.print(x/y);//得到 5
System.out.print((double)x/y);//得到 5.0 因为类型转换的
}
}
eg:字符变量 (编码问题 —— 看 1.2.5)
public class Test{
public static void main(String [] args){
char a = 'A';
System.out.print(a);//打印 a
}
}
在任何编程语言中,字符都可以与 int 进行相互转换
eg:布尔数据 (boolean 变量进行变量定义)
- 两种状态 : true、false
- Java 中的布尔类型具有特定含义,不像其他语言可以通过 0 表示 false ,其他表示 true
public class Test{ public static void main(String [] args){ boolean flag = true; if(flag){ System.out.print("咿呀咿");//打印 咿呀咿 } } }
2.2.3 引用数据类型使用
- 引用数据类型使用的场景与基本数据类型 完全一样
- 作为属性的类型
- 作为方法的返回值类型使用
- 作为方法的形式参数类型使用
- 应用类型的赋值
- String 类的存在,可以用普通字符串形式进行赋值
- Java 中,数据范围大的数据类型与数据范围小的数据类型进行运算的时候,会自动转换为大类型,比如double 类型和 int 类型计算,结果会变成double类型,如果这两者和String 运算,就会变成 String 类型
如果是 char 类型,必须使用 单引号
public class Test{ public static void main(String [] args){ String str = "hello World"; System.out.print(str/打印 hello World //字符串的拼接使用 + 即可实现,代表连接字符串, ‘+’ 现在有两个含义,一个是数学运算的加减法,一个是字符串拼接 String s = "1" + str; System.out.print(str/打印 1ello World } }
2.2.4 基本类型 与 引用类型的区别
基本数据类型 | 引用数据类型 | |
---|---|---|
概念 | 变量(单纯的值) | 对象 (引用) |
存储位置 | 在栈中存值 | 栈中存引用,在堆中存具体对象的属性值 |
赋值方式 | 直接赋值 | new、String类 和 包装器类可以直接赋值 |
2.2.5 转义字符
比如
Java中的数据类型转换分为:自动类型转换(隐式类转换)和强制类型转换(显示类型转换)两种,小范围数据会向大范围数据转换
public class Test{
public static void main(String [] args){
int a=65;
char b=(char)a;// 得到 A
}
}
常见的编码(ASCLLL 码):
- 大写字母的范围:’A’ (65) ~ ‘Z’(90);
- 小写字母的方位:’a’(97) ~ ‘z’(122);
- 数字字符:’0’(48) ~ ‘9’(57)
注意:
- 大小写字母转换,ascll 码相差 32
- Java 中的 char 类型可以保存中文字符 (unicode 十六进制,它可以保存任意文字内容,使得程序开发更容易)
- 数据类型转换,高精度向低精度转换 会丢失出现精度问题
2.3 成员变量 和 局部变量
2.3.1 概念及区别
- 在类中位置不同
- 成员变量 类中方法外
- 局部变量 方法内或者方法声明上
- 在内存红位置不同
- 成员变量 堆内存
- 局部变量 栈内存
- 声明周期不同
- 成员变量 随着对象的存在而存在,随着对象的消失而消失
- 局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同
public class People{
int num; // 成员变量 = 属性值,放在;类之外
void test(int n1) { // 局部变量,只能在方法内部使用
int n2 = 1;
}
}
2.4 补充扩展
2.4.1 数据溢出问题 (补充)
2019年11月12日17:06:40 更新
public class Test{
public static void main(String [] args){
int a=Integer.MAX_VALUE;// a = 2,147,483,647 获取最大值
System.out.print(a+1); // 得到-2,147,483,648
// 一般防止溢出,要提前估算好数据范围,换更大的数据范围表示,使用 long类型
}
}
2.4.2 提问
- 下面哪个不是引用类型 (D 【其他的都是对象】)
- String
- Double
- Float
- float