《Java讲义》.docx
《《Java讲义》.docx》由会员分享,可在线阅读,更多相关《《Java讲义》.docx(44页珍藏版)》请在冰豆网上搜索。
《Java讲义》
《Java教案》
教师:
吉胜军
西安财经学院信息学院
Chap1.绪论
1、Java历史及发展
Java是一种解释型的、面向对象的编程语言。
历史:
1991年,SUNMicroSystem公司的JameGosling、BillJoe等人为在电视、控制烤箱等家用消费类电子产品上进行交互式操作而开发了一个名为Oak的软件。
发展:
面向网络应用,类库不断丰富,性能不断提高,应用领域不断拓展。
(1994年以来)
应用:
适于开发各种应用,尤其是基于网络的应用、嵌入式应用等。
2、Java语言特点
Java=“C++”-“复杂性和奇异性”+“安全性和可移植性”
(1)面向对象
Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。
对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
(2)操作平台无关性
严格的语言定义:
没有“依据机器的不同而不同”或“由编译器决定”等字眼,最后的目标码都是一致的。
Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。
这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。
不同的操作系统有不同的虚拟机。
它类似一个小巧而高效的CPU。
Bytecode代码是与平台无关的是虚拟机的机器指令。
Java字节代码运行的两种方式:
interpreter(解释方式)
Just-in-time(即时编译):
有代码生成器将字节代码转换成本机的机器代码,然后可以以较高速度执行.
(3)安全问题
Java是在网络环境下使用的语言,一个安全的网络至少要防止以下几种破坏的可能性:
毁灭系统资源
消耗系统资源
挖掘系统或个人机密
骚扰正常工作的进行
Bytecode的运行
加载代码
由class(Bytecode)loader完成。
校验代码
由Bytecodeverifier完成。
执行代码
由runtimeinterpreter完成。
(4)多线程
Java提供现成的类Thread,只要继承这个类就可以编写多线程的程序。
多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。
通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。
(5)可移植性(跨越多个平台)
(6)分布性(克服空间上的障碍)
(7)高性能(相对于其他解释型语言)
(8)健壮性(
(9)Java与C及C++的区别
不再有全局变量
不再有#include和#define等预处理功能
不再有structure、union及typedef等
不再有函数、不再有指针、不再有多重继承
不再有goto语句
不再有操作符重载(OperatiorOverloading)
取消自动类型转换,要求强制转换
自动进行内存管理
3.Java开发工具包括:
Javac:
Java编译器,用来将java程序编译成
Bytecode。
Java:
Java解释器,执行已经转换成Bytecode的
java应用程序。
Jdb:
Java调试器,用来调试java程序。
Javap:
反编译,将类文件还原回方法和变量。
javadoc:
文档生成器,创建HTML文件。
Appletviwer:
Applet解释器,用来解释已经转换成
Bytecode的java小应用程序。
1.Java程序结构:
package语句:
零个或多个,必须放在文件开始
import语句:
零个或多个,必须放在所有类定义之前
publicClassDefinition:
零个或一个
ClassDefinition:
零个或多个
InterfaceDefinition:
零个或多个
类个数:
至少一个类,最多只能有一个public类
源文件命名:
若有public类,源文件必须按该类命名
标识符:
区分大小写
2.Java应用程序(JavaApplication)
类库支持:
引用其他类。
类定义:
定义程序所需的类及接口,包括其内部的变量、方法等。
main()方法:
应用程序的入口,与标准C中main()函数的地位是一样的。
一个应用程序有且只有一个main()方法,main()方法必须包含在一个类中,该类即为应用程序的外部标志。
程序注释:
与C++类似,/*…*/
//…
3.Java小程序(JavaApplet)
类库支持:
继承Applet类,引用其他类。
类定义:
定义程序所需的类及接口,包括其内部的变量、方法等。
init()方法:
初始化,自动调用,只执行一次。
start()方法:
初始化后,重入等都将自动调用。
Applet的主体,在其中可以执行一些任务或启动相关的线程来执行任务,如paint()方法等。
stop()方法:
离开Applet所在页面时调用,以停止消耗系统资源。
4.JavaApplication举例
publicclassHelloWorldApp
{publicstaticvoidmain(Stringargs[])
{
System.out.println(“HelloWorld!
”);
}
}
编辑存盘:
文件名和公共类名(用public声明)
要一致HelloWorldApp.java
编译程序:
javacHelloWorldApp.java
运行程序:
javaHelloWorldApp
运行结果:
HelloWorld!
publicclassHelloWorldApp
{publicstaticvoidmain(Stringargs[])
{
System.out.println(“HelloWorld!
”);
}
}
声明一个类:
publicclassHelloWorldApp{},类名第一个字母大写。
一个类中可有很多方法,main方法是运行程序的第一个方法,方法名的第一个字母小写。
System.out.println是向屏幕输出,相当于C中的printf()。
classCommArg
{
publicstaticvoidmain(Stringargs[])
{
//Displaycommandarguments
inti;
if(args.length>0)//havesomecommandarguments
{
for(i=0;i{
System.out.println("arg["+i+"]="+args[i]);
}
}
else//nocommandargument
{
System.out.println("Noarguments!
");
}
}
}
命令行参数:
main(Stringargs[]),与标准C中main(intargc,char*argv[])相似。
字符串的拼接:
"arg["+i+"]="+args[i]。
编译程序:
javacHelloWorldApp.java
运行程序(命令行参数获取):
javaCommArgfirstsecondthird
运行结果:
arg[0]=first
arg[1]=second
arg[2]=third
5.Applet举例
importjava.applet.*;
importjava.awt.*;
publicclassHelloAppletextendsApplet
{
publicStrings;
publicvoidinit()
{
s=newString(“HelloWorld!
”);
}
publicvoidpaint(Graphicsg)
{
g.drawString(s,25,25);
}
}
编辑存盘:
文件名和主类名一致
编译代码:
javacHelloApplet.java
编写HTML文件:
HelloApplet.html
HelloWorld
Java小应用程序不能直接执行和使用,必须要在浏览器中执行。
运行applet程序:
1.appletviewerMyTest.html
2.在浏览器中运行
运行结果:
HelloWorld!
理解程序:
import语句相当于C语言中的include。
每一个applet都是java.applet.Applet的子类,用extends继承。
applet中没有main()方法。
当applet被浏览器运行时,init()、start()方法等自动执行,再调用paint()方法。
在applet中与屏幕输出有关的操作通过Graphics对象来实现。
一个Java源文件内最多只能有一个public类,称为主类,且文件名必须和它同名。
importjava.util.*;
importjava.awt.*;
importjava.applet.*;
importjava.text.*;
publicclassMyTestextendsApplet
{
Strings1,s2,s3,s4;
publicvoidinit()
{
s1=getParameter("p1");
s2=getParameter("p2");
s3=getParameter("p3");
s4=getParameter("p4");
}
publicvoidpaint(Graphicsg)
{
g.drawString(s1,10,10);
g.drawString(s2,10,30);
g.drawString(s3,10,50);
g.drawString(s4,10,70);
}
}
编辑存盘:
文件名和主类名一致
编译代码:
javacMyTest.java
编写HTML文件:
MyTest.html
AppletParameterTest
运行applet程序:
1.appletviewerMyTest.html
2.在浏览器中运行
运行结果:
1111111
2222222
3333333
4444444
理解程序:
从页面中获取Applet参数:
s1=getParameter("p1");
在页面中设置Applet参数:
包、类、变量、方法等命名:
要体现各自的含义。
包名全部小写,io,awt
类名第一个字母要大写,HelloWorldApp
变量名第一个字母要小写,userName
方法名第一个字母要小写,setName
程序书写格式:
保证良好的可读性,使程序一目了然。
大括号{}的使用与对齐语句段的对齐
在语句段之间适当空行
程序注释:
帮助了解程序的功能。
类注释变量注释
方法注释语句注释
语句段注释
Chap2.Java语言基础
任何程序设计语言,都是由语言规范和一系列开发库组成的。
如标准C,除了语言规范外,还有很多函数库;MSVisualC++更是提供了庞大的APIs和MFC。
Java语言也不例外,也是由Java语言规范和Java开发类库(JFC)组成的。
学习任何程序设计语言,都是要从这两方面着手,尤其是要能够熟练地使用后者。
1、Java数据类型
2、Java运算符和表达式
3、Java控制语句
4、Java类定义规范
5、Java数组
6、Java开发类库组成
1、Java数据类型
(1)标识符
程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:
类名、变量名、常量名、方法名、…
Java语言中,标识符是以字母,下划线(_),美元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。
合法的标识符
identifieruserNameUser_Name
_sys_value$change
非法的标识符
2mailroom#class
(2)保留字
具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reservedword)。
abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinallyifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhile
(3)常量
用文字串来表示,具有不同的类型,其定义格式为:
finalTypevarName=value[,varName[=value]…];
(4)变量
程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为:
TypevarName=value[,varName[=value]…];
作用域:
指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:
局部变量、类变量、方法参数、例外处理参数。
在一定的作用域内,变量名必须唯一。
(5)数据类型
基本类型:
所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。
数据类型所占位数数的范围
char160~65535
byte8-27~27-1
short16-215~215-1
int32-231~231-1
long64-263~263-1
float323.4e-038~3.4e+038
double641.7e-308~1.7e+308
引用类型:
§在Java中“引用”是指向一个对象在内存中的位置,在本质上是一种带有很强的完整性和安全性的限制的指针。
§当你声明某个类,接口或数组类型的一个变量时,那个变量的值总是某个对象的引用或者是null引用。
§指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对象的缩影,还提供其他信息。
§指针可以有++、--运算,引用不可以运算。
布尔型数据只有两个值true和false,且它们不对应于任何整数值
布尔型变量的定义如:
booleanb=true;
字符常量
字符常量是用单引号括起来的一个字符,如‘a’,‘A’;
字符型变量
类型为char,它在机器中占16位。
字符型变量的定义如:
charc=‘a’;//指定变量c为char型,且赋初值为'a'
整型常量
1.十进制整数
如123,-456,0
2.八进制整数
以0开头,如0123表示十进制数83,-011表示十进制数-9。
3.十六进制整数
以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18。
整型变量
类型为byte、short、int或long,byte在机器中占8位,short占16位,int占32位,long占64位。
整型变量的定义如:
intx=123;//指定变量x为int型,且赋初值为123
byteb=8;shorts=10;longy=123L;longz=123l;
实型常量
1.十进制数形式
由数字和小数点组成,且必须有小数点,如0.123,.123,123.,123.0
2.科学计数法形式
如:
123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。
实型变量
类型为float或double,float在机器中占32位,double占64位。
实型变量的定义如:
floatx=0.123;//指定变量x为float型,且赋初值为0.123
doubley=0.123F;doublez=0.123f;
publicclassAssign
{
publicstaticvoidmain(Stringargs[])
{
intx,y;
byteb=6;
floatz=1.234f;
doublew=1.234;
booleanflag=true;
charc;
c=‘A‘;
x=12;
y=300;
......
}
}
自动类型转换
整型、实型、字符型数据可以混合运算。
运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级:
低----------------------------------------------------->高
byte,short,char—>int—>long—>float—>double
如果从高级转换成低级,则需要强制类型转换,但会导致溢出或精度下降。
如:
inti=8;byteb=(byte)i;
2、Java运算符和表达式
(1)运算符
算术运算符:
+,―,*,/,%,++,――
关系运算符:
>,<,>=,<=,==,!
=
布尔逻辑运算符:
!
,&&,||
位运算符:
>>,<<,>>>,&,|,^,~
赋值运算符:
=,及其扩展赋值运算符如+=,―=,*=,/=等。
条件运算符:
?
:
其它:
包括分量运算符·,下标运算符[],实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等。
由于数据类型的长度是确定的,所以没有长度运算符sizeof。
2)表达式
表达式是由操作数和运算符按一定的语法形式组成的符号序列。
一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;
表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。
例:
xnum1+num2a*(b+c)+d
3.14x<=(y+z)x&&y||z
(3)运算符的优先次序
1).,[],()9)&
2)++,--,!
~,instanceof10)^
3)new(type)11)|
4)*,/,%12)&&
5)+,-13)||
6)>>,>>>,<<14)?
:
7)>,<,>=,<=15)=,+=,-=,*=,/=,%=,^=
8)==,!
=16)&=,|=,<<=,>>=,>>>=
3、Java控制语句
§分支语句:
if-else,switch
§循环语句:
while,do-while,for
§与程序转移有关的其它语句:
break,continue,return
§例外处理语句:
try-catch-finally,throw
条件语句if-else
if(boolean-expression1)
{
statements1;
}
elseif(boolean-expression2)
{
statements2;
}
…
else
{
statementsN;
}
布尔表达式boolean-expression是任意一个返回布尔数据类型的表达式,而且必须是(比C或C++要严格)。
与C或C++一样,每个单一语句后面都要有分号。
为了增强程序的可读性,应将if或else后的语句用{}括起来。
else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。
n多分支语句switch
switch(expression)
{
casevalue1:
{
statements1;
break;
}
……
casevalueN:
{
statementsN;
break;
}
[default:
{
defaultStatements;
}]
}
§表达式expression的返回值类型必须是这几种类型之一:
int、byte、char、short。
§case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。
§default子句是任选的。
§break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。
如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支。
§switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。
循环语句while(当型循环)
[initialization]//初始化条件
while(termination){//循环条件
body;//循环体
[iteration;]//迭代,变更循环条件
}
当表达式termination为true时,执行{}中的语句,否则终止循环。
循环语句do-w