变量和数据类型
需要掌握:
- 掌握变量和常量的使用
- 掌握Scanner键盘输入
- 掌握常见的运算符
1. 变量和常量
1.1 变量的概述
变量: 可以变化的量,变量存在的意义就是用于在内存中去临时性的存储数据。
在Java中一个变量的使用:(变量的组成) ----- 类似于住酒店的过程 (内存类似于酒店)
1.2 变量的三元素:
- 数据类型(根据你要存储的内容 合理的分配一个内存空间) — 酒店的房间类型(双人间、单人间)
- 变量名(如果没有变量名 那么使用这个变量时 需要记忆内存地址 0x1231b12) — 酒店的房间名(302)
- 变量值(在内存中要存储的数据) — 酒店房间中居住的客人
1.2.1 掌握Java中的数据类型
Java中为了合理的使用内存,将不同的数据,划分成了不同的类型。
8种类型(【基本数据类型】):
整数: 无小数点的数
- byte:字节型
- short:短整数型
- Int:整数型
- long:长整数型
浮点型: 有小数点的数
- float:单精度浮点型
- double:双精度浮点型
非数值类型:
-
char:字符型 存储单个字符用,以单引号引起来。例如:
'a'
'我'
'1'
'男'
-
boolean:布尔型 只能存储两个值,一个为
true
正确(真),一个是false
错误(假) ,存储一些判断结果比较适合引用数据类型:
-
String:字符串型 最常用的类型,以双引号引起来的。 例如:
"a"
"呵呵"
1.3 变量的使用步骤
第一步:声明变量,根据数据类型在内存申请空间。
第二步:赋值,即“将数据存储至对应的内存空间”。
ps:第一步和第二步可以合并。
第三步:使用变量,即“取出数据使用”。(也就是拿着变量名去使用)
public class Demo2 {
public static void main(String[] args) {
// 两种方式使用
// 【1.先声明再赋值】
// 存储名字
// 数据类型 变量名; 声明一个变量(开辟一块内存空间)
String name;
// 赋值 向对应的变量的内存空间进行存储数据
// 变量名 = 变量值;
// 将张三这个值赋给name这个变量
name = "张三";
// 【2.声明的同时并赋值】
// 数据类型 变量名 = 变量值;
String stuName = "张三";
}
}
public class Demo3 {
public static void main(String[] args) {
// 存储姓名
String name = "张三";
// 存储年龄
int age = 22;
// 存储性别
char sex = '男';
// 存储爱好
String hobby = "pubg";
// 存储是否结婚
boolean hasCP = false;
// 存储账户余额
double money = 4.32;
}
}
public class Demo4 {
public static void main(String[] args) {
// 注意:float long
// Java中默认整数就是int 小数就是double
// 在数字后写大写F或小写的f,如果写可能会报错
float f = 10.1F;
// 在数字后写大写的L或小写的l,建议写大写的L,如果写可能会报错
long lo = 10L;
}
}
1.4 常量
常量: 在程序运行中,我们需要存储一些数据,但是这些数据在存储好后不应该再次变化。(例
如:π)这时候,单纯使用变量存储,毕竟叫变量,难保未来可能被不小心改值。这时候我们就
可以使用常量来解决此问题。在 Java 中,其值不能改变的量被称为常量。常量多被 final 修
饰,被 final 修饰则无法二次修改值。
public class Demo2 {
public static void main(String[] args) {
// 需求:计算圆的面积 π*r*r
// 存储π
// 常量:表示只可以赋值一次的变量 被final修饰
final double PI = 3.14;
// 存储半径
double r = 2;
// 计算面积
double area = PI * r * r;
System.out.println("圆的面积为:"+area);
}
}
计算圆的面积时PI的值是固定的,若PI不定义为常量,之后可能会无意中更改PI 的值导致结果错误。
1.5 了解变量和常量的命名规范
Java中的变量名的组成: 数字、字母、$和_都可以作为变量名的组成内容,数字不能开头。
- 变量名应该见名知义
- 变量名切忌拼音和英文混合,也切忌使用中文。变量名应该在使用单词或拼音的时候注意要么全为单词要么全为拼音。
- 变量名应该遵循小驼峰命名法。 首字母小写,如果有多个单词,后面的每个单词首字母大写!
- helloworld myname myinfo
- 采用:helloWorld myName myInfo
- 变量名可以采用下划线连接法。
- 采用:hello_world my_name my_info
- 变量名不允许使用关键字和保留字。
- 关键字:系统中有特殊含义的单词
- 保留字:以后可能在Java发展中会被赋予特殊含义的单词
Java中常量:
- 常量的名字中出现的字母必须全部大写
- 如果在常量名中出现了多个单词,以下划线连接。例如:MY_NAME
1.6 掌握数据类型转换(重点)
在Java中存在自动数据类型转换。
自动类型转换规则:
规则 1:如果一个操作数为 double 型,则整个表达式可提升为 double 型。
规则 2:满足自动类型转换的条件。
a.两种类型要兼容:数值类型(整型和浮点型)互相兼容
b.目标类型大于源类型: 例如:double 型大于 int 型
在同一类型下(数值类型),取值范围大的数据类型,可以存储取值范围小的数据类型值。(自动的)
double i = 10; // (自动类型转换)
System.out.println(i); // 输出结果为:10.0
在同一类型下(数值类型),取值范围小的数据类型,如果想存储取值范围大的数据类型值,需要强转。
强转会损失数据的精度。
int i= (int)10.6; // 强制类型转换
System.out.println(i); // 输出结果为:10 不会四舍五入
2. Scanner(扫描器)键盘输入(交互)
- 先导入Scanner (请过来干活)
//导入Scanner
import java.util.Scanner;
- 创建Scanner对象
//创建Scanner对象
Scanner input = new Scanner(System.in);
(System.in):键盘输入
- 使用Scanner来输入 整数、小数、字符串…
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
// 创建Scanner对象
Scanner input = new Scanner(System.in);
// 输入年龄
System.out.println("请输入您的年龄:");
// 使用Scanner方法 对象名.xxx就是调用方法
int age = input.nextInt(); // 因为有这一步 才能输入东西
// 显示年龄
System.out.println("输入的年龄为:"+age);
}
}
3. 常见的运算符
Java中为了更好的处理数据,提供了多种运算符号。
3.1 算术运算符
+
加法-
减法*
乘法/
除法%
取余数 (取模/求模) 例如:5 % 2 = 1; 5模于2等于1++
自增1--
自减1
int num1 = 5;
int num2 = 2;
// 计算商 两个数如果都是整数 那么结果一定是整数
System.out.println(num1+" / "+num2+" = "+(num1 / num2)); // 2
// 当其中出现了一个范围大的类型 那么最终的结果就采用此类型
double num1 = 5;
int num2 = 2;
System.out.println(num1 / num2); // 2.5
int num = 10;
/*num ++;
++ num;*/
// 输出语句也是一种使用变量的方式
// ++在后面表示先使用变量原来的值 然后再执行++效果
// System.out.println(num ++);
// ++在前面表示先执行++效果 然后再使用变量目前的值
System.out.println(++ num);
System.out.println(num);
int num = 1;
// 后++ 先赋值再自增
// 前++ 先自增然后赋值
// int result = 1 + 3
// int result = num + ++++num
int result = num++ + ++num;
System.out.println(result);
ps:num++ 可以理解为:num = num +1;
补充:++和- -与 char 相遇时的问题
public class Demo6 {
public static void main(String[] args) {
// char类型可以转换为int类型
// 注意事项:1.如果是字母 那么转换为int类型其实是在转换为对应的ASCII码
// 小写的a是97,大写的A是65
char alp1 = 'a';
char alp2 = 'A';
// 如果字母执行数值计算 那么它会自动转换为ASCII码然后执行相加等
System.out.println(alp1+1);// 98
System.out.println(alp2+1);// 66
// 2.如果执行自增或者自减 则是先将char类型转换为数值类型然后计算完之后 再将其转换为char类型
alp1 ++; // alp1 = alp1 + 1;
System.out.println(alp1); // b
}
}
3.2 赋值运算符
到了编程语言里面,=号不再是表示判断相等,而是表示赋值的意思。
=
赋值符号 将=右侧的内容赋值给=左侧的变量
int num = 10; // 将10赋值给了num
int num2 = num; // 将num的值赋值给num2
System.out.println(num2);
-
复合赋值运算符
+=
-=
*=
/=
%=
int num = 10;
num += 1; // num = num + 1 将num先进行运算然后再将运算结果赋值给num本身 等价于num++;
System.out.println(num); // 11
num /= 2; // num = num / 2
3.3 关系运算符
>
<
>=
<=
==
比较相等!=
不相等
关系运算符的结果就是布尔类型。true
false
3.4 逻辑运算符
&
与 并且&&
(短路与)|
或 或者||
(短路或)!
非 取反
// 需求:判断变量num是否大于5 小于 20呢?
int num = 2;
// 5 < num < 20
// true < 20
// System.out.println(5 < num < 20);
// System.out.println(5 < num & num < 20);
System.out.println(!(num < 5));
// 单个与和两个与在逻辑关系上 都表示并且的含义,指的是多个关系运算之间都必须是成立(满足)。
// 单个与,如果在执行逻辑运算时,前方的某个关系运算符没有成立(false),那么它后边的代码还会照常运算。
// 短语与,如果在执行逻辑运算时,前方的某个关系运算符没有成立,那么它后面的代码不会再执行,被短路了。
// 推荐用第二种,性能更佳,不用计算无用代码!
int num = 2;
// 5 < num < 20
// System.out.println(num > 5 & ++num < 20);
System.out.println(num > 5 && ++num < 20);
System.out.println(num);
3.5 三目(元)运算符
语法:条件(关系表达式) ? 表达式1 : 表达式2
// 创建对象
Scanner scan = new Scanner(System.in);
// 网吧 18岁才可以进入
System.out.print("请输入您的年龄:");
int age = scan.nextInt();
// System.out.println("我到底能不能去网吧?"+(age >= 18));
// 去 不去
String result = (age >= 18) ? "能去" : "不能去";
System.out.println("我到底能不能去网吧?"+result);
3.6 运算符优先级
()
优先级别最高
总结:只要想让谁先运行,就给其加小括号即可。