一、java是一门强类型语言
1、所有变量必须先声明后使用。
2、指定类型变量只能接受类型与之匹配的值。
3、整型、字符型、浮点型所有数值类型之间都可以进行自动转换
二、 标识符规则(Java语言是区分大小写的)
Java语言的标识符必须以字母、下划线、美元符¥开头,后面可以跟任意数目的字母、数字、下划线和美元符。
(1)标识符可以由字母、数字、下划线和美元符组成,其中数字不能打头。
(2)标识符不能是Java关键字和保留字,但可以包含关键字和保留字
(3)标识符不能包含空格
(4)标识符只能包含美元符,不能包含@、#等其他字符
注意: 字母不局限于英文字母,可以包含Unicode字符集支持的字符,比如中文、韩文等
三、数据类型分类
1、不管是哪种变量,定义变量至少需要指定变量类型和变量名两个部分。
2、基本数据类型分类
基本数据类型包含基本类型和引用类型
https://blog.csdn.net/lamp113/article/details/79178842
基本类型
(1)整型:
byte
(1个字节,内存占8位,表数范围:-2的7次方—2的7次方-1)
short
(2个字节,内存占16位,表数范围:-2的15次方—2的15次方-1)
int
(4个字节,内存占32位,表数范围:-2的31次方—2的31次方-1)
long
(8个字节,内存占64位,表数范围:-2的63次方—2的63次方-1)
(2)字符型:char(2个字节)
(3)浮点类型:float(4个字节),double(8个字节)
(4)布尔类型:boolean
注意:
(1)1个字节8位,2的8次方个字符。
(2)直接给出一个整数值默认类型就是int类型。
(3)如果将一个较小的整数值(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数值当成byte或者short类型来处理。
(4)如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增加英文字母l或者L作为后缀。通常推荐使用L,因为因为字母l和数字1很容易搞混
下面的例子很重要
byte a=56;
//这个代码是正确的,系统会自动把56当成byte类型来处理
long bigValue=99999999999999999999;
//这个代码是错误的,因为超出了int表示的范围
long bigValue=999999999999999999999L;
//这个代码是正确的,强制使用long类型
int i=1;
byte j=i;
//这个代码是错误的,因为表数范围大的变量不可赋值给表数范围小的变量;
与前面的 byte a=56;形成了对比;
引用类型
(1)类(注意:字符串是一个类)
(2)接口
(3)数组
注意:字符串是一个类String
(1)如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串进行连接。
System.out.println(3.5f+"");
//将输出3.5;
System.out.println(3+4+"Hello");
//将输出7Hello//因为3+4先做运算,之后将其看做字符串;
System.out.println("Hello"+3+4);
//将输出Hello34//因为先将3看成字符串,之后再将4看成字符串;
(2)如果一个字符串中包含了单引号、双引号、反斜线,一定要注意应当使用转义字符的表示形式
(3)String类不能直接赋给其它任何值
Java中整数值的4种表示方式
(1)二进制整数:0B或者0b开头
(2)八进制整数:0开头
(3)十六进制整数:0x或0X开头
其中0——15分别以a——f(其中a——f不区分大小写)表示
(4)十进制整数:直接写即可
字符型三种表示方法
(1)直接通过单个字符来指定字符型数值,例如‘A’、‘9’、‘0’等
(2)通过转义字符表示特殊字符型值,例如‘\n’、‘\t’等
(3)直接使用Unicode值来表示字符型值,格式是‘\uXXXX’,其中XXXX代表一个十六进制的整数。
注意:
(1)char类型的变量、值也可以直接作为整形值来使用,它相当于一个16位无符号整数
(2)java没有提供字符串的基本数据类型,而是通过String类来表示字符串,由于字符串由多个字符组成,因此字符串要使用双引号括起来。
如果一个字符串中包含了单引号、双引号、反斜线,一定要注意应当使用转义字符的表示形式
例如:
“c:\codes”得不到期望的结果,因为java会把反斜线当成转义字符,所以应该写成“c:\\codes”
String s="沧海月明珠有泪";
//引用类型的变量;
(3)char类型必须使用单引号括起来,字符串必须使用双引号括起来。
浮点类型
(1)float(4字节,32位,单精度),double(8字节,64位,双精度)
(2)有固定的表数范围和字段长度,字段长度、表数范围都与机器无关,由jvm分配,这样实现了跨平台。
(3)浮点数用二进制数据和科学计数法表示浮点数。浮点数必包含一个小数点否则会被当成int类型数据处理,只有浮点类型的数值才可以使用科学计数法形式表示。
例如:3.14、314.0
5e—3F:5乘10的-3次方,F表示是浮点类型
(4)Java语言的浮点类型默认是double类型,若声明一个float型,需要在数字后面加上f或F。
——double a=12.3; float f=12.3f;
(5)Java中无法精确表示部分实数。
由于Java浮点数使用二进制数据的科学计数法表示浮点数,因此可能不能精确表示一个浮点数。
double u=0.9-0.3;
那么输出u的时候,值为0.60000001;
布尔类型 boolean
(1)取值:true和false
只能取true和false,不能用0或非0整数来代替。
不能与其它基本数据类型的值互相转换。
四、基本数据类型之间的转换
(一)自动类型转换
下图中有一个错误,byte可以自动转为short
(1)可以把一个int型变量转换为long等表数范围大的变量;
(2)浮点类型float表数的范围比整型long表示的要大(虽然long类型8个字节,float为4个字节),因为float类型可以用科学技术法。
因此表数范围与字节不是正比关系。
例如:
(1) float f=1.0f; √ double d=f;√
float f=1.0;×(因为默认是double类型,大的不能给小的)
(二)强制类型转换
(1)强制类型转换的时候要加强制类型转换符
例如:
double pi=3.1415926;
int p=(int)pi;
(2)把一个浮点数强制类型转换为整数时,Java将直接截断浮点数的小数部分。
(三)注意
(1)例题
例如1:
char a='a';b='b';
char c=a+b;
这个编译时错误的;因为在前面注意的第二点中,byte、short、char互相之间不转换,用时全部自动转换成int类型。即使是只有chat或者short或者byte,也是在用的时候自动转换成int类型。
因此在用a+b的时候,就已经自动转换成int类型,表数范围大的不能赋值给表数范围小的,因此这段代码是错误的。
改成下面才是对的:
char a='a';b='b';
char c=(char)(a+b);
例如2:
short i=3;
i=i-1;
这段编译的时候回出错,因为原来是short,但是在用的时候变成了int,int类型不能赋值给short类型的。
改成下面的才是对的
short i=3;
i=(short)(i-1);
(2)字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现吧字符串转换成基本类型。例如,吧字符串转换成int类型,则可通过如下代码实现。
String a="45";
//使用Integer方法将一个字符串转换成int类型;
int iValue=Integer.parseInt(a);
Java为8中基本类型提供了对应的包装类:boolean对应Boolean、byte对应Byte、short对应Short、long对应Long、char对应Character、float对应Float、double对应Double,八个包装类都提供了一个parseXxx(String str)静态方法用于将字符串转换成基本类型。
(四)综上讲解给出例题
第一个转化为double型运算,是因为混合运算均转化为表数范围大的类型。
float f=1.0;错误,因为1.0为double类型的,需要进行强制类型转换才可以;
五、运算符
(1)
(1)整数/整数=整数,如果将这个整数赋值给一个float类型的变量的话,结果仅仅是整数.0;但是整数/小数 或者 小数/整数 的话,结果会保留小数位的数;
(2)如果除法运算符的两个操作数都是整数类型,则除数不可以是0,否则将引发除以零异常。例如 5/0错误
(3)如果除法运算符的两个操作数中有一个是浮点数,或者两个都是浮点数,则允许除数是0或者0.0,得到的结果是正无穷大或负无穷大。
(4)求余运算两个操作数都是整数类型,则求余运算的第二个操作数不能是0,否则将引发除0异常。例如 5%0错误
(5)如果求余运算的两个两个操作数中有一个是浮点数,或者两个都是浮点数,则允许余数是0或者0.0,只是求余运算结果是非数:NaN。
例如:5.0%0=NaN;5%0=NaN
(6)0或0.0对0以外的任何数求余都将得到0或0.0。
例如:0%5.0=0.0;
下面的例子中,会输出a=1,确实是只要+号两边有一个是字符串类型的话,另外一个不管是什么类型都会变成字符串类型的,所以1自动变成“1”,所以输出的是a=1;
(2)
与C语言中的用法是相同的,++i是先执行加一后使用,i++是先使用后执行加一;
(3)
注意+=比+要厉害的多,可以进行强制类型转换。因此:
a+=5等价于a=(byte)(a+5);
(4)
打印出来的是TRUE;
(5)
&&短路逻辑与,短路也就是因为前面i>3是错误的,之后的i++就不再进行比较和运算了。
&不短路与,不短路就是因为前面i>3是错误的,之后的i++还进行比较和运算。
||短路或,短路也就是因为,如果能判出条件的话,后面的不再执行了。
|不短路或,不短路就是因为,即使前面可以判出条件,后面的仍然执行。
(6)
按位与:1与1=1;1与0=0;0与1=0;0与0=0;
按位或:1与1=1;1与0=1;0与1=1;0与0=0;
按位非:取反
按位异或:1与1=0;1与0=1;0与1=1;0与0=0;
例如:
9=1001;8=1000;所以9&8=1000;
9=1001;左移一位是10010=18;
二进制左移一位相当于乘2,十进制左移一位相当于乘10
(7)
(8)运算符优先级,不确定优先级的时候加()就可以了