Java中所有程序代码都必须在一个类中,用class关键字定义类,class前面可以有一些修饰符号。
格式:修饰符 class 类名{
程序代码
}
例:public class MyTest{
程序代码
}
注:当修饰符号为public关键字时,文件名必须与类名相同。而且只能有一个类用public关键字修饰。
JAVA语言是严格区分大小写的。
例:定义一个类用“class 类名”,而不能写成“Class 类名”。
String name,Name;//其中name与Name是不同的变量。
Java中所有程序代码分为结构定义语句和功能执行语句,一条语句可以写在若干行上,功能执行语句必须用分号(;)结束,不必要对齐或缩进一致.
例:public class HelloWorld
{ public static void main(String args[])
{System.out.println(“Hello world”);}}
和
public class HelloWorld{
public static void main(String args[]){
System.out.println(“Hello world”);
}
}
他们是一样的。
注释:不被程序编译的文字信息,增强源文件的可读性。
单行注释:// 注释内容
多行注释:/* 注释内容 */
文档注释:/** 注释内容 */
文档注释的内容会被解释成程序的正式文档。
程序员对程序中的各个元素加以命名时使用的命名记号称为标识符包括:类名、变量名、常量名、方法名、…。
Java标识符大小写敏感(区分大小写),没有长度限制,可以为标识符取任意长度的名字,但不能是java中的保留字(关键字)。
标识符是以字母,下划线(_),美元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。
例:
ü 合法的标识符:
indentifier,username,user_name,_userName
ü 非法的标识符:
class , 98.3 , Hello World, &username,*10sui
关键字是指对编译器有特殊意义,在程序中不能用作其它目的的字符序列,关键字都是由小写字母组成的。
JAVA中的关键字(保留字)表:
abstract |
default |
if |
private |
this |
boolean |
do |
implements |
protected |
throw |
break |
double |
import |
public |
throws |
byte |
else |
instanceof |
return |
transient |
case |
extends |
int |
short |
try |
catch |
final |
interface |
static |
void |
char |
finally |
long |
strictfp |
volatile |
class |
float |
native |
super |
while |
const |
for |
new |
switch |
null |
continue |
goto |
package |
synchronized |
常量是程序里持续不变的值。
常量分类:值常量和符号常量。
1、值常量有如下几种:
整型常量、浮点数常量、布尔常量、字符常量(一般字符常量和转义字符常量 [图一] )、字符串常量、NULL常量。
整型常量的表示方式: 用十,八,十六进制来表示。
A、 十进制整型常量,由0至9的数字组成,没有前缀,不能以0开始,没有小数部分。例如:124,-36等。
B、八进制整型常量,以0为前缀,其后由0到7的数字组成,没有小数部分。例如:0332,-0122等。
C、十六进制整型常量,以0x或0X为前缀,其后由0到9的数字和A到F(大小写均可)字母组成,没有小数部分。例如:0x3A,-0X43f等。
浮点数常量表示方法:十进制小数表示法和科学计数法
A、 十进制小数表示法,它是由整数部分和小数部分组成的。如:4.0 ,33.32等。小数点两边的数字不能同时省略且小数点不能省略。
B、科学计数法表示,它常用来表示很大或很小的数,如1.2×1026在Java中表示为1.2E26。表示方法是在小数表示法后加e(或E)及指数部分。但要注意,e(或E)前面必须有数字,指数部分可正可负,但都是整数(正号可省略)。例如,4.2E-5,3e6等。
布尔型常量表示方法:true和false
布尔型常量值只有true和false,true和false必须要小写。true表示“逻辑真”,false表示“逻辑假”。
字符型常量的表示方法:用单引号(‘’)引起来的单个字符或汉字
A、Java中的字符采用Unicode字符集的编码方案,是16位的无符号整数,占2个字节,表示的字符从0~65535。 Unicode字符集可以支持各类文字的字符。
B、字符型常量分为一般字符常量和转义字符常量。对于可输入字符,用单引号将字符括起来,如‘a’, ‘A’, ‘我’等。对于不可输入字符,采用转义字符(图一)表示。
转义字符表(图一)
字符串常量的表示方法:用双引号(“”)引起来的一个或多个字符(汉字)。
字符串并不是Java的基本数据类型,它是Java提供的位于java.lang包中的String类,字符串常量就是字符串类java.lang.String类的一个对象,故它可以使用类String中的方法,所有字符串常量值都用双引号括起来。
Null常量的表示方法:null
需要注意的是null可以简单视为一个引用类型的常量值,表示不引用任何对象。在Java编码规范中,规定null是所谓null类型的唯一值,且规定null可转换到任何引用类型。
例:
整型常量:123
浮点型常量:3.14
字符常量:‘a’,’\’’
逻辑常量:true、false
字符串常量:“helloworld”
NULL常量:null
2、符号常量
使用关键字final来定义符号常量。
格式:final 数据类型 变量名=初始化值;
如:final double PI=3.1415926;//PI就是符号常量
注意:A、符号常量实质上是一种特殊的变量,也是占用内存空间的。
B、符号常量的名字都应该大写。
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型,和作用域。(变量其实就是在程序的运行中一个可以改变的量)
格式:[修饰符] 数据类型 变量名 [ = 初始值 ];
从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先声明,然后必须进行赋值才能使用。
例:
// x为基本整型
int x;
// y为浮点数(单精度),并且赋给初始值3.14
float y=3.14;
// 可以在一个语句中声明多个同一类型的变量
long area,width,length;
1、按被声明的位置分:
成员变量:方法外部、类的内部定义的变量。
局部变量:方法或语句块内部定义的变量。
例:
class Test{
int i;
String str;
public void method(){
int i;
int j=i+5;
double d=3.14;
}
}
2、按所属的数据类型划分:(图二)
基本数据类型和引用数据类型:
(图二)
整数类型变量的定义及说明:
A、
B、Java语言的整型常量默认为int型,声明long型常量可以后加’l’或‘L’。
如:int i1=600;//正确
long i1=8888888888L;//必须加L否则会出错。
short il=1456;
byte i1=137; //必须在-128——127范围
浮点类型变量的定义及说明:
A、
B、Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F。
如:double d=12345.6;//正确
float f=12.3f;//必须加f否则会出错。
字符类型变量的定义及说明:
A、char型数据用来表示通常意义上“字符”。
例:char c=’A’;
B、Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示。
例如:char c1=‘\u0061’;
注:Unicode是全球统一编码(为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。)。
C、Java语言中还允许使用转义字符‘\’来将其后的字符转变为其它的含义。例如:char c2=‘\n’; ‘\n’代表换行符号
布尔类型变量的定义及说明:
A、boolean 类型适用于逻辑运算,一般用于程序流程控制。
B、boolean类型只允许取值true或false。
用法举例:
boolean flag;
flag=true;
if(flag){
//do something
}
A、自动类型转换(隐式类型转换)
Ø 两种类型必须兼容
Ø 目标类型的取值范围大于源类型
int x = 5;
float y = x;// float 比int表达的范围要大,此时就会发生自动转换。
B、强制类型转换(显式类型转换)
Ø 两中种数据类型不兼容
Ø 目标类型取值范围小于源类型。
double x = 3.14;
int y = (int)x;// 编译通过,但损失了x原来精度
C、根据精度,java的变量级别顺序定义如下:
byte ->short->char->int->long->float->double
对各种类型的数据进行加工的过程称为运算,表示各种不同运算的符号称为运算符,参与运算的数据称为操作数。
Java表达式是由操作数和运算符按一定的语法规则组成的符号序列。
² 算术运算符:+ - * / % ++ --
² 关系运算符:> < >= <= == !=
² 逻辑运算符:! && ||
² 位运算符: << >> >>> & | ^ ~
² 赋值运算符:= += -= *= /= %=
² 条件运算符(三目运算符)? :
算术运算符:
A、Java提供的算术运算符包括:加(+)、减(-)、乘(*)、除(/)和取余(%)。算术运算符是双目运算符。利用算术运算符连接起来的式子称为算术表达式。
注意:+:除了算数加法运算外,还可以做为字符串的连接。
例:int id=800+900;
String s=“hello”+”world”
B、自增、自减运算符++、--
Java中还另外提供了两个用于算术运算的单目运算符:自增运算符++和自减运算符--。其功能是使变量的值增1或减1。使用这两个运算符,可以让程序更为简化、更容易阅读。
++和--运算符有一个特点,就是它们既可以位于变量名的左边(称为前自增、前自减),又可以位于变量名的右边(后自增、后自减),但结果却是不一样的。++和—运算有以下四种情况:
(1) i++:使用i之后,i的值加1,即先取值,后自加。等价于i=i+1。
(2) ++i:先使i加1,然后再使用i,即先自加,后取值。等价于i=i+1。
(3) i--:使用i之后,i的值减1,即先取值,后自减。等价于i=i-1。
(4) --i:先使i减1,然后再使用i,即先自减,后取值。等价于i=i-1。
注意:++和--运算符只能用于变量,不能用于常量和表达式。因为++和--蕴含着赋值操作。++和--运算符经常用于循环程序设计中。
关系运算符
关系运算符又称比较运算符,因为关系运算实际上是比较大小的运算。Java提供了6种关系运算符:>、>=、<、<=、==、!=。前4种优先级相同,且高于后面的两种。
关系表达式
用关系运算符连接的式子称为关系表达式。一般格式为:
表达式1 关系运算符 表达式2
关系表达式的值代表着某种关系的真假。比如,如果x的值是10,那么,x>5的值是“真”,而x<1的值是“假”。
逻辑运算符
Java提供了3种逻辑运算符,&&(与)、||(或)、!(非)。
a&&b:只有a与b都为true,结果才为true,否则为false。
a||b:只有a与b都为false,结果才为false,否则为true。
!a:与a的值相反。
逻辑表达式
用逻辑运算符连接起来的式子称为逻辑表达式,用于表示复杂的运算条件。
有一点需要指出,在逻辑表达式求值的过程中,并不是所有的逻辑运算都被执行,即在Java中要进行所谓的短路计算。例如:
(1) 在求解a&&b&&c的值时,只有a的值是真时,才会计算b的值;只有a和b均为真时,才会计算c 的值。如果a为假,则不会继续计算b和c的值,因为整个表达式的值已经确定了。
(2) 在求解a||b||c的值时,只有a是假时,才会计算b的值;只有a和b均为假时,才会计算c的值。如果a是真,就不会计算b和c的值,因为整个表达式的值已经确定了。Java编译程序按照“短路”计算方式来生成目标代码。
位运算符
位运算符的作用在于对整数数值的二进制表示进行运算,像二进制的AND与OR等运算。
(1) 按位求反运算符~
对操作数的二进制数据的每一个二进制位都取反,即1变成0,而0变成1。如~8的结果为-9。
(2) 位与运算符&
参与运算的两个操作数,相应的二进制数位进行位与运算。如5&11结果为1。
(3) 位或运算符|
参与运算的两个操作数,相应的二进制数位进行位或运算。如5|11结果为15。
(4) 位异或运算符^
参与运算的两个操作数,相应的二进制数位进行位异或运算。如5^11结果为14。
(5) 保留符号位的右移运算符>>
将一个操作数的各个二进制位全部向右移若干位,这个位数由右操作数来决定,移到右端的低位被舍弃,左边空出的位全部用最高位的符号位来填充。如5>>1结果为2。-9>>1,结果为-5。
(6) 不保留符号位的右移运算符>>>
与>>不同的是,>>>右移后左边空出的位用0填充。如5>>>1结果为2。-9>>>1,结果为2147483643。
(7) 左移运算符<<
将一个操作数的所有二进制位向左移若干位,右边空出的位填0。若高位左移后溢出,则舍弃溢出的数。如5<<1结果为10。
赋值运算符
分类:基本赋值运算符(=)和扩展赋值运算符(+= -= *= /= %=)。
基本赋值运算符(=):它的作用是设置变量的值,即将一个数据赋给一个变量,实际上是将特定的值写到变量所对应的内存单元中。赋值运算符是双目运算符,因为“=”两边都要有操作数。“=”左边是待赋值的变量,右边是要赋的值。
例: long l=100;
int i=(int)l;
byte b=12;
char c=100;
byte bb=256;(错)
注意:可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其范围。
扩展赋值运算符(+= -= *= /= %=)
条件运算符
条件运算符是Java提供的唯一一个三目运算符。用条件运算符连接起来的式子称为条件表达式。
条件表达式的格式是:表达式1?表达式2:表达式3
条件表达式
条件表达式的运算规则如下:如果表达式1的值为真,那么整个条件表达式的值就是表达式2的值,否则整个条件表达式的值是表达式3的值。
例:4>6?3:9 // 整个表达式的值为9
图三
流程控制可以定义为对程序语句的执行顺序进行的规定。 有三种结构:
顺序结构、分支结构(条件结构)、循环结构。
A、顺序结构:程序从上到下依次执行,中间没有判断和跳转,直到程序结束。
B、分支结构- 根据不同条件,执行不同语句。
Ø if
Ø if …else
Ø if..else if..else,
Ø switch
B、循环结构-重复执行某些动作。
Ø for
Ø while
Ø do while
顺序结构:
顺序结构是最简单、最基本的结构,在顺序结构内,顺序执行各个语句。(图四)表示了一个顺序结构形式,从图中可以看出它有一个入口a点,一个出口 b点,在结构内A框和B框都是顺序执行的处理框。
图四
空语句、表达式语句、复合语句是Java程序依次顺序执行的语句,故也是顺序结构。
空语句是仅由分号构成的语句,表示什么动作都不做。
一个表达式加上一个分号就是一个表达式语句,只有少量的几种表达式才能构成表达式语句。它们是:由赋值运算符构成的表达式、由++或--构成的表达式、方法调用、new 表达式。
复合语句是指由一对花括号{}括起来的任意数量的语句,有时又称为块语句或组语句。
分支结构:
1.if语句
(1) 简单if语句
if (布尔表达式){
语句体;
}
其执行过程是:首先计算布尔表达式的值,若为真true,则执行块内语句,否则,if语句终止执行,即不执行块内语句而执行if语句后面的其它语句,如(图五)所示。
图五
例:IfTest.java
(2) if-else语句
if (布尔表达式){
语句体A;
}else{
语句体B;
}
其执行过程是: 首先计算布尔表达式的值,若为真,则执行语句体A,否则执行语句体B, 如(图六)所示。
图六
例:IfElseTest.java
(3)if-else if-else语句
if (布尔表达式){
语句体A;
}else if(布尔表达式){
语句体B;
}else{
语句体C;
}
例:IfElseIfTest.java
2. switch语句(图七)
switch语句是多分支选择语句,又称开关语句。
switch语句的一般形式如下:
switch(表达式){
case 常量表达式1:
语句体1;
break;
case 常量表达式2:
语句体2;
break;
…
case 常量表达式n:
语句体n;
break;
default:
语句体n+1;
}
图七
例:SwitchTest.java
循环结构:
循环结构是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。
1. while循环(图八)
while语句用来实现“当型”循环结构,即先判断表达式,后执行语句。其一般形式如下:
while (循环条件)
{
语句体; // 循环体
}
图八
例:WhileTest.java
2. do-while 循环(图九)
do-while语句用来实现“直到型”循环结构,即先执行循环体,然后判断循环条件是否成立。其一般形式如下:
do
{
语句体; // 循环体
} while (循环条件);
图九
例:DoWhileTest.java
3. for循环(图十)
for语句是java语言中使用灵活方便的一种循环语句,它不仅用于循环次数已知的情况,还能用于循环次数预先不能确定只给出循环结束条件的情况。
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
{
语句体; // 循环体
}
图十
break、continue、标号(label)、return语句、System.exit()方法
1、break、continue和标号(label)
Java中可以用break和continue两个循环跳转语句进一步控制循环。这两个语句的一般格式如下:
break [label]; // 从所在的switch语句、循环语句中跳出。
continue[label]; // 跳过循环体的剩余语句,开始执行下一次循环。
break和continue可以用在三种循环语句中的任意一种。
这两个语句都可以带标号使用,也可以不带标号使用。标号是出现在一个语句之前的标识符,标号后面要加一个冒号。
定义如下:label: statement;
2、return语句和System.exit()方法
return语句用来从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续执行。如果在main()方法中执行return语句,则使程序执行返回到Java运行系统,因为Java运行系统调用了main()方法。
要想从程序的任意地方直接一步到位地退出程序,而不是返回到调用该方法的语句处,可以使用System.exit()方法。
循环的嵌套(图十一)
一个循环体内包含另一个完整的循环结构称为循环的嵌套,内嵌的循环中还可以嵌套循环,这就是多重循环。
图十一
1、函数的定义
函数是一段用来完成特定功能的代码段。
函数格式:
[修饰符1 修饰符2..] 返回值类型 方法名(参数类型 形式参数1,参数类型 形 式参数2,....){ 语句1;语句2;..return 返回值;}
Ø 形式参数:在方法调用时用于接收外界输入的数据。
Ø 实参:调用方法时实际传给方法的数据。
Ø 返回值:方法在执行完毕后返还给调用它的程序的数据。
Ø 返回值类型:函数要返回的结果的数据类型。
Ø 实参:调用函数时实际传递给函数形式参数的数据。
Ø return 语句终止方法的运行并指定要返回的数据。
注意:实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。
Java中进行函数调用中传递参数时,遵循值传递的原则:
Ø 基本类型传递的是该数据本身。
Ø 引用数据类型传递的是对对象的引用,而不是对象本身。
2、函数的重载
函数的重载就是同一个类中允许同时存在一个以上的同名函数,并且他们的参数个数或类型不同。
例:MethodTest.java
注意:
Ø 重载函数的参数列表必须不同,要么是参数的个数不同,要么是参数的类型不同。重载函数的返回值类型可以相同,也可以不同。
Ø 如果两个函数的参数类型和个数完全一样,返回值类型不同,这样是不行的。
1、定义数组
在Java语言中,数组是一种最简单的复合数据类型(引用数据类型)。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。
数组的静态初始化:定义数组的同时就为数组元素分配空间并赋值。
例如:int ia[]={1,2,3,4};
String stringArray[]={"abc", "How", "you"};
int ia[]= new int[]{3,4,5};
等号右边相当于产生了一个数组对象,该数组有4个元素变量,这四个元素变量的取值分别是整数1、2、3、4.数组的长度等于右边{}中元素的个数。
注意:在java语言中声明数组时,无论用何种方式定义数组,都不能指定其长度,例如下面的定义是非法的。
int a[5]; //编译时将出错,在定义数组时不能指定其长度。
2、使用数组时应该注意的问题
必须对数组引用变量赋予一个有效的数组对象(通过new产生或是用{}静态初始化后产生)后,才能引用数组中的每个元素。
例:ArrayTest.java
数组越界异常
例:ArrayTest1.java
3、多维数组
Java中没有真正的多维数组,只有数组中的数组。java中的多维数组不一定是规则矩阵形式。
如:int[][] xx={{3,2},{1,5},{6}};
Java中多维数组的声明和初始化应按从高维到低维的顺序进行。
int [][] xx=new int[3][];
xx[0]=new int[3];
xx[1]=new int[2];
xx[2]=new int[1]
注意:int t[][]=new int[][4]; //非法
xx[0]和xx[1]的长度可以不一样,数组对象中也可以只有一个元素。
与一维数组一样,在声明多维数组的同时不能指定其长度。
int intA[][]={{1,2},{2,3},{3,4,5}};
int intB[3][2]={{1,2},{2,3},{4,5}}; //非法
Java提供了丰富的标准类来帮助程序设计者更方便快捷地编写程序,这些标准类组成了类包,主要有:
java.lang java.awt
java.applet java.awt.image
java.awt.peer java.io
java.net java.util
除了java.lang之外,其余类包都不是java语言所必须的。
1. java.lang
本类包中包含了各种定义Java语言时必须的类,这些类能够以其它类不能使用的方式访问java的内部。任何java程序都将自动引入这个包。其中的类包括:
² Object类:java中最原始、最重要的类,每个java类都是它的子类,它实现了每个类都必须具有的基本方法。
² 基本类型包装器:Boolean, Character, Number, Double, Float, Integer, Long。
² String类:字符串类。
² Math类:数学函数的集合。
² 执行线程:类Thread, ThreadGroup, 接口Runable。
² System类和Runtime类:可以通过类Runtime和System访问外部系统环境。System类的两个常用功能就是访问标准输入/输出流和错误流、退出程序。
² 异常和错误:类Exception, Error, 接口Throwable。
² 其它类:接口Cloneable、运行时的类等。
2. java.applet
Java Applet是Java编程的一个主要魅力,java.applet类包提供了Applet的运行机制以及一些编写Applet非常有用的方法。
3. java.awt
本类包是各种窗口环境的统一界面(AWT代表Abstract Windows Toolkit,即抽象窗口工具包),其中的类使得创建诸如窗口、菜单、滚动条、文本区、按钮以及复选框等图形用户界面(GUI)的元素变得非常容易。
4. java.awt.image
本类包能够以独立于设备的方式加载并过滤位图图像。
5. java.awt.peer
java.awt.peer是全部awt组件的对等对象接口的集合,每个接口都提供了机器相关的基本方法,awt使用这些方法来实现GUI,而不必关心是何种机器或操作系统。
6.java.io
Java的输入/输出模式是完全建立在流的基础之上的。流是一种字节从一个地方到另一个地方的单向流动,可以把流附加于文件、管道和通信链路等。java.io类包中定义的许多种流类通过继承的方式进行组织,其中也包括一些用来访问本地文件系统上的文件流类。
7. java.net
java.net类包用来完成与网络相关的功能:URL、WWW连接以及更为通用的Socket网络通信。
8. java.util
java.util类包包含了一些实用类和有用的数据结构,如字典(Dictionary)、散列表(Hashtable)、堆栈(Stack)、向量(Vector)以及枚举类(Enumeration)等,使用它们开发者可以更方便快捷地编程。
9. java.rmi包、java.rmi.registry包和java.rmi.server包
这三个包用来实现RMl(remote method invocation,远程方法调用)功能。利用RMI功能,用户程序可以在远程计算机(服务器)上创建对象,并在本地计算机(客户机)上使用这个对象。
10. java.sql包
java.sql包是实现JDBC(Java database connection)的类库。利用这个包可以使Java程序具有访问不同种类的数据库(如Oracle,Sybase,DB2,SQLServer等)的功能,只要安装了合适的驱动程序,同一个Java程序不需修改就可以存取、修改这些不同的数据库中的数据。JDBC的这种功能,再加上Java程序本身具有的平台无关性,大大拓宽了Java程序的应用范围,尤其是商业应用的适用领域。
11.java.security包、java.security.acl包和java.security.interfaces包
这三个包提供了更完善的Java程序安全性控制和管理,利用它们可以对Java程序加密,也可以把特定的Java Applet标记为“可信赖的”,使它能够具有与Java Application相近的安全权限;
12.Java.corba包和java.corba.orb包
这两个包将CORBA(Common Object Request Broker Architecture,是一种标准化接口体系)嵌入到Java环境中,使得Java程序可以存取、调用CORBA对象,并与CORBA对象共同工作。这样,Java程序就可以方便、动态地利用已经存在的由Java或其它面向对象语言开发的部件,简化软件的开发。