本章涉及P35->61
写于 2024.7.9
类型
String name=" ";
char n='';
使用细节
不同的数据类型所占空间不同,int—4字节,double—8字节。
该区域的值/数据可以在同一类型范围内不断变化。
变量在同一个作用域不可以重名。
加号的使用
左右两边都是数值型,做加法运算。
左右有一方为字符串,做拼接运算。
System.out.println("100"+98);
此时为左边字符串,右边数值,做拼接运算。
运算顺序从左到右。
数据类型
1、Java是强类型语言,每种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。
基本数据类型
整数类型,存放byte,short,int,long[8字节]
byte:1字节,-128—127。
类推,2字节,正负2的15次方(编码方法)
浮点类型,float[4],double[8]
字符型,char[2]
布尔类型,boolean[1]
引用数据类型
类(比如String)
接口interface
数组
整型使用细节
1、Java各整数类型的字段长度不受具体OS的影响。
2、整型常量(具体值)默认为int型,如声明long型常量:
int n1 = 1l;
int n2 = 1L;
以上均是错误写法,long8字节,int4字节。
long n3 = 1L;正确
尽量常使用int。
3、bit是计算机最小存储单位,1byte = 8bit。
浮点类型使用细节
1、浮点数在机器中存放形式:符号位+指数位+尾数位。
2、尾数部分可能丢失造成精度损失,只表现为近似值。
3、Java默认浮点为double,使用float应该后面加f或F。
几种正确使用方法如下:
double num1 = 1.1;
double num2 = 1.1f;正确,因为double比float字节数大
float num3 = 1.1f;
float num4 = 1.1F;
double num5 = .123; 相当于0.123,小数点不可以省略。
科学计数法:
5.12e2;
5.12E-2;
以上两项均是保存小数点的小数类型。
4、通常情况使用double,因为比float更加精确。
5、浮点数使用陷阱:2.7与8.1 / 3比较。
2.7是一个准确的小数,而8.1 / 3是一个接近2.7的小数,可能是2.699999。
因为小数是以精度的方式计算的。
启示:当我们对运算结果是小数的进行相等判断时需要小心。应该以两个数的差值的绝对值,在某个精度范围类判断。
两个赋值2.7的值直接判相等是能通过的,两者在下列代码的函数中计算差值结果为0。(原因与上面说的2.7是一个准确的小数,而8.1 / 3是一个接近2.7的小数,可能是2.699999。因为小数是以精度的方式计算的。有关)
正确写法:
if(Math.abs(num1-num2) < 0.00001){
//两数相等
上面函数返回一个差值
}
6、ctrl + \,对选中的多行进行注释添加或取消的快捷键。
Java API 文档
JDK8中文版在线网址:https://www.matools.com。
查找顺序:包->类->方法,或直接用索引。
字符类型
1、占两个字节,可以存汉字。也可以存一个转义字符(\t)。
字符常量用两个单引号引起来。
char c1 = 'a';
char c2 = '\t';
char c3 = '汉';
char c4 = 97;<-字符类型可以直接存一个数字。
存放数字时,输出c4会输出97表示的字母,ASCII码。
System.out.println((int)c1);->可以输出该字符的码。
2、如上所示,字符类型的本质是整数。
3、如2所示,char类型可以参与运算。如:
System.out.println('a' + 10);
ASCII码
占一个字节,可以表示256个字符,实际只用了128个字符。
最前面一位统一为0.
unicode码兼容ASCII码。
utf-8
是互联网上使用最广的一种Unicode的实现方式。
是一种变长的编码方式。
boolean类型
占1个字节。
与C不同:不可以用0或非0的整数代替false, true。
基本数据类型的转换
自动类型转换
精度小的类型可以自动转换成精度大的类型。
例如,可以把一个字符赋给一个int类型。
重要结论!没事儿多看看!:
7、赋值给byte的时候,要确认数字范围在-128到127之间,比如把1000赋值给byte就会报错。
上述中第一条举例说明如下:
第一条:
double n1 = 10;
float ans = n1 + 1.1;
这种情况会报错。
第四条:
byte b1 = 2;
short b2 = 3;
short a1 = b1 + b2;错误!
int a2 = b1 + b2;正确!
强制类型转换
可以将容量大的数据类型转为容量小的。
int i = (int)1.9;
此时 i 的值为1.
隐患:
1、精度损失。
2、数据溢出。(如2000强制赋值给byte类型得到-48)
使用细节:
1、char类型可以保存int常量值,不可保存变量值,需要强制转换。
char c1 = 100; ok
int m = 100;
char c2 = m; wrong
char c3 = (char)m; ok
2、byte和short,char类型在进行运算时,当作int类型处理。
类型转换练习
short s = 12;
s = s - 9; wrong,应赋值给int型
byte b = 10;
b = (byte)(b + 11); ok
基本数据类型和String类型的转换
基本数据类型->字符串
float f = 1f;
boolean b = true;
String s1 = f + "";
String s2 = b + "";
字符串->基本数据类型
Integer.parseInt("123");
Double.parseDouble("123.1");
Float.parseFloat("1.45");
Short.parseShort("12");
Long.parseLong("1");
Boolean.parseBoolean("true");
Byte.parseByte("12");
//具体使用
String tmp = "123.5";
double ans = Double.parseDouble(tmp);
//字符串到字符的转换
System.out.println(tmp.charAt(0));//取第一个字符
使用细节:
抛出异常是在程序运行的时候,而非程序编译的时候。
java temp的时候,不是javac temp.java的时候
本章练习(部分)
char c;
c = '\n';
System.out.println(c);
c = '\t';
System.out.println(c);
c = '\r';
System.out.println(c);
c = '\\';
System.out.println(c);
c = '1';
System.out.println(c);
String s1,s2;
s1 = "书1";
s2 = "书2";
System.out.println(s1 + s2);
//此题考加号的用法:加号两侧如果有至少一个字符串,则加号作用为字符串拼接
System.out.println("姓名"+"\t\t"+"年龄"+'\t'+"成绩"+'\t'+"性别");
System.out.println("xx"+"\t\t"+"xx"+'\t'+"xx"+'\t'+"xx");