二、语法
ps:基本常识
熟悉psvm和sout
可以执行
改注释颜色的时候遇到些问题,可能是因为免费版改不了,画圈的都点不了
//单行注释
/*多行注释
多行注释
多行注释*/
1.标识符
注意事项:
-
所有的标识符都应该以字母、$、或者_开头。
-
首字母之后可以是字母、$、或者_和数字的组合,这里#之类的是不行的。
-
不能使用关键字做变量或者方法名。
-
标识符区分大小写
2.Java关键字
3.数据类型
Java是强类型语言
- 强类型语言:要求所有变量的使用严格符合规定,所有的变量必须先定义后使用。【按转型高,但是速度慢】
- 弱类型语言:与之相反但也不是说随便写,之所以能成为若类型肯定是背后做了更多工作。
ps:关于强类型语言再理解一下就是如果一个数据类型被定义了在没有转换的情况下那他就一直是这个类型。
3.1 java的数据类型分类
3.1.1每种数据类型的范围
补充:
字节(byte或者B)1B=8bit
1bit表示1位
1Byte表示一个字节1B=8bit
1024B=1KB
1024KB=1M
1024M=1G
代码实例:
public class demo02 {
public static void main(String[] args) {
//八大基本数据类型
//整数
int num1=10;//int不超过21亿就可以
byte num2=127;//byte的范围是-127到127超出范围报错
short num3=300;
long num4=3000L;//long类型在数字后面加L区分
//小数:浮点数
float num5=20.1F;//为了区分double要在后面加F
double num6=3.1415926;
//字符
char name='郭';//就只是一个单纯的汉字或者字母,多了不行
//字符串,注意String不是关键词,他是一个类
String namea="郭英虎";//这里可以写不止一个字符。
//布尔
boolean flag=false;
//boolean flag=true;
}
}
3.2.数据类型的拓展
3.2.1整数类型的拓展
一般常用的有四种整数类型:二进制0b 十进制 八进制0 十六进制0x(小写)。
下面代码举例:
public class demo03 {
public static void main(String[] args) {
//整数拓展: 二进制0b 十进制 八进制0 十六进制0x
int i=10;
int i1=010;//八进制0开头
int i2=0x10;//十六进制0x开头
int i3=0b10;//二进制0b开头
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
输出分别是:
10
8
16
2
3.2.2浮点数拓展
这里举个例子,银行面试的时候经常会问到的,在做银行业务的时候计算数据应该用什么类型?
因为flot类型和double类型都存在舍入误差所以不适合银行业务。实际银行业务不能用浮点数比较应该使用一个数学工具类叫BigDecimal。
代码举例:
float f=0.1f;
double d=1.0/10;
System.out.println(f==d);//这里发现他俩不相等
float d1=1231651651561515f;
float d2=d1+1;
System.out.println(d1==d2);//这里反而是真
执行结果:
false
true
3.2.3字符拓展
3.2.3.1 unicode编码
强制转换python也学过这里不过多记录了。
主要了解一下Unicode编码,我理解可以把他看成数字和字符对应的一个规则。范围从U0000—UFFFF占了2个字节也就是16个bit一共是0~65535这么大。
代码举例:
char c1='a';
char c2='中';
System.out.println((int)c1);
System.out.println((int)c2);
//强制转换可以把字符变成数字,所有的字符本质还是数字,这里涉及一个Unicode编码,占2个字节
//编码从U0000-UFFFF,每一个编码都代表一个字符
char c3='\u0097';//这里表示转义
System.out.println(c3);
输出结果:
97
20013
a
这里出现一个bug如图注意一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5pjOuGF-1602509889083)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201012152018714.png)]
3.2.3.2 转义字符
这块去查查晚上补充进去,这个地方在csdn上搜了搜,也不是特别理解,暂且知道这两个。
//转义字符
// \t 制表符,实际上就是加了空格
System.out.println("hello\tworld");
// \n 换行
System.out.println("hello\nworld");
3.2.4布尔值扩展
这里了解一下就可以了
//布尔值扩展
boolean flag=true;
if (flag==true){
}//新手
if (flag){
}//老手
### 3.3数据类型转换
运算中不同类型的数据先转化为同一类型然后进行运算。
低============================================>高
byte,short,char---->int---->long---->flot---->double
分类:
- 强制类型转换:从高到低
```java
int i=130;
//强制转换格式: (类型)变量名
byte b=(byte) i;//这里因为byte最多到127,所以把130转化成byte会导致内存溢出
System.out.println(i);
System.out.println(b);
输出结果:
130
-126
- 自动类型转换:从低到高
int i=130;
double b= i;
System.out.println(i);
System.out.println(b);//这里的double比int高所以自动转换
输出结果:
130
130.0
再补充个例子:
char c='a';
int d=c+1;
System.out.println(d);//低转高,自动转换
System.out.println((char)d);//高转低,强制转换
输出结果:
98
b
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转化成低容量的时候,强制转换
4.转换的时候可能存在溢出,或者精度问题
- 精度问题
System.out.println((int)23.7);
System.out.println((int)-45.89f);
输出结果:
23
-45
- 溢出问题
public class demo05 {
public static void main(String[] args) {
//操作数比较大的时候注意溢出问题
int money=10_0000_0000;//jdk7的新特性,数字之间用下划线分割。
int years=20;
int total=money*years;//这里int最多到21亿,显然溢出了
long total1=money*years;//这里我把他转化成long类型输出也不行,
// 因为这个计算结果就是整型的,这时候已经溢出了,再把溢出的这个结果转化成long也不对。
long total2=money*((long)years);//这地方直接在运算的时候把int转化成long那么结果也是long
System.out.println(total);
System.out.println(total1);
System.out.println(total2);
}
}
输出结果:
-1474836480
-1474836480
20000000000