1、JAVA的变量命名规则
1.1 基本规则
- 名称只能由字母、数字、下划线、$符号组成
- 不能以数字开头
- 名称不能使用JAVA中的关键字。
- 区分大小写
1.2 其他规则
- 类和接口 的名称应该是名词,在含有多个单词的情况下,每个内部单词的第一个字母大写。最好使用完成单词,避免缩写,接口类型通常以大写字母I开头
- 方法 的名称应该是动词,在含有多个单词的情况下时,第一个单词的首字母小写,其余单词的首字母大写。
- 常量 所有的单词都用大写形式来表示,并且单词间通过下划线 _ 来分割
如:PI - 包 惟一包名的前缀总是用全小写ASCII字母编写,应该是顶级域名之一,如com、edu、gov、mil、net、org。 包名称的后续组件根据组织自身的内部命名约定而变化。
2、JAVA的基本类型
java的数据类型主要分为两类:值类型和引用类型。
值类型主要分为:整型、浮点型、字符型
引用类型主要分为:字符串类型、类类型、接口类型、数组类型
注意: java的整型和机器的平台无关,不像C语言和C++整型在16为处理器上int 占用2个字节,在32位处理器上占用4个字节。
2.1 整数类型
整型按照所占字节大小来分,从小到大依次为:byte(1)—>short(2)–>int(4)–long(8)
一般来说在处理底层文件的时候,需要使用byte,但是编程中最常用的基本类型是int,long类型表示大数据,比如中国的人口数目时候,一般可以通过加后缀L或者l来直观的显示long类型。
Tip:
但是我们知道long在最大的范围是2^63-1,但是在表示天文距离光年的时候,远远不够,这个时候该怎么办呢,java.math里的BigInt类正好可以解决这个问题。
2.2浮点数类型
浮点数类型按照大小来分:float(4)---->double(8)
一般来说程序中大都时候,会优先采用 double 类型,而不是float类型,这个时候你可能会有疑问,使用double类型占用的字节多,不是会造成更多的浪费吗?要说明这个问题,我们首先了解计算机中浮点数据是怎么表示的。
我们知道计算机中所有的数据都是采用0和1表示的,也就是2进制表示,假设是个整数,那么怎么表示都不会有精度的损失,(这真是废话,都整数了还有啥精度),但是用2进制表示来表示浮点数据,遇到能被2整除干净的还好,如4.0,4.2,4.8,但是像4.21这种,无论你怎么划分,最后总是会有无法除尽的情况,所以只能用更多的数据位来保证精度在一定范围呢。正因如此,我们在使用计算机操作浮点数的时候,优先采用占用字节多的double 来保证浮点数的精度。
基于以上,我们在需要注意以下两个问题:
2.1.1 浮点数据相等判断
直接看代码:
public static void main(String[] args)
{
float a1=4.2f;
double a2=4.2d;
//除以整数同类型比较
System.out.println(a1/2==2.1f);//true
System.out.println(a2/2==2.1d);//true
//不同类型结果比较
System.out.println(a1/2==a2/2);//false
//除以小数比较
System.out.println(a1/0.6==7);//false
System.out.println(a2/0.6==7);//false
}
what?明明a1/0.6是4.2/0.6=7啊,为啥java告诉我不相等呢,为啥4.2f/2和4.2d/2还不相等呢,这就是精度问题了啊,那这个时候该如何判断相等?简单指定在精度范围呢就任务相等好了, 假设我们任务小于0.000001是相等,运行如下代码,都是相等了。
public static void main(String[] args)
{
float a1=4.2f;
double a2=4.2d;
//不同类型结果比较
System.out.println(Math.abs(a1/2-a2/2)<0.000001);//true
//除以小数比较
System.out.println(Math.abs(a1/0.6-7)<0.000001);//true
System.out.println(Math.abs(a2/0.6-7)<0.000001);//true
}
2.1.2 高精度问题怎么用
假设你也成功找到了工作,到了一家银行或者证券公司上班,需要计算机计算大量的财务问题,如果采用java 即是用了double进度来计算问题,假设每天的需要流动的资金在一个亿左右。这就带来个问题,一个亿每天因为小数点的问题,可能要么你的公司要占点客户的便宜,要么你的公司被客户占了不少便宜,这样日积月累,必然会造成很大的问题。所以为了保证财务的运算精度或者其他精度要求很高的计算场合,就需要新的数据类型,这个时候java.math 提供了BigDecimal类。
2.1.3 无穷大和NAN
在java中,float 类型数据和double 类型数据都有正负无穷大和NaN(非数),其定义如下:
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
public static final float NaN = 0.0f / 0.0f;
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
public static final double NaN = 0.0d / 0.0;
注意,正负无穷大无法比较相等,所有“非数值”的值都认为是不相同的。
但是可以使用Float/Double.isNaN()判断一个数值是否是非数。
System.out.println(Float.NEGATIVE_INFINITY==Double.NEGATIVE_INFINITY);//true System.out.println(Float.POSITIVE_INFINITY==Double.POSITIVE_INFINITY);//true
System.out.println(Double.NaN==Float.NaN);//false
System.out.println(Float.NaN==0.0f/0.0f);//false
System.out.println(Double.NaN==0.0d/0.0d);//false
System.out.println(Float.isNaN(0.0f/0.0f));//true
System.out.println(Double.isNaN(0.0d/0.0d));//true
System.out.println(Float.POSITIVE_INFINITY==1.0f/0.0f);//true
任务一个数与进行加减运算结果还是无穷大还是无穷大,乘除看情况如下:
System.out.println(Float.POSITIVE_INFINITY+1);//Infinity
System.out.println(Float.POSITIVE_INFINITY-1);//Infinity
System.out.println(Float.POSITIVE_INFINITY*100);//Infinity
System.out.println(Float.POSITIVE_INFINITY/1000000);//Infinity
System.out.println(1/Float.POSITIVE_INFINITY);//0.0
System.out.println(Float.POSITIVE_INFINITY*Float.POSITIVE_INFINITY);//Infinity
System.out.println(Float.POSITIVE_INFINITY+Float.NEGATIVE_INFINITY);//NAN
2.2 布尔类型
boolean(布尔)类型有两个值:false和true,在java中,整型值和布尔值之间不能进行相互转换。不像C和C++那样可以通过数值进行转换,下面的代码,在java中直接会报编译错误。
int x=1;
if(x)
{
........
}
2.3 char类型
char是Java中的保留字,与别的语言不同的是,char在Java中是16位的,其他语言大部分是8位的,因为Java用的是Unicode。不过8位的ASCII码包含在Unicode中,是从0~127的。
char类型赋值
char a = ‘a’; //任意单个字符,加单引号。
char a = ‘中’;//任意单个中文字,加单引号。
char a = 111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
注:char只能放单个字符。
char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。
在Java中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。
示例:
char m = 'a';
m = 'a' + 'b';//char类型相加,提升为int类型,输出对应的字符。
int m1 = 'a' + 'b';//结果是195。//195没有超出int范围,直接输出195。
char m2 = 197;//输出字符编码表中对应的字符。
char m3 = '197';//会报错。//因为有单引号,表示是字符,只允许放单个字符。
char m4 = 'a' + 1;//输出结果是b。//提升为int,计算结果98对应的字符是b。
3 变量 和常量
3.1 变量
变量的命名规则前面已经说过,这里不在累赘
变量一般的定义是 类型名称+变量名
声明一个变量之后,必须用赋值语句对变量进行显式初始化,**千万不要使用未初始化的变量。**为赋值的变量,java会直接报错,不像C语言等会给默认值。如下:
3.2 变量
在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。习惯上,常量名使用全大写,一旦用final修饰后,赋值之后就不能再进行更改了,如下:
final int a;
final int b=100;//正确
a=100;//正确
a=200;//报错
b=200;//报错