Chapter2
此文为笔者个人笔记,如有错误还请指出
变量
变量三要素:类型+名称+值例如int a=1
变量表示内存中的一个存储区域,需要先声明再使用
变量在同一作用域不能重名
不同数据类型占用字节大小:(1个字节8bit)
- int 4个字节 -231~231-1(-2147483648~2147483647)
- double 8个
- float 4
- byte 1 -128~127
- short 2 -215~215-1
- long 8 -263~263-1
- char 2
- boolean 1
程序中加号+的使用
给出如下代码:
public class useAdd(){
public static void main(String[] args){
System.out.println(100+98);
System.out.println("100"+98);
System.out.println(100+3+"hello");
System.out.println("hello"+955+699);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yxVgH4Lc-1664367743717)(D:\Typora\typora-user-images\image-20220920201818286.png)]
可以看到,均能与字符串拼接,运算顺序从左到右
数据类型
java是强类型语言,必须指定类型且要根据类型分配空间
基本数据类型:byte boolean char short int float double long
引用数据类型:class interface 数组[]等,后面会详细介绍
整数类型
byte short int long
无论在什么操作系统下占用存储空间均相同(保证了可移植性)
Java默认整数常量为int类型,声明long类型需要在末尾加"L"或者"l"
浮点类型
Java的浮点常量默认为double类型,如果要声明float变量,需要后面加"f"或者"F"
我们一般用精度更高的double
public class FloatDetail{
public static void main(String[] args){
float num1 = 1.1f; //正确的
float num2 = 2.7; //错误的,加f
double num3 = 3.0f; //正确的
double num4 = 8.1; //正确的
double num5 = .123;//表示0.123
double num6 = 5.12e-2; //5.12*10^-2
System.out.println(num6);//0.0512
System.out.println(num2==num4/num3);//输出false
System.out.println(num2);//2.7
System.out.println(num4/num3);//2.6999999999999997
}
}
最后输出false (算不准)当我们使用小数判断是一定要小心 一般用两个浮点数的差值的绝对值在某个精度范围计算(之前C++栽过跟头)
字符类型
char 本质为整数,在输出时,是unicode码对应的字符,要输出字符对应编码,可以(int)进行强制类型转换
几种字符编码表:
- ASCII编码表由一个字节表示,一共一个128个字符
- Unicode编码表是固定大小的编码,用两个字节来表示字符,字母与汉字均占用两个字节的空间,较浪费空间
- utf-8编码表,大小可变的编码,范围广,字母一个字节,汉字三个字节
- gbk可以表示汉字,范围广,字母一个字节,汉字两个字节
- gb2312可以表示汉字,但gb2312<gbk
布尔类型
占用一个字节,一般用于流程控制
基本数据类型的转换
自动类型转换:变量在进行赋值或者运算时,精度小的类会自动转换为精度大的类。
规则:
- char->int->int->long->float->double
- byte->short->int
- 有多种类型数据混合运算时,先将它们都转换为容量最大的数据再进行计算
- byter short char之间不自动转换,相互之间可以进行运算,但是会转换为int类型
- boolean不参与转换
注意一个易错点:
public class AutoConvert{
public static void main(String[] args){
byte b1 = 10;
byte b2 = 14;
byte b3 = b1 + b2;//不可以的,byte short char之间进行运算后都会转化为int
boolean ber = true;
int num = ber;//错误的,boolean不参与转换
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nL2OPA8Y-1664367743718)(D:\Typora\typora-user-images\image-20220921183801944.png)]
强制类型转换
可以将大的数据类型转换为容量小的数据类型,会导致数据精度损失
示例
public class ForceConvert{
public static void main(String[] args){
int a = 1000;
byte b = (byte)a;
System.out.println(b);//输出-24(数据溢出)
}
}
注意:只对最近的操作数有效:比如说 int a = (int)10 * 3.5;只能使得10为int类型,但是int a = (int)(10 * 3.5);可以
数据类型转换练习题
public class ConvertTest{
public static void main(String[] args){
short s = 12;
s = s-9;//能过编译吧
byte b = 10;
b = b + 11;//y
b = (byte)(b+11);//y
char c = 'a';
int i = 16;
float d = .314f;
double result = c+i+d;
byte = 16;
short s = 14;
short t = s+b;//x
}
}
基本数据类型和字符串间的转换
基本数据类型->String 数据+""就能转换…之前都不知道
String->基本数据类型 需要用到包装类
用包装类调用parsexxx方法
代码示例如下
字符串转换成字符的含义是取到字符串的第一个字符(important)
public class ConvertToString{
public static void main(String[] args){
int n1 = 100;
float f1 = 10.45f;
boolean b1 = true;
String s1 = n1+"";
String s2 = f1+"";
String s3 = b1+"";
System.out.println("s1:"+" "+s1);
System.out.println("s2:"+" "+s2);
System.out.println("s3:"+" "+s3);
int num = Integer.parseInt(s1);
boolean b = Boolean.parseBoolean(s3);
String s5 = "hello";
System.out.println(s5.charAt(1));//e
}
}
一些细节
String s1 = "hello";
int a = Integer.paeseInt(s1);//这里编译不会报错,运行会抛出异常,不要写这样的代码
Java API文档
Java8中文API文档:Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)
API结构
Java8
包1,2,3…
接口
异常
类
- 字段
- 构造器
- 成员方法