1.77k likes | 2.01k Views
Java 语言基础. 2003.3.12. 参考书 I. 《Java 与面向对象程序设计教程 》 《Java 与面向对象程序设计实验指导 与习题集 》 印旻 《Java 技术及其应用 》 王克宏等 高等教育出版社 《Java 与面向对象程序设计 》 印旻 清华大学出版社 《 Java 2 高级开发指南 》 Philip Heller 著 电子工业出版社. 参考书 II. 《 Java 语言规范 》
E N D
Java语言基础 2003.3.12
参考书I • 《Java与面向对象程序设计教程》 • 《Java与面向对象程序设计实验指导 与习题集》 印旻 • 《Java技术及其应用》 王克宏等高等教育出版社 • 《Java与面向对象程序设计》 印旻 清华大学出版社 • 《Java 2高级开发指南》 Philip Heller著 电子工业出版社
参考书II • 《Java语言规范》 • (美)James Gosling Bill Joy Guy Steele • 《Java程序设计语言》 • (美)Ken Arnold,James Gosling • 《Java 2 轻松进阶》 • (美)Steven Holzner • 《 Java 2从入门到精通》 • (美)John Zukowski
www.javasoft.com www.javaworld.com www.Sun.com www.GameLan.com www.EarthWeb.com www.ibm.com www.inprise.com www.oracle.com 中文Java新闻 www.sun.com.cn www.chinabyte.com www.ccw.com.cn Java FTP网站 ftp.java.sun.com 网上资源
第一部分 Java环境
. java源码 编译器 CLIENT机 . class字节码 字节码下载 Web SERVER机 解释器 Java程序的开发、部署和执行 采用典型的C/S方式
程序结构与应用模式 • JAVA运行系统 和 JVM (Java Virtual Machine) • CLIENT端执行字节码的的系统 • 代码装入、代码验证、代码执行 • JAVA虚拟机:运行字节码的逻辑机,规则 • JAVA程序的结构:类,方法,语句组…… • APPLICATION 和 APPLET • 用JAVA编写的两类程序 • 程序组成结构、运行机制不同
APPLICATION • 原理 • 由JAVA解释器独立运行字节码 • 由专门的命令行启动程序执行 • 程序中必须含有定义了main()主方法的主类 • 举例 //Filename: HelloWorld.java class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World!”); } }
包含一个main方法 -- 程序入口 交由Java解释器来使用 程序启动时,main中的代码首先执行 class ExampleProgram { public static void main(String[] args){ System.out.println("I'm a Simple Program"); } } public static void 关键字表示JVM解释器调用main启动程序而不产生类的实例,程序结束时不向JVM解释器返回数据 而对类的非static字段和方法存取时,必须产生实例
类的(必须)实例化举例 class JavaText { String text = "I'm a Simple Program"; static String text2 = "I'm static text"; String getText(){ return text; } String getStaticText(){ return text2; } public static void main(String[] args){ JavaText progInstance = new JavaText(); String retrievedText = progInstance.getText(); String retrievedStaticText = progInstance.getStaticText(); System.out.println(retrievedText); System.out.println(retrievedStaticText); } }
JAVA开发工具 • J2SDK 1.3.0 (Sun)命令行 • Forte for Java (Sun) • JBuilder 3.5\4.0(Inprise) IDE • Visual J++ 6.0(MicroSoft) • Visual Cafe 4.0(Symantec) • Visual Age for Java 3.5(IBM) • …...
Javac 编译器 用法: javac [options] filename.java 其中,[option]主要包括: -g 生成调试信息 -O 优化 -nowarn 不生成告警信息 -verbose 输出长格式的编译信息 -deprecation 过期方法的提示信息 -classpath <路径> 定义 .class文件的路径 -sourcepath <路径> 定义 .java文件的路径 -d <目录>定义 .class文件的目录
Java Application 运行程序 用法: Java [option] classname[args...] 其中,[option]主要包括: -cp -classpath <目录和zip/jar文件;> 设置应用类和资源的搜索路径 -D<名称>=<值> 重定义某一特征值 -verbose[:class|gc|jni] 允许显示长输出信息 -version 显示java产品的版本 -? -help 显示帮助信息
编译和执行Java程序 以前边的 HelloWorld.java程序为例 在命令符编译程序方式下: javac HelloWorld.java 完成后生成一名为 HelloWorld.class 的文件,该文件中存放编译后的字节码。 执行程序: java HelloWorld
其它一些工具 • Javadoc 生成Java文档 • Jdb 进入调试环境 • Javah 编译生成字节码文件和本地C/C++头文件 • rmc • …...
第二部分 Java语言特点
Java语言的特点 概括讲Java有以下10个主要特点: • 简单性:易学、易用 • 面向对象 • 完全基于类、对象:OOA,OOD,OOP • 以类的形式组织代码,数据类型 • 封装、继承、多态 • 与机器无关的字节码编译: • 体系结构中立 • 支持语言级多线程:(multi-thread)
无需用户进行内存管理 • 稳固性 • 检查数据类型的匹配,数组下标越界 • 不支持指针,保护内存数据、程序 • 自动内存管理,碎片收集 • 异常控制机制,正确处理运行时错误 • 安全性 • 字节码加密传输,客户端校验 • 解释器在client端临时分配、布置内存. • 动态性:动态联编 • 高性能:安全、稳定、移植的代价 • 高效字节码 • JIT(Just-In-Time)及时编译 • 嵌入C代码
Java与C++的比较 • 对同一个项目进行开发,据估计用Java语言比用C++语言可节省1/3到1/2的时间。 • Java与C、C++风格相同。 • Java摒弃了C、C++中的存储管理及与其相关联的Pointer操作,代之以GC(自动存储管理系统)。
Java的显著缺点: • 运行速度慢, 特别是在桌面系统上太慢 • 运行时所带的类库太庞大。 • Java标准缺少一家开放标准组织的管理(目前,SUN公司是Java规范的和标准的仲裁者) • Java的可伸缩性,即Java应用程序能否与企业的发展保持同步 • Java应用跨平台的迁移问题,即对操作系统和浏览器进行定制 令人担心的是,这些缺点成为MS C#的制胜之的。
第三部分 Java基础语法
主要内容 • 标识符及其在声明中的限定 • 文字 • 转义序列 • 关键字 • 代码块 • 表达式 • 运算符 • 数据类型(与C++有区别) • 循环结构 • 分支语句
程序语言的八大要素 任何语言都有语法规则和限定,以定义如何写 程序,特别是语言的要素及其使用方法。 • 标识符 Identifier • 常量 Literal • 关键字 Keyword • 语句 Statement • 代码块 Code block • 注释 Comment • 表达式 Expression • 运算符 Operator
1、标识符 用于唯一标识一个变量、方法或类的名称。 限定如下 • 区分大小写 • 字母、数字、_、$组成,字母、_、$开头 • 不能包含不可见的空格(Tab、Space、换行或回车) • 不能是关键字 • 尽量避免以_、$开头,原因是使用本地方法的一些C库名这样使用。
并有以下约定 • 类名 每个词首字母大写(Mammal,SeaMammal) • 函数名 第二个词开始首字母大写(getAge,setHeight) • 变量名 同上 (age,brainSize) • 常量名 每个字母均大写,且用_分隔每个词 (MAX_HEIGHT,MAX_AGE)
2、常量 用于表示永远不变的值 例: 35 • 算术数值(整数或浮点数), • 布尔值, • 字符或字符串
3、整数常量 三种格式 • 十进制 • 十六进制 以0x或0X开头 • 八进制 以0开头 例:10=0xA或0xA=012 四种存储类型: byte、short 、int(缺省32位)或long 常量后加l或L可存贮64位 例: int x=12345; int y =x*4;
4、浮点常量 两种存贮类型 • 64位double类型(缺省) • 32位float类型(常量后加f或F)
5、布尔常量 表示两种状态 true或false(关键字) boolean类型 C/C++中可用0-false, 非0-true
6、字符常量 表示单个Unicode字符, 并以‘括起来 char类型 例:‘A’、‘9’ 注: Unicode字符集为16位(0~65535), ASCII码字符集为8位
7、转义符 与C/C++类似 后斜线 \\ 退格 \b 回车 \r 续行 \ 双引号 \” 换页 \f 水平Tab \t 换行 \n 八进制字符\DDD (三位八进制数), 例: \071=57 单引号 \’ Unicode \uHHHH (四位十六进制数), 例: \0039=57 举例:String escapeDemo=new String(“Name\t\tID\n\“Joe\ Smith \”\t\t\“999\””);
8、字符串常量 表示字符序列 (“”) 以类String和类StringBuffer的对象方式存贮 C/C++中使用字符数组存贮
9、关键字 预定义的一些标识符 分类: • 数值声明(boolean,float,int) • 循环 (continue,while,for) • 条件 (if,else,switch) • 例外 (try,throws,catch) • 结构 (class,extends,implements) • 修饰符和存取(private,public,transient) • 杂项 (true,null,super) • ......
10、语句 编译器可以识别的单个命令或代码行 物理上的代码行和语句有区别(非一一对应) 用;分隔语句 编译器只认; 而不关心语句的长度 举例 • x=(y+z)/q; • x= (y+z )/q; 在字符串中通过\连接多行的字符串
11、代码块 一组语句按功能划分为一个单元(以{}界定) 代码块可以嵌套 举例 public frmResolver() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } }
12、注释 行注释 // (单行) 块注释 /* */ (多行) 文本注释 /** */ (由Javadoc生成文档)
13、表达式 标识符、 关键字、符号和运算符的有意义的组合体。 出现在赋值符号的右边, 类型分为: • 变量赋值 • 运算符表达式 • 方法调用 • 对象分配 举例: s=“Hello World!”; x=1234; y=(x*5)/2; value=getValue(); Mammal m=new Mammal();
14. 运算符 对操作数完成特定功能的特殊符号 • 算术运算符(整数、浮点数) • 双目运算符 +,-,*,/,%(取余) +号:可连接字符串 “He”+“llo” • 单目运算符(自运算符) ++,- -,运算符的位置决定自运算的顺序 a=3,b=5; c=(a++)*b; a=?,c=? • 移位:<<,>>,>>>不带符号右移;A>>>B
逻辑运算符 • 表示两个布尔量的逻辑关系,结果仍为布尔量 • 双目:(与、或) • 非简洁运算符:&,|,^ nA> nB | fn(nA) • 简洁运算符:&&,|| nA> nB || fn(nA) (短路) • 单目:!(否) 举例 if(!isHighPressure&&(Temperature1> Temperature2)){} boolean1=(x>y)||(a>b); boolean2=(10>5)&(5>1);
关系运算符 • 对两运算量大小关系的比较,结果是布尔量 • >,<,>=,<=,!=,==(与=不同) 举例 m1=new mammal(); m2=new mammal(); boolean b1=m1==m2; //b1 is false m1=m2; boolean b2=m1==m2; //b2 is true 更多情况下,使用equals()来比较对象
三目条件运算符(?:) • D=表达式A?表达式B:表达式C • A为真,返回表达式B • A为假,返回表达式C • 总是返回B,C中的长类型 举例 int x=3,y=4,max; max=(x>y)?x:y;
赋值运算符 • =,+=,-=,*=,/=,%=,&=,|=,^= 举例: a+=b => a = a + b; a -= b => a = a - b; int y=2; y*=2; boolean b1=true; b1&=b2;
位运算符 两种:移位和布尔 Java中整数是有符号的,移位保护符号位(>>>除外) C/C++中整数缺省是有符号的,移位改变符号位 ~ ~op1 按位取反 << op1<<op2 op1左移op2位 >> op1>>op2 >>> op1>>>op2 op1带0填充右移op2位 & op1&op2 与 | op1|op2 或 ^ op1^op2 异或 <<= op1<<=op2 op1=op1<<op2 >>= op1>>=op2 op1=op1>>op2 >>>= op1>>>=op2 举例:short i=13; i=i<<7; i>>=3;
运算符的优先级 • 算术运算符 > 关系运算符和 大部分逻辑运算符(除了!号)> 赋值运算符 • 括号最优先
为实体,用于表示可以存储在内存中的特殊类型的值,并由编译器以一种特殊的方式翻译。 分为 • 基本:数值型、布尔型和字符型 (无需特殊库,编译器就可以理解) • 复合:数组和字符串 (需要特殊库的支持)
1. 变量 声明格式 数据类型 标识符 [=缺省值]; 举例:int p; float x,y=4.1,z=2.2; boolean endOfFile=false; char char1=‘T’; Java为强类型语言,变量先声明,后使用 声明位置任意
2.基本数据类型 • 数值型 类型 大小(位) 范围 byte 8 小符号整数(-128~127) short 16 短符号整数(-32768~32767) int 32 符号整数(-2.14e+9~2.14e+9) long 64 长符号整数(-9.22e+18~9.22e+18) float 32 浮点数(1.402e-45~3.402e+38) double 64 双精度浮点数(4.94e-324~1.79e+308) 缺省值为0, C/C++中为随机数