第二课 变量,数据类型和运算符
一.目标
1.了解变量的定义和使用;
2.了解常量的定义和使用;
3.掌握各种数据类型的定义和适用范围;
4.掌握如何用键盘输入;
5.掌握运算符的含义和使用;
6.会解决遇到的问题。
1.变量和常量
1.1 变量的概述
**1.1.1 变量:**顾名思义即可以变化的量,是指可在程序中无数次可定义的量。
1.1.2 变量的组成
- 数据类型(根据你要存储的内容 合理的分配一个内存空间)
- 变量名(给变量一个名字,如果没有变量名 那么使用这个变量时则需要该变量的内存地址 如:0x1231b12这样会很麻烦。)
- 变量值(在内存中要存储的数据)
- 变量的使用
public class Demo1 {
public static void main(String[] args) {
// 两种方式使用
// 【1.先声明再赋值】
// 存储名字
// 数据类型 变量名; 声明一个变量(开辟一块内存空间)
String name;
// 赋值 向对应的变量的内存空间进行存储数据
// 变量名 = 变量值;
//“ = ”它不再是数学中的等于,现在表示的是赋值符号
// 将小李这个值(变量内容)赋给name这个变量
name = "小李";
// 【2.声明的同时并赋值】
// 数据类型 变量名 = 变量值;
String stuName = "小飞";
}
}
1.1.3 了解变量和常量的命名规范
**Java中的变量名的组成:**数字、字母、$和_都可以作为变量名的组成内容,数字不能开头。
- 变量名应该见名知义 例如: abc 不如 name表示含义清楚
- 变量名切忌拼音和英文混合,也切忌使用中文。变量名应该在使用单词或拼音的时候注意要么全为单词要么全为拼音。
- 变量名应该遵循小驼峰命名法。 首字母小写,如果有多个单词,后面的每个单词首字母大写!
- helloworld myname myinfo
- 采用:helloWorld myName myInfo (常用)
- 变量名可以采用下划线连接法。(可以都是小写 , 不常用 )
- 采用:hello_world my_name my_info
- 变量名不允许使用关键字和保留字。
- 关键字:系统中有特殊含义的单词
- 保留字:以后可能在Java发展中会被赋予特殊含义的单词
public class Demo4 {
public static void main(String[] args) {
String name;
name = "小王";
int age = 22;
// 转义字符
// \n表示换行
// \t表示一个制表位Tab
// 输出完会换行 ln line行
// System.out.println("我的姓名是:"+name+"\n我的年龄:"+age);
// 输出完不换行
System.out.print("我的姓名:"+name);
System.out.print("我的年龄:"+age);
}
}
1.2 常量的概述
1.2.1常量**:表示只可以赋值一次的变量 被final修饰
public class Demo2 {
public static void main(String[] args) {
// 需求:计算圆的面积 π*r*r
// 存储π
// 常量:表示只可以赋值一次的变量 被final修饰
final double PI = 3.14;
// 存储半径
double r = 3;
// PI = 3.24;
// 计算面积
double area = PI * r * r;
System.out.println("圆的面积为:"+area);
}
}
1.2.2 Java中常量规范:**
- 常量的名字中出现的字母必须全部大写
- 如果在常量名中出现了多个单词,以下划线连接。例如:MY_NAME
1.3 掌握Java中的数据类型
Java中为了合理的使用内存,将不同的数据,划分成了不同的类型。
8种类型(【基本数据类型】):
数值类型:
-
byte:字节型(8位)
-
short:短整型(16位)
-
int:整数型(32位) Java中默认的整数的类型
-
long:长整型(64位)
浮点型: 1.2 2.13 3.1415926927…
-
float:(单精度、32位)浮点型
-
double:(双精度、64位)浮点型 Java中默认的浮点数的类型
非数值类型:
-
char:字符型 (16位 Unicode字符) 存储单个字符用,以单引号引起来。例如:
'a'
'我'
'1'
'男'
-
boolean:布尔型 只能存储两个值,一个为
true
正确(真),一个是false
错误(假) ,存储一些判断结果比较适合【引用数据类型:】
-
String:字符串型 最常用的类型,以双引号引起来的。 例如:
"a"
"呵呵"
public class Demo2 { public static void main(String[] args) { // 存储小王的真实姓名 // 先声明 String name; // 再赋值 name = "小王"; // 存储小王的年龄 // 声明的同时并赋值 int nianLing = 22; // 存储小王的暗恋对象 // 声明的同时并赋值 String anLianDeDuiXiang = "李奕奕"; // 存储小王爱玩的游戏 String game = "LOL cfgo"; // 存储小王的性别 char gender; gender = '男'; // male female /*char gender; gender = 'm';*/ // 1男性 2女性 // int gender = 1; // 存储小王是否有对象 boolean hasCP = true; // 存储小王的银行卡余额 double money = 2.21; // 注意:float long // Java中默认整数就是int 小数就是double // 在数字后写大写F或小写的f float f = 10.1F; // 在数字后写【大写的L】或小写的l long lo = 10L; } }
1.4 掌握数据类型转换(难点)
在Java中存在自动数据类型转换。
1.4.1 自动转换
在同一类型下(数值类型),取值范围大的数据类型,可以存储取值范围小的数据类型值。(自动的)
double money = 10; // (自动类型转换)
System.out.println(money); // 10.0
1.4.2 强制转换
在同一类型下(数值类型),取值范围小的数据类型,如果想存储取值范围大的数据类型值,需要强转,但强转会损失数据的精度。
int money = (int)10.6; // 强制类型转换
System.out.println(money); // 10 不会四舍五入
2. 掌握Scanner(扫描器)键盘输入(交互)
2.1 具体步骤
-
先导入Scanner
// 导入Scanner import java.util.Scanner;
-
创建Scanner对象
// 创建Scanner对象 Scanner input = new Scanner(System.in);
-
使用Scanner来输入 整数、小数、字符串…
// 将输入的内容存储到变量中 System.out.print("请输入您的姓名:"); // 字符串 String name = input.next(); System.out.print("请输入您的年龄:"); // 整数 int age = input.nextInt(); System.out.print("请输入您的余额:"); // 小数 double money = input.nextDouble();
4.注意scanner中不能定义char字符型应用String代替。
3. 掌握常见的运算符
Java中为了更好的处理数据,提供了多种运算符号,包括算数运算符,复合赋值运算符,关系运算符,逻辑运算符,三目运算符。
3.1 算术运算符
+
加法-
减法*
乘法/
除法%
取余数 (取模/求模) 如:8 % 3= 2; 8模于3等于2++
自增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;//可以被理解为使用的左边的num(1)的值,右边(由于左边的num已经自增变为2再执行++num会成为3)num为3所以结果为4.
System.out.println(result);
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
int num1 = 11;
int num2 = 12;
// System.out.println(num1 > num2);
System.out.println(num1 != num2);
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 运算符优先级
()
优先级别最高
单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
4. 常见问题
4.1 Scanner创建了n个对象
import java.util.Scanner;
public class Test{
public static void main(String[] args){
// 创建对象
Scanner input1 = new Scanner(System.in);
Scanner input2 = new Scanner(System.in);
// ...
System.out.println("请输入xxx:");
int xx = input1.nextInt();
System.out.println("请输入xxx:");
int xx = input2.nextInt();
}
}
4.2 自行编造Scanner的nextXXX()系列方法
nextChar()
nextLong()
4.3 高估控制台(Console):它仅仅是前期练习语法 后期调试程序时使用
System.out.print("请输入姓名:");
System.out.println("请输入年龄:");
next();
nextInt();
请输入姓名: 请输入年龄:(用上面代码不能实现姓名和年龄同时实现的目标)
4.4 被Eclipse的控制台Bug坑了
控制台(要主动单击将光标放在运行的程序上)
4.5 在输入的时候可能会见到控制台 一片红(异常Exception)
InputMismatchException,因为你还没输完代码。