#1.类型转换问题
Java为强类型语言,故在进行运算时会用到类型转换
在进行类型转换时,一般是用低精度数据向高精度数据转换,
转换数据表如下
低---------------------------------------------------------------------------------------------------------->高
byte -> short -> char -> int -> long -> float -> double
运算时,不是直接进行运算,而是先转化为同一类型后进行计算。
类型转换又分为强制转换(在需要转换的数据前加上转换类型进行转换)和自动转换(在输入输出时,底层自动将数据转换为需要的数据类型)。
*注:
上图所示的操作,即一个很经典的类型转化问题,
System.out.println(""+a+b); 的输出结果为1011,即此时a和b都转化为String类型数据,且通过+将其连接在了一起,得出1011。而 System.out.println(a+b+""); 的输出结果为21,即此时a和b仍为int类型数据,通过+将其求和后,得出21。
一些小细节:
1.不能对布尔类型进行转换
2.不能将对象类型进行不相干的转换
3.强制转换时,应注意经度问题
如下图:
可以看到不做类型转换,此时的输出结果类型为int,它舍去小数点后,只保留了整数位,在这种时候就一定要认真考虑类型转换问题,用double类型将结果完整表示。
4.jdk7中,数据如太大,可以用下划线分割,且在输出时,下划线是不显示的,可以视作
1000000000000 ==1_0000_0000_0000
#2.变量类型
变量可以分为局部变量,实例变量和类变量:
根据他们的作用范围不用来区分,
在一个未实例化未具体化的类中,用static声明的变量,称为类变量
在局部代码中声明的变量,该变量必须声明和初始化值,称为局部变量
实例化,具体化了一个类,此时这个类中的变量,未初始化值,默认为空,有初始值,则值确定,这个变量称为实例变量。
#3.常量
初始化后不再改变值,不会变动的值。可以理解它是一种特殊的变量,它的值被设定后,程序运行过程中不允许再改变。
用修饰符 final 常量名 = 值;来表示。且一般使用大写字符来表示常量名!修饰符没有顺序,同时出现时不用纠结它们的顺序。
#3.变量的命名规范
命名规范和代码规范对当代程序员来说十分重要,所写的代码不仅是要让它运行起来,更是为了方便和其他人合作共赢。现在比较规范的代码是阿里的代码规范手册,多看多写多记,从开始就养成一个好的习惯。
提供一些小的技巧:
变量名自定义时,要尽量清晰明了,做到看到命名就知道数据含义:
命名时,保持首字母小写和驼峰结构(即两边低中间高的结构,例如lastName,birthDay)
#4.运算符
算术运算符:+、-、*、/、%、++,--
赋值运算符: =
关系运算符 :<、>、<=、>=、==、!=instanceof(测试一个对象是否为一个类)
逻辑运算符:&&、||、!
位运算符:&、|、^、<<、>>(算术移动)、>>>(无符号移动/逻辑移动)
可以回忆一下计算机组成原理中的原码,反码,补码操作,位运算是一个高效的运算过程,在思考一些acm或者实际运用时非常实用。
条件运算符: XX?Y:N
扩展赋值运算符:+=、-=、*=、/=
#5.自增自减运算的先后性
在处理自增自减的运算时,要注意区分是先自增再赋值,还是先赋值再自增。
结果如下:
#6.包机制
java提供包机制来更好的管理项目与解决一些类目冲突问题,一般利用公司的域名倒置作为包名。
导入包用于使用,导入使用import package 语句
可以回忆一下DNS解析域名的过程,发送DNS解析命令,从根域名服务器逐级向下寻找,直到将域名解析为唯一的ip,倒置的原因是因为假如项目上线服务器,DNS就会按照根域名到最底层域名的顺序解析,这个顺序刚好对于域名的逆序。