数据类型和运算符【Java】
1.关键字
- 在java语言中已经被赋予特定意义的一些单词。关键字不能被用作标识符。
特殊关键字: - java中有部分虽没有强调其是关键字,但也不许使用
Test.java不能使用,否则无法使用JUnit的Test
native 即 JNI,Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)
strictfp,即 strict float point (精确浮点)
transient当串行化某个对象时,如果该对象的某个变量是transient,那么这个变量不会被串行化进去。
volatile,多线程并发,变量可见
assert,断言是为了方便调试程序,并不是发布程序的组成部分。默认情况下,JVM是关闭断言的
2、标识符
在程序中自定义的一些名称,java中严格区分大小写。
标识符定义规则:
1)标识符必须以字母、下划线_、美元符号$开头。
但不能包含 @、%、空格等其它特殊字符【数字不可以开头、$通常都是内部类 、 _静态常量】
2)不可以使用关键字
3)标识符的命名最好能做到见名知意
3、注释
用于注解说明程序的
1)//:单行注释
【单行注释当中可以嵌套单行注释,多行注释】
2)/**/:多行注释
【多行注释当中可以嵌套单行注释,不可以嵌套多行注释】
3)/** */:文档注释
【可以借助javadoc提取出来生成网页文件】
4、常量与变量
4.1 变量的定义
- 变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
- Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。
- 变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。
变量的声明
变量类型 变量名 = 变量值;
注意事项:
- 变量名必须是一个有效的标识符
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名不可以使用java关键字
- 局部变量名不能重复
4.2变量的分类
从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。
局部变量(local variable) | 方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。 |
---|---|
成员变量(也叫实例变量 member variable) | 方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。 |
静态变量(类变量 static variable) | 使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值 |
4.3常量
常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。
在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。常量名习惯使用全大写字符
声明格式为:
final type varName = value;
为了更好的区分和表述,一般将1、2、3、’a’、’b’、true、false、”helloWorld”等称为字面常量,而使用final修饰的PI等称为符号常量。
基本数据类型: | 整数类型(byte,short , int, long) |
---|---|
浮点类型( float, double) | |
字符型(char) | |
布尔型( boolean) | |
引用数据类型 | 类(class) 、接口(interface)、数组( [] ) |
注意事项:引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
5、自动类型转换与强制类型转换
5.1 自动类型转换
- 自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。
- 自动类型转换(也叫隐式类型转换)
5.2 强制类型转换
- 强制类型转换,又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
- 强制类型转换(也叫显式类型转换)
- 语法格式:(type)var
- 运算符“()”中的type表示将值var想要转换成的目标数据类型。
- 不能在布尔类型和任何数值类型之间做强制类型转换
5.3 表达式的数据类型自动提升
- 所有的byte型、short型和char的值将被提升到int型。
- 如果一个操作数是long型,计算结果就是long型;
- 如果一个操作数是float型 ,计算结果就是float型;
- 如果一个操作数是double型,计算结果就是doube型
6、运算符
6.1常见运算符
- 算术运算符:+ 、-、 *、 / 、% 取余数,求模,算整除、++ (自增 ) 、- -(自减)
- 连接运算符:+ 字符串连接 “abc”+”xyz”=”abcxyz”
- 比较运算符【也称关系运算符】:==相等比较、!= 不等比较、大于’>’,大于等于’>=’,小于’<’,小于等于’<=’;运算完的结果必须是true或者false
6.2 逻辑运算符:
用于连接 两个boolean类型的表达式
-
&【逻辑与】:与 【&运算的两边只有有一个是false,结果肯定是false-只有两边都为true,结果才是true-】
-
|【逻辑或】 :或【|运算的两边只要有一个是true,结果肯定是true-只有两边都为false。结果是false.】
-
^【逻辑异或】:异或【 ^符号的两边结果如果相同,结果是false.两边的结果不同,结果是true.】
- 一个数异或同一个数两次,结果还是这个数。
-
!【逻辑非】:非运算,判断事物的另一面
-
&&【短路与】:【和&运算的结果是—样的。但是运算过程有点小区别。】
-
&与&&区别:
&:无论左边的运算结果是什么,右边都参与运算。& & :当左边为false时,右边不参与运算的。
-
||【短路或】:【和 | 运算的结果是—样的。但是运算过程有点小区别。】
-
|与||区别:
-
|:无论左边的运算结果是什么,右边都参与运算。
-
|| :当左边为true时,右边不参与运算的。
6.3 位运算符
- 左移几位其实就是该数据乘以2的几次方。
- <<:可以完成2的次幂运算
- 右移几位,其实就是该数据除以2的几次幂。
- >>:对于高位出现的空位,原来高位是什么就用什么补这个空位。
- 无符号右:>>>:无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
注意事项逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)
6.4 三目运算符
- 格式:布尔表达式 ? 第一个值 : 第二个值
- 返回值:当布尔表达式结果为true,返回第一个值;当布尔表达式结果为false,返回第二个值
6.5简单的键盘输入和输出
1、获取用户输入的内容
想要利用Scanner需要如下三步
1.在类上面的第一行import java.util.Scanner;
2.需要输入之前Scanner y = new Scanner(System.in);//对象
3.通过y.让他来做事int = nextInt();String = nextLine();都可以读取输入的信息
eg:1.通过输入一个月份,识别季节
import java.util.Scanner;
public class SeasonDemo {
public static void main(String[] args) {
//1.创建一个month变量用来存储一个月份值(Scanner)
Scanner input = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month = input.nextInt();//帮我们读取输入的数字,input.nextLine()读取字符串
//2.通过month存储的僖进行季节的剃断
if(month>12||month<1){
System.out.println("输入的数据不合法");
}else if(month>=3&&month<=5) {
System.out.println("春天");
}else if(month>=6 && month<=8) {
System.out.println("夏天");
}else if(month>=9 && month<=11) {
System.out.println("秋天");
}else{
System.out.println("冬天");
}
}
}
3.扩展
利用if实现一个随机摇骰子的小游戏
随机摇一个骰子点数1-6 123 456
玩家利用Scanner输入猜大小
利用if比较猜对啦猜错啦 Math.random();
import java.util.Scanner;
public class DiceGame {
public static void main(String[] args) {
//1.随机摇骰子的过程随机产生一个骰子点数1-6整数
double value = Math.random();
int number=(int)(value*6+1);
//2.让玩家猜测大小 大小
Scanner input = new Scanner(System.in);
System.out.println("买大买小,买定离手");
String choose = input.nextLine();//帮我们读取输入的文字
//3.比较点数与猜测结果
System.out.println("本次摇出的点数为:"+number);
if((number<=3&&choose.equals("小"))||
(number>=3)&&choose.equals("大")) {
System.out.println("恭喜你,猜对了");
}else {
System.out.println("对不起,猜错了");
}
}
}