3.23 JavaSE变量的类型和转化
注释
注释:解释说明的文字,且注释不会被编译
重要性:代码中必须存在的,必有的内容,可以大大提高程序可读性
注释分类:单行注释、多行注释、文档注释
三种注释都可以嵌套单行注释,都不可以嵌套多行注释和文档注释
多行注释和文档注释的区别:
1.文档注释在使用工具时,在方法的上面会提供方法参数的注释
2.文档注释的内容可以保留在对类生成的API文档中,API文档是一种说明文档
关于编译的一些知识
1、只要是公共类,类名就要和.java文件名完全一样
2、通过javac编译的时候,class文件以类名为单位,意味着.java文件中每有一个类,编译后就会有一个对应 的.class文件
3、一个Java文件可以定义多个类,但是类名不能相同
4、Java命令解释执行:java类名 java命令后面自动匹配class文件,所以可以省略名,因为class文件是以类名为 单位的
5、一个类中不能出现多个主方法
关键字和保留字
关键字:Java关键字是Java语言保留供内部使用的特殊单词,关键字会变色且关键字必 须全部小写
保留字:Java语言保留供内部使用的特殊单词,但现在还没有被使用(goto、const)
注意:关键字和保留字都不能被使用
标识符
标识符:就是给类、接口、方法、变量等起名字的字符序列,一切起名字的地方的这 个名字就是标识符
标识符的命名规则:只能有字母、数字、下划线、美元符号任意组合而成,且不能是 数字开头,严格区分大小写。关键字和保留字不能作为关键字。命名规则必须遵守, 不遵守就会犯错
标识符的命名规范:应当遵守,但不遵守不会报错
1、见名知意
2、驼峰命名原则:包(文件夹)全部小写,层级之间用 . 连接,类名|接口名每个单词抽字母大写,方法名|变 量名第一个单词全部小写,第二个单词首字母大写,常量名全部大写,每个单词之间用_连 接
变量
变量:可变的量,相当于造盒子,指的是一个块空间,作用就是为了存储数据。空间 是变量,空间中的数据是变量值,空间名是变量名
注意:变量可以赋值为一个数据值,可以赋值为一个表达式,但是都是最终得到一个结果数据才能赋值给变量!
定义变量:分为两种方式:
声明的同时直接赋值:数据类型 变量名 = 赋值;
先声明后赋值:数据类型 变量名;
变量名 = 赋值;
变量的作用域:从变量的声明开始,到包含它离它最近的}结束,一个{}自成一个作用 域
注意:在同一作用域范围内,变量名不能重复,变量的值一旦修改不可恢复
变量分类:变量分为局部变量和成员变量
局部变量:在方法|语句块中定义的变量就为局部变量,在使用之前必须已经声明且赋值,在Java 中局部变量没有默认值
成员变量:定义在类中方法外,成员变量有默认值:int 0;字符 ‘’;double 0.0;字符串 null; 布尔 false
数据类型:四类八种
基本数据类型
整形:byte 字节型 8位 [-128,127] short 短整型 16位 [-32768,+32767]
int 整形 32位 ±21亿 long 长整型 最大
注意:在java种整数的字面常量值默认为 int 类型 需要在long类型的数字后加l|L
浮点型:float 单精度 小数点后7位 double 双精度 小数点后15位
浮点类型运算可能不精确
字符型:char 字符型 通过 ’ '包含的有且仅有一个的字符或0~65535之间的整数(来自unicode)
布尔型:boolean true|false
引用数据类型:类、接口、数组
数据类型的转换
自动类型提升
从小->大
强制类型转换
从大->小
小范围类型 变量名 = (小范围类型)大范围类型数据;
注意:
常数默认为int型,小数默认为double
=是自右向左运算的符号
如果运算时,存在多种类型的数据参与运算,最终的结果类型提升为参与运算中最大的类型,如果最大类型<int类型,结果自动提升成为int
char类型参与运算,先转为十进制的整数,再运算
byte ->short -> char -> int ->long -> float ->double
/*
float的表示范围比int大的原因:float和int都是固定长度的,4字节(32位机子)
int是精确的,超出范围就溢出了。数据错误了。
而float并不是单纯的101010这样存储,是把4个字节划分为
符号位,指数位,尾数位 比如1.123123*10^35;
3个部分固定的,因为有指数,存储的范围当然比int大了
IEEE754(https://blog.csdn.net/C2681595858/article/details/84865920)
晚上自己写一下float在IEEE754中的规则
*/
public class DataType{
public static void main(String[] args){
//自动类型提升
byte b = 100;
short s = b;
System.out.println("自动类型提升" + b);
//强制类型转换
int i = (int)100L;
System.out.println("强制类型转换" + i);
//在常量后加f可以让Java将其识别为float型
//小数常量默认为double型,需要强制转型为double
float f = 1.5f;
System.out.println("float型" + f);
float f2 = (float)1.5;
System.out.println("强制转double型" + f2);
//取整
int i2 = (int)f;
System.out.println("取整" + i2);
//先运算,再强转,最后再赋值
/*如果运算时存在多种类型的数据参与运算,最终的结果类型提升为参与运算中最大的类型,如果最大类型小于
int型,会将其自动提升至int型
*/
short s3 = (short)(b+s);
//char
char ch = 'a';
System.out.println("输出字符" + ch); //这时输出的是 a
//char类型参与运算,先转为十进制的整数(数值参考unicode),再运算
System.out.println("输出char字符a+1的运算结果" + (ch+1));
//char+int = int = 98 ,ch2为字符类型,值为98的字符为b,所以输出b
char ch2 = 'a'+1;
System.out.println(ch2);
//强转
//ch+1运算要将ch化为十进制数-->a+1 = 97+1 = 98,因为1是int型,char+int = int型,所以需要强制转型
char ch3 =(char)(ch+1);
System.out.println(ch3);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APiZjxjs-1616506195671)(C:\Users\m1827\AppData\Roaming\Typora\typora-user-images\image-20210323201918265.png)]
疑问:为什么float和int都用32位表示为什么float表示的范围比int大?
答案:由于float型在计算机中使用IEEE754规则机算的,在此规则下,32位的float被分为三部分:1位符号位,8位指数位,23位尾数位,由于8位指数位的原因,指数的取值范围为-128到127,远远大于int的2^32。关于补码,移码,原码,反码还要多多复习,好久不看就忘了
随机数:利用Java提供的Math数学类生成随机数
1、Math.random()会生成[0.0,1.0)之间的随机double型小数
2、生成整数[min,max]之间的随机数的公式为:
min,max(Math.random()*(max-min+1)+min)