1、关键字
Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。
abstract | ||||
throws | ||||
2、标识符
Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符.
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。
下面的标识符是合法的:
myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_
下面的标识符是非法的:
#name,25name,class,&time,if
3、注释
Java的注释不会被程序执行。
-
// 注释单行
-
/* */ 注释多行,但不允许嵌套
-
/** */ 注释文档,说明程序功能等
注释可以嵌套,但多行注释无法嵌套多行注释。
4、常量
Java常量分类
整数常量:所有整数,
小数常量:所有小数,
布尔型常量:true or false,
字符常量:使用单引号标志的单个字符,
字符串常量:用双引号标志的单个或多个字符,
null常量:只有null一个数据,
空常量与空字符串是两个不同的概念,null与“”是两个不同的常量。
Java提供两个用于表示π和e常量的近似值:Math.PI、Math.E
5、数据类型
8种基本数据类型:
整数型:
byte(-(2<<6)~(2<<6)-1)、
short(-(2<<14)~(2<<14)-1)、
int((-(2<<14)~(2<<14)-1)、
long((-(2<<30)~(2<<30)-1),
浮点型:
double、
float,
布尔型:boolean(true,false),
字符型:char(0~(2<<15)-1)
引用类型:类(class)、接口(interface)、数组([])
6、自动类型提升和强制类型转换
自动类型提升(隐式转换):如果两个操作数的类型不同,则先将两个操作数转换为同一种类型,最后的类型与表示范围较大的类型一致(double->float->long->int),下图中实线表示转换不会丢失精度,虚线表示有可能丢失精度。
强制类型转换(显式转换):当试图将表示范围较大类型的值赋值给表示范围类型较小类型的变量时需要将其转换为较小类型,使用"()"声明其类型,有可能丢失精度。
7、字符型的运算过程
字符与其他类型的数值型数据进行运算时会先转换成字符所在码表的数值,然后根据情况进行自动类型提升。如System.out.print('a'+1)//97+1=98。
字符型之间的运算则会将操作数都转换为数值然后进行运算。如System.out.print('a'+'b')//97+98=195。
8、类型运算细节
例1:
byte a = 1;
byte b = 2;
byte c = 1 + 2;//3
byte d = a + b;
int e = a+b;//3
System.out.print(c);//3
System.out.print(d);//编译不通过
System.out.print(e);//3
凡是固定的数值计算机能在赋值之前对其进行类型检查,a、b、c的右边默认是整形,在赋值之前会先将其进行隐式的强制类型转换这里会转成byte。d的右边由于是两个变量进行运算,计算机无法判断其值是否超过byte类型的范围,所以无法进行赋值。由于e的右边运算的结果总是在int范围之内,所以运算结果会自动提升为int类型。
int a = Integer.MAX_VALUE;//214783647
int b = 2;
int c = a + b;
System.out.print(c);//-214783647
由于运算结果已经超过int型的取值范围,只保留有效位,最高位变成1,最高位是符号位,所以结果为负数。
例2:
short s = 4;
s += 8;//12相当于s = (short)(s + 8);
s = s + 8;//编译不通过
s += 8在内存中会先进行加法运算,保留在short范围之内的结果,然后将int型强制转换为short类型再赋值给左边。
s = s + 8由于右边是short和int型进行运算,结果会自动提升为int型,又由于int型超出了short型的范围不能赋值给左边,所以会发生编译错误,必须进行显示的强制类型转换。即s = (short)(s + 8);
例3:
int a = 6230;
int b = a/1000*1000;
System.out.println(b);//6000
由于Java是强类型语言,在进行整数除法运算时如果结果带有小数(为浮点数形式),则保留整数部分舍去小数部分。
9、运算符
9.1取余运算
* 运算结果的符号与被除数相同
* 运算时忽略被除数和除数符号,如果被除数大于被除数则结果为余数否则为被除数
* 0不能作为除数
int a = 3;
int b = 2;
int c = 1;
int d = -2;
int e = -3;
int f = 0;
System.out.println("a%b = "+a%b);//a%b = 1
System.out.println("c%a = "+c%a);//c%a = 1
System.out.println("d%a = "+d%a);//d%a = -2
System.out.println("a%d = "+a%d);//a%d = 1
System.out.println("e%b = "+e%b);//e%b = -1
System.out.println("e%d = "+e%d);//e%d = -1
System.out.println("d%e = "+d%e);//d%e = -2
System.out.println("a%f = "+a%f);//编译错误
典型应用:
1、开关运算(如判断奇数偶数)
public static boolean isEven(int n){
if(n%2==0)
return true;
return false;
}
2、判别素数
public static boolean isPrime(int n){
int sqrt = (int) Math.sqrt(n);//n的最大因子
for(int i = 2;i <= sqrt;i++){
if(n%i==0){//n能被i整除,则说明n非素数
return false;
}
}
return true;
}
9.2字符串连接运算符(+)
System.out.println("3+5 = "+3+5);//3+5 = 35优先级按字符串连接顺序进行运算
System.out.println("3+5 = "+(3+5));//3+5 = 8括号"()"优先级比字符串连接"+"优先级要高,先运算括号内容再进行字符串连接运算
9.3自增(减)运算
int a = 5;
a++;//5
++a;//5
a = a++;//5此过程相当于int a = 5,temp;temp = a;a = a + 1;a = temp;
a = ++a;//6此过程相当于int a = 5,a = a + 1; a = a;
9.4&和&&、|和||有什么区别?
&运算需要执行两边的运算,只要有一个为false则为false,只有当两边都为true时才为true;&&运算只要执行左边为false则不会执行右边的运算且结果必为false,只有左边为true,且右边也为true结果才为true。|和||:当||左边如果为true则不会进行右边的运算结果为true,|两边都会进行运算。