标识符是类、变量、方法、接口等的名字,标识符区分大小写,未规定最大长度。
Java标识符由数字,汉字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。但不能以数字开头。
Java关键字不能作为标识符。
有效标识符如:myName,字,My_name,Points,$points,_sys_ta,OK,_23b,_3_
无效标识符如:#name,25name,class,&time,if
标识符命名约定:
1.类和接口名。每个字的首字母大写,含有大小写。例如,MyClass,HelloWorld,Time等。
2.方法名。首字符小写,其余的首字母大写,含大小写。尽量少用下划线。例如,myName,setTime等。这种命名方法叫做驼峰式命名。
数据类型指定变量可以包含的数据的类型。Java数据类型分类图:
引用:是指向一个在内存中的位置。在本质上是一种带有很强完整性和安全性限制的指针,当声明某个类、接口或数组类型的一个变量时,那个变量的值总是某个对象的引用或者是null引用。
数据类型 | 所占字节 | 表示范围 |
long(长整型) | 8 | -263----263-1 |
int(整型) | 4 | -231----231-1 |
short(短整型) | 2 | -215----215-1 |
byte(位) | 1 | -128----127 |
char(字符) | 2 | 0----65535 |
boolean(布尔) | 1 | true或false |
float(单精度) | 4 | -3.4E38----3.4E38 |
double(双精度) | 8 | -1.7E308----1.7E308 |
原始类型 | boolean | char | byte | short | int | long | float | double |
封装类 | Boolean | Character | Byte | Short | Integer | Long | Float | Double |
1、整型常量
Java中的整型常量有3种形式:十进制、八进制、十六进制
十进制数不加前缀,八进制加前缀0,十六进制加前缀0x或0X。如123,0123(十进制83),0x123(十进制291)
2、浮点型常量
有两种表示法:标准表示法、科学计数法。浮点数又分为单精度和数双精度数
3、布尔型常量
有两个值:true和false,表示真和假。一般通过测量布尔值的真假来判断是否执行某个操作步骤
4、字符型常量
(1)由两个单引号括起来的一个字符。如'a','男'
(2)用单引号括起来的八进制Unicode字符,形式是:'\ddd',d的取值范围是0---7,如'\012'
(3)用单引号括起来的十六进制Unicode字符,形式是:'\uxxxx',其中u是约定的前缀,而后面的XXXX位4位十六进制数,是该字符在unicode字符集中的序号。例如:'uFFFF'。
(4)转义字符
转义字符形式 | \' | \" | \\ | \r | \n | \f | \t | \b |
功能 | 单引号字符 | 双引号字符 | 反斜杠字符 | 回车 | 换行 | 走纸换页 | 横向跳格 | 退格 |
5、字符串常量
由双引号括起来的一串字符。如"This is a string.\n","欢迎来到Java世界"
示例:字符串常量和转义字符
6、变量
变量用来保存数据,是用标识符命名的数据项,是程序运行过程中可以改变值的量。
在程序中,通过变量名来引用变量包含的数据。
变量的声明形式:变量类型 变量名
变量的初始化:在Java程序中,任何变量都必须初始化后才能使用。变量可以在声明的时候初始化,也可以利用一个赋值语句来初始化。变量的数据类型必须与赋给它的数值的数据类型相匹配。
如:int x=88,total=1000;
long y=12345678L;
引用型变量:引用变量将类名、接口和数组作为数据类型。
示例:基本数据类型变量和引用变量
(1)整型变量
int型变量:用关键字int来定义变量,如int x=10,y=-5,z;
byte型变量:用关键字byte来定义,如byte x=-10,rom=18;
short型变量:用short来定义
long型变量:用long来定义
(2)浮点类型变量
float型变量:用关键字float来定义,如float x=10.5;
double型变量:用double来定义,如double x;或者double sum=1005.096d;
(3)字符类型变量
用char关键字来定义,如char c='A',sex='男';
(4)布尔型变量
用boolean来定义,如boolean x;
7、基本数据类型的转换
当把一种基本数据类型变量的值赋给另一种基本数据类型变量时,就涉及到数据类型的转换。
这些类型按数据容量从低到高的顺序为byte,char,short,int,long,float,double
(1)自动类型转换
低级变量可以直接转换为高级变量。如低级类型为char型,向高级类型(整型)转换时,会转换为对应的ASCII码值。如
char c='c';
int i=c;
System.out.println("i= ";i);
输出结果是:i=99
(2)强制类型转换
将高级变量转换为低级变量时,可以使用强制类型转换。这种转换可能会导致溢出或精度下降。转换规则:
int | long | float | double | char | byte | short | ||
double | int | - | 自动 | 自动 | 自动 | 强制 | 强制 | 强制 |
float | long | 强制 | - | 自动 | 自动 | 强制 | 强制 | 强制 |
long | float | 强制 | 强制 | - | 自动 | 强制 | 强制 | 强制 |
int | double | 强制 | 强制 | 强制 | - | 强制 | 强制 | 强制 |
short,char | char | 自动 | 自动 | 自动 | 自动 | - | 强制 | 强制 |
byte | byte | 自动 | 自动 | 自动 | 自动 | 强制 | - | 自动 |
short | 自动 | 自动 | 自动 | 自动 | 强制 | 强制 | - |
(3)包装类过渡类型转换
包装类的作用:解决编码过程中只接受对象的情况。比如:List中只能存入对象,不能存入基本数据类型;又如:一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类。方便类型之间的过渡转换。
Java的8个包装类:Boolean、Byte、Character、Short、Integer、Long、Float、Double。
简单类型变量转换为相应的包装类:利用包装类的构造函数转换为相应类的实例。
8、引用类型
引用是一种数据类型(保存在stack中),保存了对象在内存(heap,堆空间)中的地址。不同的引用可能指向同一对象。
引用类型是除了基本类型之外的所有类型。
运算符:用来表示各种运算的符号。根据参加运算的对象的数量,分为单目运算符、双目运算符、三目运算符。
Java表达式:用运算符把运算对象连接起来所组成的运算式。每个表达式都可以按照运算符的运算规则进行运算,并最终获得一个值,称为表达式的值。
1、算术运算
加、减、乘、除、求余(、+、-、*、/、%)
常用Math类方法
方法 | 描述 | 方法 | 描述 |
abs(x) | 返回x的绝对值 | random() | 返回0.0~1.0之间的随机数 |
max(x,y) | 返回x,y的较大值 | round(x) | 返回最接近x的整数值 |
min(x,y) | 返回x,y的较小值 | sqrt(x) | 返回x的平方根 |
pow(x,y) | 返回x的y次幂 |
2、关系运算
Java语言提供6种关系运算符
关系运算符 | 描述 | 优先级 |
< | 小于 | 优先级相同(高) |
<= | 小于等于 | |
> | 大于 | |
>= | 大于等于 | |
= = | 等于 | 优先级相同(低) |
!= | 不等于 |
其中“= =”和“!=”用于比较基本数据类型变量或对象的引用变量。对于引用变量,“==”操作符比较的是引用变量自身的引用值,而不是对象的实际内容。要比较对象的实际内容,需要使用方法equals()。
示例:==与equals()方法的区别
3、逻辑运算
Java语言有6种逻辑运算符
逻辑非!,逻辑与&,逻辑异或^,逻辑或|,短路逻辑与&&,短路逻辑或||
优先级:高——低
4、赋值运算
=
变量=表达式
符合赋值运算符:+=、-=、*=、/=、%=
5、条件运算符
是三目运算符,由两个符号“?”和“:”组合而成;表达式的一般形式为:variable=expression?value1:value2;
若逻辑表达式expression的值为true,则将value1赋值给变量variable,否则将value2赋值给变量variable
6、语句
执行程序的基本单元
(1)表达式语句;(2)复合语句;(3)控制语句;(4)包语句和引入语句
示例:编写程序,判断某年是否是闰年
1、数组的概念
Java中数组是一个对象。数组是把同一类型的数据组织在一起的数据结构。所有数组元素具有相同类型,可以存储基本数据类型的数据,也可以存储引用类型的数据。
2、数组的创建与初始化
数组的定义格式:type[] arrayName
如:int[] x;char[] AB;
定义数组时不能指定数组的长度,因为数组是一种引用类型,使用它定义变量时仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效的内存。
数组的初始化:为数组的数组元素分配内存空间,并为每个数组元素赋初值。
(1)静态初始化:由程序员显示指定每个数组元素的初始值,由系统决定需要的数组长度
arrayName=new type[]{element1,element2,element3,element4...}
如:x=new int[]{6,80,2,55,451};
(2)动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
arrayName=new type[5];
也可以将对数组的声明和分配内存的过程结合成一个语句。如:char[] AB=new char[3];
(3)数组元素的赋值与访问
除了静态初始化可以对数组元素赋值外,也可以对每一个数组元素单独赋值。如:
x[0]=6;
x[1]=80;
x[2]=2;
x[3]=55;
x[4]=451;
数组元素被赋值以后就可以在程序中通过数组元素名来访问它们了。如:System.out.println(x[2]);
示例:用三种不同方式创建AB,AC,AD三个数组。其中AB是char型数组,AC和AD都是int型数组。
3、多维数组
(1)二维数组的声明方式和一维数组类似,内存的分配也一样是用new运算符。
声明与分配内存的格式:
type[][] arrayName;
arrayName=new type[行数][列数];
与一维数组不同的是,二维数组在分配内存时,必须告诉编译器二维数组行与列的个数。因此在上面格式中,“行数”是告诉编译器所声明数组有多少行,“列数”则是赋值每行中有多少列。
Java二维数组在应用上和C语言的二维数组很相像,但是Java语言的多维数组不一定是规则的矩阵形式。
Java语言中二维数组是一维数组,其数组元素是一维数组;三维数组也是一维数组,其数组元素是二维数组;四维数组还是一维数组,其数组元素是三维数组,从这个角度看,Java语言中的多维数组其实是一维数组。
示例:把二维数组当成一维数组处理
该例中在初始化多维数组时,只指定了最左边维数的大小;也可以同时指定每一维的大小。如:int[][] b=new int[3][4];同时初始化二维数组的两个维数。
存储示意图
示例:二维数组元素的赋值和输出
4、数组的复制
Java中数组的复制方式:
(1)将一个数组变量赋值给另一个数组变量。由于Java中的数组是引用数据类型,复制后两个变量将引用同一个数组对象。如:
int[] a={1,2,3,4};
int[] b=a;
(2)使用for循环,将一个数组的每个元素复制到另一个数组中。
(3)使用clone( )方法,得到数组的值,而不是引用。
(4)使用System.arraycopy(s,start1,t,start2,,length)方法,s是原数组,t是目标数组,start1和start2是开始复制的下标,length是s的长度,arraycopy方法不会给目标数组分配内存空间,所以必须要先为t分配内存空间,才能复制。
示例:使用for,clone和arraycopy复制数组
5、操作数组的工具类
Java的Arrays类包包含了一些static修饰方法,static修饰的方法可以直接通过类名调用,这些方法可以直接操作数组。见API文档
示例:Arrays类的用法