代码规范
1:
- 注意换行。
- 变量的声明尽量是每一个变量独占一行,即使变量的类型是一样的,方便变量注释。
- 关键字之间只认一个空格。
- 不要使用技术性很高,难懂,易混淆的语句,方便日后的二次开发,和别人的维护。
- 注意编写代码的符号一定要使用英文的符号,即半角符号。
2:
注释是个好东西,重要性不必说了。
注释内的东西不被编译。
// 单行注释
/* 多行注释 */
/**
*这里是文档注释
*/
我们所看到的api其实就是有文档注释自动生成的。
基本数据类型
整数类型
- byte 1字节
- short 2字节
- int 4字节
- long 8字节
//创建整型变量
byte a=12;
byte a=12, b=-13;
//创建long类型的整型变量
long a=165415312L;
long a=123L;
long c=123L + 1565L;
//创建long类型的时候和其他的有点不一样,需要在数值后面加上 L 或者是 l ,否则可能会造成精度的丢失。
在Java中一个整数有默认类型(int)
//十进制赋值
int a= 33;
//八进制赋值
int b=033;
//十六进制
int c= 0X33;
浮点类型
- float 4字节
- double 8字节
// 创建浮点类型变量
//浮点数的默认类型为 double 类型
float a=1.1F;
float b=-2.4F;
//在小数的末尾需要加 F 或者是 f 后缀
double a=3.141592653;
double b=3.14159265253D;
//这里呢,double的类型可以加上后缀 D 或者 d,或者不加,原因是浮点数的默认类型为double
Java中的浮点值是近似值,非常不准确
例如:
double a = 4.35 *100;
System.out.println(a);
结果是
434.99999999999994
这个怎么解决呢?
这就要使用一个方法
double a = 4.35 * 100;
System.out.println(Math.round(a));
这时输出置就是:
435
再例如:
double a = 0.1;
double b = 2.0 - 1.9;
System.out.println(a == b);
按照我们所理解的应该是true
但机器的运行结果是:
false
怎么来解决呢?
我们可以使用最小数对比法
可以和 1e-6 来相比较,如果是小于,我们就视为0,反之亦反。这个最先是C语言中用来判断是否为零的
double a = 0.1;
double b = 2.0 -1.9;
System.out.println(Math.abs(a-b)<1e-6);
// Math.abs() 方法被用来取绝对值
答案是:
true
字符类型
用单引号包含的的可打印的单个符号。
'a', 'M', '8', '#', '文', ' '
//以上都是字符,以下不是
"A" //不是一个字符,因为是用 双引号扩起来的
'8' != 8 //左边为字符,右边为整型常量
这两个8是不一样的
System.out.println('8'*2); // 字符编码 *2
System.out.println(8*2); //数值 *2
输出结果是:
112
16
**char 的使用同C语言,不仅可以用来存字符,还可以用来存整数(即为字符编码),但是Java中的char采用了更高级的Unicode编码,取值范围为
0~65536**
例如:
//以字符来赋值
char a1 = 'a';
char b1 = '汉';
char c1 = '2';
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
//以字符编码来赋值
char a2 = 97;
char b2 = 27721;
char c2 = 50;
System.out.println(a2);
System.out.println(b2);
System.out.println(c2);
运行结果是:
a
汉
2
a
汉
2
转义字符:
\' //单引号字符
\" //双引号字符
\\ //反斜杠字符
\t //垂直制表符,将光标移动到下一个制表符的位置
\r //回车
\n //换行
\b //退格
\f //换页
//示例:
System.out.ptintln("[\101]");
//这里的‘\’表示以八进制赋值,101转换为十进制就是65,所以输出的是 ‘A’
布尔类型
使用关键字: boolean 创建
这个类型只有两个值:true false
关系运算符
运算结果是一个布尔值
同C语言一样,不能够串联使用关系运算符
例如:
a < b
数据类型转换
勿以小杯乘大物
小转大:
- 隐式转换(自动转换)
这是自动转换的顺序图:
低精度自动向高精度转换:
低精度类型的值可以直接赋给高精度类型:
byte a = 8;
System.out.println(a);
int b= a;
System.out.println(b);
long c =b;
System.out.println(c);
double d = c;
System.out.println(d);
//char
char e = 'A';
int x = e-2;
//运行结果是:63
//这说明两者是相互兼容的
- 显式转换(强制转换)
可适用于引用的类型:
(类型名)要转换的值
示例:
int a = 100;
byte b = (byte)a;
大转小
只能使用强制转换,还可能造成细节丢失
double x = 3.1415926;
float f = (float)x;
System.out.println(f);
int i = (int)x; //直接舍弃掉小数
System.out.println(i);
//这些都是要丢失的
自增自减运算符
- 前置形式
++a; // 先加1再使用
--b; //先减1再使用
- 后置运算
a++; //先使用,再加1
b--; //先使用,再减1
注意:
(a+b)++;
--(x+y);
//这种写法是错误的,诸如此类都是错误的
//只能够给一个变量适用
三元运算符
返回值 = 判断公式 ? 结果1 : 结果2;
int a = 1;
int b = a < 3 ? 20 : 30;
结果是:
20
注意:这个运算符是有返回值得,这个返回值是不能够丢失的。
位运算符
- 位逻辑运算符
逻辑运算符运算结果:
总结:
与:同真为真
或:有真为真
异或:相同为假,不同为真
取反:真为假,假为真
注意:运算的时候要转换成二进制!
- 位移运算符
int x = 64;
int y = 32;
// 位移之后是不对原变量的值产生影响
// x<<1; 这种写法是错误的。
x = x << 1; //左移一位, 值乘以2
System.out.println(x);
//注意:下面的值分别是:8, 256
System.out.println(y>>2);
System.out.println(y<<3);
//
int x = 32;
x = x <<<2;
x = x>>>3;
//无符号位移
预算符的优先级
直接来图爽快
来了图,看了还是一脸的茫然,那就来点小题:
总结:
单目高于双目
按照运算符的作用来看,()这种级别最高,之后依次是算数运算符,位运算符,关系运算符,逻辑运算符,赋值运算符。
逻辑运算符
还是直接来图: