Java编程基础



标识符与关键字

标识符是类、变量、方法、接口等的名字,标识符区分大小写,未规定最大长度。

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引用。

Java基本数据类型的取值范围
数据类型 所占字节 表示范围
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

Java原始类型封装类
原始类型 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类的用法