海外师资、北美技术、外企经验达内外企 IT培训
1www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
软 件 工 程 师 培 训 系 列 教 材
Java 语言基础版权所有,翻印必究
CONFIDENTIAL
课程概述北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层
Email:guangzhou@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
达内外企 IT培训 铸就辉煌 IT人生当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
3www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程概述
Java开发环境介绍及编程入门
标示符、关键字及数据类型
表达式及流程控制
数组
方法的定义和调用
面向对象编程
Java语言高级特性
异常处理 (选学 )
AWT & Swing(选学 )
I/O流及文件读写 (选学 )
海外师资、北美技术、外企经验达内外企 IT培训
4www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程框架
Java语言基础开发环境介绍及编程入门标示符、关键字及数据类型表达式及流程控制 数组面向对象编程异常处理
Exceptions
开发图形界面 AWT事件模型 Swing 组件介绍
Java图形编程文件和 I/O流面向对象编程 Java语言高级特性基本数据结构及算法海外师资、北美技术、外企经验达内外企 IT培训
5www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程目标
掌握程序设计语言开发的一般步骤
编译并运行 Java应用程序
理解并使用 Java的在线帮助文档
理解 Java语言的语法元素和结构特点
理解面向对象程序设计的一般特性,并且能使用这些特性
理解并使用 Java异常处理机制
开发一个图形用户界面
理解 Java事件处理模型
了解常用的 swing组件
了解 Java I/O流
掌握对文件的读写操作海外师资、北美技术、外企经验达内外企 IT培训
6www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
开发环境
Sun Ultra Workstations/PCs
Solaris/Linux
J2SE 5.0
NetBeans/JBuilder/WSAD/EClipse
Oracle 9i
CONFIDENTIAL
Module 1
Java开发环境介绍及编程入门北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
世上没有绝望的处境,只有对处境绝望的人海外师资、北美技术、外企经验达内外企 IT培训
8www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
了解高级语言开发的一般步骤
正确安装及配置 Java开发和运行环境
理解 JVM的运行机制
了解 java语言的垃圾回收机制
编写并运行第一个 java代码海外师资、北美技术、外企经验达内外企 IT培训
9www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
程序语言发展历程机器语言:二进制机器代码,不便理解,不好记忆,
与硬件平台相关,不具有可移植性。
汇编语言:用助记符号来描述,与机器代码一一对应,
能够理解,但同样不可移植。
高级语言:按自然语言的语法风格书写程序,方便理解,
在原代码的层次上可以实现跨平台移植。
10001001 11100101
mov dptr,#2000
if(a>b)
max=a;
else
max=b;
海外师资、北美技术、外企经验达内外企 IT培训
10www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
高级语言开发过程编辑原代码 编译 执行原码机器码 机器码 机器码
CPU CPU CPU
跨平台
01
00
11
01
10
10
00
11
00
11
01
01
不跨平台海外师资、北美技术、外企经验达内外企 IT培训
11www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java开发基本术语
JDK
JRE
JVM
JDK:(Java Development kit)
包含 Java运行的基本类库和开发命令
,安装 JDK可以进行完整的 Java开发。
JRE:(Java Runtime Environment)
包含 Java运行的基本类库和一些运行命令,安装 JRE可以运行编译好的 Java
程序。
JVM:(Java Virtual Machine)
Java语言内部运行的核心。
海外师资、北美技术、外企经验达内外企 IT培训
12www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
下载并安装 JDK
1.从以下网站可下载 JDK
http://java.sun.com
根据开发机器的不同,请下载相应平台下的 JDK
2,Install JDK
Windows,run the executable
Unix,run the shell
海外师资、北美技术、外企经验达内外企 IT培训
13www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JDK 下载页面
Win 32平台 JDK下载
Linux平台 JDK下载海外师资、北美技术、外企经验达内外企 IT培训
14www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
配置 Java环境变量
3,设置如下三个环境变量,JAVA_HOME,CLASSPATH,PATH
Windows 2000/NT/XP系统:
开始 —设置 —控制面板 —系统 —高级 —环境变量海外师资、北美技术、外企经验达内外企 IT培训
15www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
配置 Java环境变量
Unix系统:
csh,添加以下三行命令到 $HOME/.cshrc文件中
setenv JAVA_HOME /usr/java...
setenv PATH $JAVA_HOME/bin:...
setenv CLASSPATH,
bsh/ksh:添加以下三行命令到 $HOME/.profile文件中
JAVA_HOME=/usr/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.
export JAVA_HOME PATH CLASSPATH
海外师资、北美技术、外企经验达内外企 IT培训
16www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java虚拟机 (JVM)
Bytecode
JVM
CPU
提供字节码( bytecode)的运行环境屏蔽底层平台的差异海外师资、北美技术、外企经验达内外企 IT培训
17www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JVM的作用海外师资、北美技术、外企经验达内外企 IT培训
18www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java垃圾收集的概念
Java语言使用 new运算符来分配内存空间,没有动态内存分配的概念。
Java系统线程自动处理无用内存空间的垃圾收集
Java程序员只能建议,但不能强制 JVM去执行垃圾收集程序,使用下面的代码:
java.lang.System.gc()/java.lang.Runtime.gc()
海外师资、北美技术、外企经验达内外企 IT培训
19www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java程序的运行过程
HelloWorldApp.java
HelloWorldApp.class
javac
java跨平台不跨平台海外师资、北美技术、外企经验达内外企 IT培训
20www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
My First Java Program
package day01; //package declaration
/**
*This is my first java program,In this program,I defined a
variable—*name with type String,and then,I print,Hello
Everybody!” and *name?s value to screen.
*/
public class MyFirstJavaProgram { //class declaration
public static void main(String[ ] args) { //execution entry
String name="tony tang";
System.out.println("Hello Everybody! ");
System.out.println("my name is:"+name);
}//main method end!
}//class end!
海外师资、北美技术、外企经验达内外企 IT培训
21www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java 开发基本概念
源文件
1,只能包含一个顶层的 public类或接口。
2,源文件的文件名必须跟这个 public 类或接口名相同(如果存在的话),并且以,java作为后缀名。
包
1,将类和接口组织在一起的一个实体。
2,在文件系统中用一层目录(文件夹)来描述。
海外师资、北美技术、外企经验达内外企 IT培训
22www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
编译和运行 MyFirstJavaProgram
1,保存原代码文件到以下位置:
e:\java_source\day01\MyFirstJavaProgram.java
2,改变当前目录到 e:\java_source
3,使用 javac命令编译 MyFirstJavaProgram.java文件
javac day01\ MyFirstJavaProgram.java
4,运行 MyFirstJavaProgram
java day01.MyFirstJavaProgram
海外师资、北美技术、外企经验达内外企 IT培训
23www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
重要的 Java命令
编译 java文件成 class文件
$javac <options> <source files>
执行一个类文档
$java [-options] class [args...]
生成 java程序文档
$javadoc [options] [packagenames] [sourcefiles] [@files]
生成 /列出 /展开 /更新 一个 jar存档文件
$ jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C directory] files,..
海外师资、北美技术、外企经验达内外企 IT培训
24www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JDK提供的开发类库
java.lang
java.awt
javax.swing
java.awt.event
java.io
java.util
海外师资、北美技术、外企经验达内外企 IT培训
25www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java API 文档
Download it from http://java.sun.com
海外师资、北美技术、外企经验达内外企 IT培训
26www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
怎样建立 Java开发环境
Java语言的关键特性
Java虚拟机 (JVM)的功能
Java的垃圾收集机制
常用 Java开发命令和开发工具包
编写并运行一个 Java应用程序
CONFIDENTIAL
Module 2
标示符、关键字和数据类型北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
你可以选择这样的,三心二意,,
信心、恒心、决心;创意、乐意海外师资、北美技术、外企经验达内外企 IT培训
28www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
-?程序注释
标示符
关键字
基本数据类型海外师资、北美技术、外企经验达内外企 IT培训
29www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
注 释
三种类型的注释
//单行注释
/*这是一段多行注释,
它跨越了多个行
*/
/** 这是一个文档注释,可以使用 JDK的 javadoc工具从原文件中抽取这种注释形成程序的帮助文档。
*/
使用 javadoc命令建立 HTML格式的程序文档
javadoc [options] [packagenames] [sourcefiles] [@files]
海外师资、北美技术、外企经验达内外企 IT培训
30www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的标示符
1,什么是标示符?
在 java语言中用来给一个类、变量或方法命名的符号
2,标示符的命名规则:
以字母,“_”或,$”符号开头可以包含字母,“_”,,$”和数字符号大小写敏感不能与保留关键字冲突没有长度限制例如,identifier _sys_ var1 $char userName
user_ name
海外师资、北美技术、外企经验达内外企 IT培训
31www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的标示符(续)
3,命名 约定,
类名,接口名,每个单词的首字母应该大写。
class MyFirstClass
interface Weapon
字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写。
boolean isWoman
void setName(String name)
常量:全部用大写字母表示。
public final int GREEN
public final int HEAD_ COUNT
Java包( Package):它们全都字母小写。
package java.awt.event
海外师资、北美技术、外企经验达内外企 IT培训
32www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java中的关键字关键字列表:
abstract boolean break byte case catch char
class continue default do double else extends
enum false final finally float for if implements
import instanceof int interface long native new
null package private protected public return short
static super switch synchronized this throw
throws transient true try void volatile while
保留字,const,goto
所有的关键字都是小写,friendly,sizeof不是 java的关键字海外师资、北美技术、外企经验达内外企 IT培训
33www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数据类型基本数据类型( primitive type)
引用数据类型( reference type)
海外师资、北美技术、外企经验达内外企 IT培训
34www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的基本数据类型
boolean 布尔值( true 或 false)
byte 8-bit 整形值
short 16-bit 整形值
int 32-bit 整形值
long 64-bit 整形值
char 16-bit unicode编码的字符
double 64-bit 浮点数值
float 32-bit 浮点数值海外师资、北美技术、外企经验达内外企 IT培训
35www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔类型 -boolean
一个 boolean类型的变量用来表示一个或真或假的关系
一个 boolean 类型变量的值必须是 true 或 false二者之一
boolean isCorrect = true;
海外师资、北美技术、外企经验达内外企 IT培训
36www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
文本数据类型 — char和 String
char
1,其实就是一个无符号的 16位整形,其范围为 0~ 65535,用来存储该字符的 Unicode编码值,因为 Unicode 编码中包含汉字的编码,所以一个
char类型的变量也可以存储一个汉字字符。
2,在代码中直接给出的一个字符值必须用单引号括起来。
char zhChar =?中’;
char enChar =?a?;
char ucChar =?\u0060?;
3,对某些不方便直接书写或直接书写有歧义的字符,java语言规定用转义字符给出。
4,可以把 char类型数据当作整数数据来操作。例如:
int three=3;
char one=?1?;
int four=three+one;
海外师资、北美技术、外企经验达内外企 IT培训
37www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
转义字符转义字符 描述
\ddd 1到 3位 8进制数所表示的字符 (ddd)
\uxxxx 1到 4位 16进制数所表示的字符 (xxxx)
\? 单引号字符
\ 双引号字符
\\ 反斜杠字符
\r 回车
\n 换行
\f 走纸换页
\t 横向跳格
\b 退格
Java语言中转义字符都以 ‘ \‘给出常用转义字符列表:
海外师资、北美技术、外企经验达内外企 IT培训
38www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
字符串类型 ----String
String
1,是 JDK中定义的一个类,不是基本数据类型
2,一个 String对象可以用来存储多个字符,在程序中直接给出一个 String值要用双引号括起来
String myName =,Tony Tang”;
3,可以使用 + 运算符把多个 String数据连接起来,并且还可连接其他类型的数据例如:
int count=7;
System.out.println("Counted " + count + " chars." );
海外师资、北美技术、外企经验达内外企 IT培训
39www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
整形数据( byte,short,int and long)
三种形式给一个整形变量直接赋值,
十进制、八进制和十六进制
直接给出的值默认是 int类型。
长整形值应该在数字后面跟上 ‘ l? 或 ‘ L?标示。
public void testIntType() {
int ia = 0x55; //十六进制
int ib = 011; //八进制
byte bb = 0x771;
byte ba = (byte)0x771;
long la = 1234567L; //十进制
}
海外师资、北美技术、外企经验达内外企 IT培训
40www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
整形数据在计算机内的存储方式计算机能存储的值都是二进制值,整形数据在计算机中的存储方式分两种情况讨论:
short a=57; 0000 0000 0011 1001
1111 1111 1100 0111
1,正整数,存储该数字的二进制原码。
short a=-57;
2,负整数,存储该数字的二进制补码。
int a=57; 0000 0000 0000 0000 0000 0000 0011 1001
int a=-57; 1111 1111 1111 1111 1111 1111 1100 0111
高字节位 低字节位海外师资、北美技术、外企经验达内外企 IT培训
41www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
浮点数据类型 —
float 和 double
直接在程序中书写的浮点数默认为 dobule类型。
float 类型的数据占 32位长度( 4 Bytes)
double类型的数据占 64位长度( 8 Bytes)
直接表示一个 float 类型的值必须在数字后跟?f? 或‘ F?
直接表示一个 double 类型的值可以在数字后跟?d? 或‘ D?
可以用科学计数法表示,如,123.456e3或 123.456E3
public void testFloatType() {
float fa = 123.4f;
float fb = 12.5E300F;
float fc = (float)12.5E300;
double da = 123D;
double db = 123.456D;
double dc = 123.45e301;
}
海外师资、北美技术、外企经验达内外企 IT培训
42www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
基本数据类型的取值范围
Type Bits Bytes Minimum Range Maximum Range
boolean 8 1 Only two values,true or false
byte 8 1 -27 27 - 1
short 16 2 -215 215 - 1
char 16 2 0 216-1
int 32 4 -231 231 - 1
long 64 8 -263 263 - 1
float 32 4 Not needed Not needed
double 64 8 Not needed Not needed
海外师资、北美技术、外企经验达内外企 IT培训
43www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
变量的声明和赋值
package sample;
public class Assign {
public static void main(String args[]) {
int x,y; // 声明 int类型变量 x和 y
float z = 3.414f; // 声明 float类型变量并赋值
double w = 3.1415; //声明 double类型变量并赋值
boolean truth = true; //声明 boolean类型变量并赋值
char c; //声明 char类型变量 c
String str; //声明 String类型的引用
String str1 =,bye”; //声明 String类型的引用并且实例化
c =?A?; // 给 c变量赋值
str =,Hi out there!”; // 给 str实例化
x = 6;
y = 1000;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
44www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
数组 Array,类 classe,接口 interface属于 reference 类型。
reference 类型的变量是所引用的对象的内存地址。
例子,class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public MyDate( int day,int month,int year) {,.,}
public void print() {,.,}
}
public class TestMyDate {
public static void main( String[] args) {
MyDate my_ birth = new MyDate( 22,7,1964);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
45www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
创建一个类对象:
MyDate my_ birth = new MyDate( 22,7,1964);
海外师资、北美技术、外企经验达内外企 IT培训
46www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
两个引用变量的 赋值 将会产生如下结果:
int x = 7;
int y = x;
MyDate s = new MyDate( 22,7,1964);
MyDate t = s;
t = new MyDate( 22,12,1964);
两个变量指向同一个对象:
海外师资、北美技术、外企经验达内外企 IT培训
47www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
对象气球引用对象 对象引用对象对象就像一个充满氢气的气球,我们没有办法直接去得到它,要想对它的使用都必须通过一根连着它的绳子来访问,这根绳子就是对象的引用。
一根绳子同时只能连着一个气球,就像一个引用同时只能指向一个对象;
可以用多根绳子同时连接一个气球,也就是可以有多个引用同时指向同一个对象;
如果某个气球没有任何绳子连着它,那它就会飞走,同样,某个对象如果没有引用连接它,它就会成为垃圾,等着被 java的垃圾收集器回收;
如果某根绳子没有连接任何气球,那么它就是一个空引用,对它的访问没有意义。
同样,某个引用如果没有指向对象,那么对它的访问将会抛出 NullPointerException
引用 null
海外师资、北美技术、外企经验达内外企 IT培训
48www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章中,我们讨论了以下问题,
不同类型的注释
标示符和关键字
基本数据类型
引用类型
对象的概念海外师资、北美技术、外企经验达内外企 IT培训
49www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个程序,要求定义出 boolean,int,char,double,float,String
类型的变量并赋初值,然后将这些值输出出来。
2,程序中定义有如下语句,画出这些整形值在内存空间中的存储状态。
int a=74;
int b=-132;
int c=0x2B8F;
3,下列哪些赋值语句是错误的:
(1) byte b= 0x175;
(2) int i=0x27f;
(3) char c=123;
(4) int a=?真 ’ ;
(5) float f=12.345E2;
(6) boolean f=0;
海外师资、北美技术、外企经验达内外企 IT培训
50www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
4,判断下列语句中的 a和 b的值是否相等:
(1) int a=0; int b=?0‘;
(2) int a=0; char b=?\u0000‘;
(3) int a=123; char b=?\u007B‘;
(4) int a=0x123; char b=123;
(5) int a=3+?5‘; char b=‘8‘;
(6) int a=?3‘+‘5‘; char b=?8‘;
(7) char a=?\u0000‘; char b=?0‘;
CONFIDENTIAL
Module 3
表达式及流程控制语句中国北京:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号 中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
中国上海:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C区 9楼邮编,200001
Email,shanghai@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
你可以这样理解 impossible(不可能) ——
I'm possible (我是可能的)
海外师资、北美技术、外企经验达内外企 IT培训
52www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
Java的运算符
基本数据类型的赋值
布尔表达式
选择结构 (if else,switch)
循环结构( while,do…while,for )
使用 continue和 break进行循环控制海外师资、北美技术、外企经验达内外企 IT培训
53www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
常用运算符列表序号 描述 运算符 结合性
1 括号和引用 () [ ] 。 左?右
2 单目运算符 ++ - - ! ~ 右?左
3 算术运算符 * / % + - 左?右
4 关系运算符 > >= < <= == != 左?右
5 逻辑运算符 && || & | 左?右
6 位运算符 << >> >>> & | ^ 左?右
7 条件运算符?,/
8 赋值运算符 = += -= *= /= %= >>= >>>= <<= &= |= ^= 右?左海外师资、北美技术、外企经验达内外企 IT培训
54www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
算术运算符说明:
Java对,+”运算符进行了扩展,使它能够进行字符串的连接,
如,abc”+“de”,得到串,abcde”
++i,--i 在使用 i前,先使 i的值改变
i++,i-- 在使用 i后,再改变 i的值海外师资、北美技术、外企经验达内外企 IT培训
55www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
关系运算符说明:
Java中,任何数据类型的数据(包括基本类型和引用类型)都可以通过 ==或 !=来比较是否相等 (这与 C,C++不同 )。
关系运算的结果返回 true或 false,而不是 C,C++中的 1或 0。
等于和不等于适用于所有内建的数据类型,但其他比较不适用于
boolean类型。
海外师资、北美技术、外企经验达内外企 IT培训
56www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔逻辑运算符逻辑运算符 AND( &&),OR( ||)以及 NOT( !)能生成一个布尔值( true或 false)
说明:
只可将 AND,OR或 NOT应用于布尔值。不可将一个非布尔值当作布尔值在逻辑表达式中使用例如:以下是非法的。
int i=1,j=2;
i && j
i || j
!i
海外师资、北美技术、外企经验达内外企 IT培训
57www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔逻辑运算符说明:
对浮点数字的比较是非常严格的。
短路运算:
1,a && b && c
2,a || b || c
3,x=y=1 a=5,b=3,c=2,d=1
(x=a<b) &&(y=c<d) x,y =?
海外师资、北美技术、外企经验达内外企 IT培训
58www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符运算符 用法 描述
~ ~ op 按位取反
& op1 & op2 按位与
| op1 | op2 按位或
^ op1 ^ op2 按位异或
>> op1 >> op2 op1右移 op2位
<< op1 << op2 op1左移 op2位
>>> op1 >>> op2 op1无符号右移 op2位海外师资、北美技术、外企经验达内外企 IT培训
59www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符( ~,&,|,^)
海外师资、北美技术、外企经验达内外企 IT培训
60www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符( >>,>>>,<<)
说明:
>>,将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,最高位则移入原来高位的值例如,a = 00110111,则 a>>2 = 00001101
b = 11010011,则 b>>2 = 11110100
右移一位相当于除 2取商例如,128 >> 1 returns 128/ 21 = 64
256 >> 4 returns 256/ 24 = 16
-256 >> 4 returns -256/ 24 = -16
>>>,一个数的各二进制位 无符号 右移若干位,与运算符 >>相同,移出的低位被舍弃,但不同的是 最高位都补 0。
如 a = 00110111,则 a>>>2 = 00001101
b = 11010011,则 b>>>2 = 00110100
海外师资、北美技术、外企经验达内外企 IT培训
61www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符说明:
<<,用来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,低位补 0。
例如,a = 00001111,则 a<<2 = 00111100。
在不产生溢出的情况下,左移一位相当于乘 2
128 << 1 returns 128 * 21 = 256
16 << 2 returns 16 * 22 = 64
海外师资、北美技术、外企经验达内外企 IT培训
62www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换
基本数据类型和引用类型的数据都可以转换类型,但这种转换是有限制的
类型转换分为两种:自动类型转换 (隐含转换 )和强制类型转换 (
显式转换 )
隐含类型转换发生在把一个子类型赋给一个超类型时
显式类型转换有一定的限制海外师资、北美技术、外企经验达内外企 IT培训
63www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
基本数据类型转换序列
char
byte
short
int
double
float
long
说明:
1,在本图中,顺着箭头方向的类型转换可以自动进行,
逆箭头方向的转换或无箭头类型之间的转换必须强制转换。
2,能将 A类型变量自动转换成 B类型变量的前提条件是这种转换不会造成数据和精度的丢失,即 A类型的取值范围是
B类型的取值范围的子集。
海外师资、北美技术、外企经验达内外企 IT培训
64www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换的例子
package sample;
public class CastingTest {
public void implictCasting() {
byte a = 0x60;
int ia = a;
char b = 'a';
int c = b;
long d = c;
long e = 1000000000L;
float f = e;
double g = f;
String s = "hello";
Object o = s;
}
public void explicitCasting() {
long l = 1000000L;
int i = l; //(int)l;
double d = 12345.678;
float f = d; //(float)d;
Object o = new String("Hello");
String str = o; //(String)o;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
65www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
流程控制语句
1 分支语句,if-else,switch-case
2 循环语句,for,while,do-while
3 循环跳转语句,break,continue,label:
海外师资、北美技术、外企经验达内外企 IT培训
66www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
选择结构 — if else
if( boolean expression){
code block 1
}else{
code block 2
}
if( boolean expression){
code block
}
if( boolean expression 1){
code block 1
}else if (boolean expression 2){
code block 2
}else{
code block 3
}
if else 的语法结构
1,基本结构
2,省略 else分支
3,多层嵌套海外师资、北美技术、外企经验达内外企 IT培训
67www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
选择结构 — switch case
switch case 实现多分支选择结构的语句:
switch(expression) {
case 整数值 1,语句 ; break;
case 整数值 2,语句 ; break;
case 整数值 3,语句 ; break;
case 整数值 4,语句 ; break;
case 整数值 5,语句 ; break;
//..
default:语句 ;
}
海外师资、北美技术、外企经验达内外企 IT培训
68www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
switch case 说明说明:
表达式 expression可以是以下四种基本数据类型和枚举类型
(byte,short,int,char)
case子句中的值必须是常量,而且所有 case子句中的值应是不同的
case通常与 break语句联用,以保证多路分支的正确实现。
多个 case可以公用一组执行语句 。
海外师资、北美技术、外企经验达内外企 IT培训
69www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
switch case 应用例题:根据考试成绩的等级打印出百分制分数段。
public class GradeLevel{
public static void main( String args[ ] ){
System.out.println("\n**** first situation ****");
char grade='C'; //normal use
switch( grade ){
case 'A',System.out.println(grade+" is 85~100");break;
case 'B',System.out.println(grade+" is 70~84");break;
case 'C',System.out.println(grade+" is 60~69");break;
case 'D',System.out.println(grade+" is <60");break;
default,System.out.println("input error");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
70www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
for循环
格式
for(初始表达式 ; 布尔表达式 ; 步进 ){
循环体语句块
}
说明:
无论初始表达式,布尔表达式,还是步进,都可以置空。
初始表达式在整个循环过程中只执行一次。
for(int i = 0,j = 1; i < 10 && j != 11; i++,j++)
/* body of for loop */;
海外师资、北美技术、外企经验达内外企 IT培训
71www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
while 循环
格式:
while(布尔表达式 ){
循环体语句块
}
例子,public class WhileTest {
public static void main(String[] args) {
double r = 0;
while(r < 0.99d) {
r = Math.random();
System.out.println(r);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
72www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
do while 循环
格式,
do {
循环语句
}while(布尔表达式 );
例子,
海外师资、北美技术、外企经验达内外企 IT培训
73www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
break
不带标号的 break语句,跳出它所在的循环语句或 switch 语句,并从紧跟该循环语句或 switch 语句后的第一条语句处执行
int n=13;
boolean flag=true;
for(int i=2;i<=n/2;i++){
if(n%i==0){
flag=false;
break;
}
}
System.out.println(n+(flag?‖ is‖:‖is not‖)+‖ a prime number‖);
海外师资、北美技术、外企经验达内外企 IT培训
74www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
带标号的 break
带标号的 break语句:
对 Java来说,唯一用到标签的地方是在循环语句之前,如:
label1,循环语句跳出标号所指定的块,并从紧跟该块后的第一条语句处执行海外师资、北美技术、外企经验达内外企 IT培训
75www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
continue
不带标号的 continue语句,用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环
带标号的 continue语句 跳转到标号指明的外层循环中。
海外师资、北美技术、外企经验达内外企 IT培训
76www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
实例变量和局部变量
实例变量的初始化
Java语言的运算符
基本数据类型和引用类型
使用 if,switch,for,while,do,break and continue 来控制程序的流程海外师资、北美技术、外企经验达内外企 IT培训
77www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,给定 3个数 a,b和 c,输出最大的数。
2,某电信公司的市内通话费计算标准如下:
三分钟内 0.2元,三分钟后每增加一分钟增加 0.1元,不足一分钟的按一分钟计算。
要求编写程序,给定一个通话时间(单位:秒),计算出应收费金额。
3,某市的出租车计费标准为,3公里以内 10元,3公里以后每加 0.5公里加收 1元;每等待 2.5分钟加收 1元;超过 15公里的加收原价的 50%为空驶费。要求编写程序,对于任意给定的里程数(单位:公里)和等待时间(单位:秒)计算出应付车费,车费直接截去小数位,只取整数。
4,编写程序,判断给定的某个年份是否是闰年。
闰年的判断规则如下:
( 1)若某个年份能被 4整除但不能被 100整除,则是闰年。
( 2)若某个年份能被 400整除,则也是闰年。
海外师资、北美技术、外企经验达内外企 IT培训
78www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
5,给定一个百分制的分数,输出相应的等级。
90分以上 A级
80~89 B级
70~79 C级
60~69 D级
60分以下 E级
6,编写程序求 1+3+5+7+…… +99 的和值。
7,编写程序输出 1-100之间所有能被 7整除的偶数。
8,求所有满足如下条件的四位数:
千位上的数字大于百位数字,百位数字大于十位数字,十位数字大于个位数字,并且千位数字是其他三位数字的和。
9,给定两个任意的正整数,求它们之间的所有完全平方数,完全平方数是指这个数是某个整数的平方,例如 16,25,36等都是完全平方数。
10,给定 2个正整数,求它们的最大公约数。
11,编写程序求下列多项式的前 50项的和:
1-1/3+1/5-1/7+1/9-……
海外师资、北美技术、外企经验达内外企 IT培训
79www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
12,请编写程序输出九九乘法表。
13,编写程序输出 1-100之间的所有素数。
14,在屏幕上输出一个 n行的金字塔图案,例如,若 n=5,则图案如下:
15,求斐波那契数列前 n项的和值,斐波那契数列如下:
1,1,2,3,5,8,13,21……
前两位数是 1,从第三位开始每位数都是前两位数之和
16,给定一个整数,把它的各位数字倒排过来形成一个新的整数例如:给定 12345 输出 54321 ;给定 9870 输出 789
CONFIDENTIAL
Module 4,数组
www.tarena.com.cn
中国北京:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号 中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
中国上海:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C区 9楼邮编,200001
Email,shanghai@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当上帝关上了所有门的时候,他一定为你开了一扇窗海外师资、北美技术、外企经验达内外企 IT培训
81www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本 章 目 标
声明并建立一个基本类型的数组和引用类型的数组
为什么数组在使用前必须初始化
定义并初始化一个数组
正确使用数组中的元素
创建一个多维数组(存放数组的数组)
海外师资、北美技术、外企经验达内外企 IT培训
82www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
声明数组相同的数据类型元素类型按一定的顺序排列就构成了数组数组元素可以为:
基本数据类型
某一类的对象(引用类型)
建立 java数组需要以下三个步骤:
声明数组
创建数组空间
初始化数组元素海外师资、北美技术、外企经验达内外企 IT培训
83www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建数组声明数组的语法格式有两种如下:
数组元素类型 数组名 [];
数组元素类型 [] 数组名;
例如,char s[]; Point p[];
或,char[] s; Point[] p;
海外师资、北美技术、外企经验达内外企 IT培训
84www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组实例化说明:
为数组开辟内存空间,在创建数组空间时必须为它指明数组的长度。
一个数组是一个对象,所以用 new来创建数组语法格式为:
数组名 = new 数组元素类型 [数组元素的个数 ];
例如:
int[] MyIntArray;
MyIntArray =new int[10];
海外师资、北美技术、外企经验达内外企 IT培训
85www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组实例化说明:
也可以在创建数组空间的时候,同时将初值给出来,例如:
int[] MyIntArray={1,2,3,4,5,6,7,8,9};
存储空间的分配等价于使用 new
基本数据类型的数组元素系统会自动初始化为默认值(对于数值,默认值就是零;对于 char,它是 null;而对于 boolean,它却是 false)。
数组名是对数组对象的一个引用。
海外师资、北美技术、外企经验达内外企 IT培训
86www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个基本数据类型的数组创建一个基本数据类型元素的数组:
public char[] createArray(){
char[] s;
s = new char[ 26];
for ( int i= 0; i< s.length; i++ ) {
s[ i] = (char) (‘A’+ i);
}
return s;
}
海外师资、北美技术、外企经验达内外企 IT培训
87www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个对象数组创建一个对象数组:
public Point[] createArray(){
Point[] p;
p = new Point[10];
for ( int i= 0; i<p.length; i++ ) {
p[i] = new Point( i,i+1);
}
return p;
}
海外师资、北美技术、外企经验达内外企 IT培训
88www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
多维数组
1,定义方式,type 维数 arrayName;
例如,int [][] intArray; int[][][] a2;
2,分配内存空间,有两种方法:
直接为每一维分配空间,如 int[][] a = new int[2][3];
int twoDim [][] = new int [][ 4]; //error
分别为每一维分配空间如,int[][] a = new int[2][ ];
a[0] = new int[3];
a[1] = new int[3];
可以为每行设置为空间大小不同的数组。
如,a[0] = new int[3];
a[1] = new int[5];
海外师资、北美技术、外企经验达内外企 IT培训
89www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
多维数组说明说明,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。
3,初始化有两种方式:
先定义数组,分配空间,然后直接对每个元素进行赋值
在定义数组的同时进行初始化。
如,int a[][] = {{2,3},{1,5},{3,4}};
海外师资、北美技术、外企经验达内外企 IT培训
90www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组的拷贝使用 System,arraycopy() 方法,
// original array
int elements[] = { 1,2,3,4,5,6 };
// new larger array
int hold[] = { 10,9,8,7,6,5,4,3,2,1 };
// copy all of the elements array to the hold
// array,starting with the 0th index
System,arraycopy( elements,0,hold,0,elements,length);
海外师资、北美技术、外企经验达内外企 IT培训
91www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
如何声明并建立一个基本数据类型的数组和引用类型的数组
为什么数组在使用前必须实例化
怎样定义并初始化数组
怎样知道数组的元素个数
怎样建立一个多维数组海外师资、北美技术、外企经验达内外企 IT培训
92www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1.定义一个 int型的一维数组,包含 10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
2.定义一个 int型的一维数组,包含 10个元素,分别赋值为 1~10,然后将数组中的元素都向前移一个位置,即,a[0]=a[1],a[1]=a[2],… 最后一个元素的值是原来第一个元素的值,然后输出这个数组。
3,定义一个 int型的一维数组,包含 40个元素,用来存储每个学员的成绩,循环产生 40个
0~100之间的随机整数,将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。
4,(选做)承上题,将这 40个成绩按照从高到低的顺序输出出来。
5,(选做)编写程序,将一个数组中的元素倒排过来。例如原数组为 1,2,3,4,5;
则倒排后数组中的值为 5,4,3,2,1。
海外师资、北美技术、外企经验达内外企 IT培训
93www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
6,要求定义一个 int型数组 a,包含 100个元素,保存 100个随机的 4位数。再定义一个
int型数组 b,包含 10个元素。统计 a数组中的元素对 10求余等于 0的个数,保存到 b[0]中;对 10求余等于 1的个数,保存到 b[1]中,…… 依此类推。
7,定义一个 20*5的二维数组,用来存储某班级 20位学员的 5门课的成绩;这 5门课按存储顺序依次为,core C++,coreJava,Servlet,JSP和 EJB。
( 1)循环给二维数组的每一个元素赋 0~100之间的随机整数。
( 2)按照列表的方式输出这些学员的每门课程的成绩。
( 3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。
( 4)要求编写程序求所有学员的某门课程的平均分。
CONFIDENTIAL
Module 5,模块化的程序设计
----方法的调用北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
再长的路,一步步也能走完;
再短的路,不迈开双脚也无法到达海外师资、北美技术、外企经验达内外企 IT培训
95www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的概念方 法输入 输出当我们要建一栋大楼,我们不需要把一砖一瓦的建立过程全部写在一个程序代码块里,我们可以把建大楼的工作划分成若干个功能模块,让每一个模块完成一部分功能,这样方便我们对程序的管理和维护,比如:打地基的方法,
建主体的方法,装修的方法等等。而在我们的主题程序中只需要对他们去依次调用就可以完成整个建大楼的工作主方法 方法 A 方法 B
模块化的程序设计过程实际上就是方法之间相互调用的过程模块化的思想:把一个大的问题细分为若干个小的问题方法:完成某一具体功能的封装的程序模块海外师资、北美技术、外企经验达内外企 IT培训
96www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的定义
<修饰符 > <返回值 > <方法名 >([<参数列表 >])
[throws <声明抛出异常类型 >] {<方法体语句块 >}
public void setName(String name) throws IllegalNameException {… }
public String getName() {… }
如果一个方法没有明确的返回值,那么它的返回值类型必须定义为 void
构造方法没有返回值,也不能写 void
海外师资、北美技术、外企经验达内外企 IT培训
97www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
模块化程序设计 — 方法的调用方法调用的基本步骤:
1,为被调用方法分配临时存储空间。
2,将实参的值复制一份传给形参。
3,程序流程跳到被调用方法中执行。
4,被调用方法执行完成或遇到 return语句,则程序流程跳回主方法,
同时被调用 方法的临时存储空间被回收。
海外师资、北美技术、外企经验达内外企 IT培训
98www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
public class MethodInvoke{
public static void main(String[] args){
int age=21;
addAge(age);
System.out.println(―age=―+age);
}
public static void addAge(int a){
a++;
System.out.println(―a=―+a);
}
}
方法的调用 (图解 )
main()方法 addAge()方法
age 21
step1,为被调用方法分配临时存储空间
a21
step2,将实参的值复制一份传给形参
step3:程序流程跳到被调用方法中执行
step4,被调用方法执行完成或遇到
return语句,则程序流程跳回主方法,
同时被调用 方法的临时存储空间被回收
22
F:\>java MethodInvoke
a=22
age=21
海外师资、北美技术、外企经验达内外企 IT培训
99www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个方法,求 1+3+5+7+… 的前 n项的和,n通过方法参数给定,和值通过方法返回值返回。
2,写一个方法判断给定的年份是否是闰年。
3,写一个方法,用来求一个整形数组中的最大元素,方法需要一个 int[] 类型的参数,返回一个整形值。
4,写一个方法用来判断一个整数是否是素数,如果是则返回 true,否则返回 false,
在主方法中调用这个方法,验证其是否正确。
5,写一个方法用来生成一个整形数组,该方法返回一个 int[] 类型,需要一个 int
型参数,数组的大小由传进来的参数决定。
6,要求将第 4章练习 7的 (1)~(4)步分别用方法实现。
CONFIDENTIAL
Module 6,类和对象北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
假如我不能,我一定要;假如我一定要,我就一定能!
海外师资、北美技术、外企经验达内外企 IT培训
101www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
面向对象编程的基本概念:封装、继承和多态
private 和 public 修饰符
对象的创建和初始化
方法的调用
方法的重载和覆盖
this和 super关键字
理解 Java语言中的下列概念:
package,import,class,member method,field、
constructor,override/overload,superclass constructor
海外师资、北美技术、外企经验达内外企 IT培训
102www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Everything is Object
程序设计的本质工作:抽象抽象的方式不一样:面向过程和面向对象面向对象的观点:一切皆对象一只名为小强的蟑螂一条名为旺财的狗某个客户下的一个订单我在网上订购的一本书 ……
类( Class) —抽象的数据类型,用来描述某一类具有相同特性的对象。
比如:蟑螂、狗、订单、书先有类的定义,然后才能生成对象。
定义一个类我们需要定义两种成员:
属性(用来描述静态的特性)
方法(用来描述动态的操作)
海外师资、北美技术、外企经验达内外企 IT培训
103www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
定义类
public class Animal{
String name; //属性
int age; //属性
public Animal(String name,int age){ //构造方法
this.name=name;
this.age=age;
}
public void eat(){ //方法
System.out.println(name+‖ eating!!‖);
}
}
[修饰符 ] class 类名 [extends 父类名 ] [implements 接口 1 [,接口 2… ]] {
类的定义主体
}
海外师资、北美技术、外企经验达内外企 IT培训
104www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个对象(实例)
1,为对象分配存储空间,
2,为成员变量赋初始值
3,调用构造方法海外师资、北美技术、外企经验达内外企 IT培训
105www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
构造方法
方法名跟类名相同
没有返回值类型
public class Xyz {
// member variables go there
public Xyz() {
// set up the object.
}
public Xyz(int x) {
// set up the object with a parameter
}
}
海外师资、北美技术、外企经验达内外企 IT培训
106www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
参数传递
基本数据类型的参数按值传递
引用类型的参数按引用传递
package sample;
public class ParameterTest {
static void increment(int i) { ++i;}
static void changeName(Student s) {
s.setName("Larry"); }
static void changeStudent(Student s) { s = new
Student("Mary","female",20); }
public static void main(String[] args) {
int i = 2;
System.out.println("before increment() " + i);
increment(i);
System.out.println("after increment() " + i);
Student s = new Student("George","male",18);
System.out.println("before changeName() " + s);
changeName(s);
System.out.println("after changeName() " + s);
s = new Student("George","male",18);
System.out.println("before changeName() " + s);
changeStudent(s);
System.out.println("after changeName() " + s);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
107www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的调用 ----引用传递
public class MethodInvoke2{
public static void main(String[] args){
Animal a1=new Animal(―xiaoqiang‖,4);
addAge(a1);
System.out.println(a1.age);
}
public static void addAge(Animal a){
a.age++;
}
}
main() addAge()
name
age
0x1a2d3c4f
a1
0x1a2d3c4f
4
a1 a
海外师资、北美技术、外企经验达内外企 IT培训
108www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
this关键字
this 指向当前类或对象
public class Student {
private String name;
private String gender;
private int age;
……
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setGender(String gender) { this.gender = gender; }
public String getGender() { return gender; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
……
}
海外师资、北美技术、外企经验达内外企 IT培训
109www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数据的隐藏
package sample;
public class DataHiddenTest {
public static void main(String[] args) {
Student s = new Student();
s.name = "George"; //illegal
s.gender = "male"; //illegal
s.age = 18; //illegal
}
}
public class Student {
private String name;
private String gender;
private int age;
public Student() {}
…
}
海外师资、北美技术、外企经验达内外企 IT培训
110www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
封 装
隐藏实现细节
为所有用户提供统一界面
增强可维护性海外师资、北美技术、外企经验达内外企 IT培训
111www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的重载
方法名相同
参数类型一定不同
返回值可以相同也可以不同
package sample;
import java.net.MalformedURLException;
import java.net.URL;
public class OverloadingTest {
public void print(int i) {}
public void print(float f) {}
public String print() { return "Hello"; }
protected URL print(String s) throws
MalformedURLException { return new URL(s); }
}
海外师资、北美技术、外企经验达内外企 IT培训
112www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
构造方法的重载
Call to this(…) must be the first statement in constructor
package sample;public class Employee {
private String name; private int salary;
public Employee(String n,int s) {name = n;
salary = s;}
public Employee(String n) {this(n,0);
}
public Employee() { //int a = 0; //Illegal
this( " Unknown " ); }
}
海外师资、北美技术、外企经验达内外企 IT培训
113www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
默认的构造方法
每个类都有构造方法。
如果程序员在定义类时没有定义构造方法的话,Java
将自动为该类添加一个公开的空参空实现的构造方法。
如,public Animal () {
}
海外师资、北美技术、外企经验达内外企 IT培训
114www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
继承
是,is a” 的关系
声明的形式
public class Manager extends Employee {…}
Java是一个单一继承的语言 ---- 一个类只有一个直接父类,如果没有声明父类,则默认的父类为
java.lang.Object
海外师资、北美技术、外企经验达内外企 IT培训
115www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
继承
构造方法不能被继承
方法和属性可以被继承
子类的构造方法隐含的调用父类的默认构造方法
如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。
如下形式:
super(…)
海外师资、北美技术、外企经验达内外企 IT培训
116www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
super 关键字
代表指向父类的引用
super.age
super.addAge()
代表调用父类的构造方法
super();
super(“wangcai”,8);
super 关键字的两种用法:
海外师资、北美技术、外企经验达内外企 IT培训
117www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java
package sample;
public class InheritanceTest {
public static void main(String[ ] args) {
new SubA(1);
SubA sa = new SubA();
sa.print();
new SubB();
}
}
海外师资、北美技术、外企经验达内外企 IT培训
118www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java(Cont.)
class SuperA {
private int j = 10;
public SuperA(int i) {System.out.println("constructor SuperA(int)"); }
public SuperA() { System.out.println("constructor SuperA()"); }
void print() {System.out.println("print() in SuperA"); }
}
class SubA extends SuperA {
private int k = 2;
public SubA(int i) { super(i); System.out.println("constructor
SubA(int)"); }
public SubA() {
//隐含调用 super()-->SuperA()
System.out.println("constructor SubA()");
}
void print() { super.print(); System.out.println("print() in SubA"); }
}
海外师资、北美技术、外企经验达内外企 IT培训
119www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java(Cont.)
class SuperB {
public SuperB(String s) {
System.out.println("Constructor superB(String)");
}
}
class SubB extends SuperB {
public SubB() {
super("Hello");
System.out.println("Constructor subB()");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
120www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
instanceof 运算符
package sample;
public class InstanceofTest {
public static void main(String[] args) {
Employee unknown = new Manager();
Employee gzhu = new Employee("gzhu");
System.out.println("unknown is instanceof manager," +
(unknown instanceof Manager));
System.out.println("unknown is instanceof employee," +
(unknown instanceof Employee));
System.out.println("gzhu is instanceof manager," +
(gzhu instanceof Manager));
System.out.println("gzhu is instanceof employee," +
(gzhu instanceof Employee));
}
}
boolean operator
Type identification
海外师资、北美技术、外企经验达内外企 IT培训
121www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换
使用 instanceof 运算符确定对象的类型
子类对象可以隐含扩展为父类型
父类型必须明确声明转化为子类型
不是所有的父类型对象都能转化为子类型海外师资、北美技术、外企经验达内外企 IT培训
122www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的覆盖
方法名相同,参数类型相同,返回值也相同
访问权限不能更封闭
抛出异常类型不能更宽泛海外师资、北美技术、外企经验达内外企 IT培训
123www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java
package sample;
import java.io.IOException;
public class OverridenTest {
public static void main(String[] args) {
SuperC c = new SubC();
c.methodA(0);
c.methodB();
c.methodC();
c.methodD("hello",3);
c.methodE("aaa",2);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
124www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java(Cont.)
class SuperC {
public void methodA(int i) { System.out.println("methodA(int) in
SuperC"); }
protected void methodB() { System.out.println("methodB() in
SuperC"); }
void methodC() { System.out.println("methodC() in SuperC"); }
public void methodD(String s,int i) throws IOException {
System.out.println("methodD(String,int) in SuperC");
}
public int methodE(String s,int i) {
System.out.println("methodE(String,int) in SuperC");
return 0;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
125www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java(Cont.)
class SubC extends SuperC {
public void methodA(int i) { System.out.println("methodA(int) in
SubC"); }
public void methodB() { System.out.println("methodB() in SubC"); }
/**The followings are invalid overriding */
private void methodC() { System.out.println("methodC() in SubC"); }
public void methodD(String s,int i) throws Exception {
System.out.println("methodD(String,int) in SubC");
}
public double methodE(String s,int i) {
System.out.println("methodE(String,int) in SubC");
return 0;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
126www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结
面向对象的基本概念,封装,继承和多态
对象的建立和初始化
对象的方法调用
构造方法
方法的重载和覆盖
this 关键字和 super关键字海外师资、北美技术、外企经验达内外企 IT培训
127www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个类,名为 Animal,该类有两个私有属性,name(代表动物的名字 ),和 legs(代表动物的腿的条数 );要求为两个私有属性提供 public 的访问方法。并提供个两构造方法
,一个无参,默认给 name赋值为 AAA,给 legs赋值为 4;另一个需要两个参数,分别用这两个参数给私有属性赋值。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的 move()方法,其中一个无参,在屏幕上输出一行文字,XXX Moving!!(XXX
为该动物的名字 );另一个需要一个 int参数 n,在屏幕上输出 n次 XXX Moving!!
2,写一个类 Fish,继承自 Animal类,并提供一个构造方法,该构造方法需要一个参数 name,
并给 legs赋默认值 0;该类还要求覆盖 Animal类中的无参 move()方法,要求输出,XXX
Swimming!!
3,写一个类 Bird,继承自 Animal类,并提供一个构造方法,该构造方法需要一个参数 name,
并给 legs赋默认值 2;该类还要求覆盖 Animal类中的无参 move()方法,要求输出,XXX
Flying!!
4,写一个类 Zoo,要求分别生成若干个 Animal,Fish和 Bird。并调用他们的属性和方法。
海外师资、北美技术、外企经验达内外企 IT培训
128www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
5.写一个类用来模拟栈这种数据结构,要求底层使用数组存储数据,并给出相应的进栈和出栈的方法 。
6,写一个类 Person,包含以下属性,String name; int age; boolean gender;
Person partner。 为 Person类写一个 marry(Person p)方法,代表当前对象和 p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因 。 要求在另外一个类中写一个主方法,来测试以上程序 。 ( 下列情况不能结婚,1,同性;
2,未达到结婚年龄,男 <24,女 <22; 3,某一方已婚 )
7,写以下类:
飞机:型号,最大座位数,最大航程 。
航班:航班号,航空公司名称,航空公司代号,航班日期,出发地,目的地,
起飞 时间,到达时间,里程,使用飞机,剩余座位,全价,折扣率 。
方法,setPlane(Plane p);
客户:姓名,身份证号,帐户余额 。
方法,order(Flight f);
CONFIDENTIAL
Module 7,Java语言高级特性
达内外企 IT培训 铸就辉煌 IT人生北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
130www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
static 修饰属性和方法
final 修饰类,方法和变量
abstract 类和方法
接口
访问权限的控制
Object类介绍
main()方法的参数
Wrapper Class
海外师资、北美技术、外企经验达内外企 IT培训
131www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
静态变量
一个类只有一份,
被类的所有实例共享
能在没有生成任何类的实例时就被访问到
在某种意义上类似于全局变量
直接使用类名来访问
package sample;
public class Animal {
private int serialNumber;
private String name;
private static int counter = 0;
public Animal (String name) {
counter++;
serialNumber = counter;
this.name=name;
}
public static void main(String[] args) {
Animal a1=new Animal(“xiaoqiang”);
Animal a2=new Animal(“wangcai”);
Animal a3=new Animal(“a huang”);
System.out.println("counter " + counter);
System.out.println(a1.name+,:”+a1.serialNumber);
System.out.println(a2.name+,:”+a2.serialNumber);
System.out.println(a3.name+,:”+a3.serialNumber);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
132www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
静态方法
可以在没有任何实例时调用
不能在 static方法内部访问非 static成员
不能被非 static方法覆盖
package sample;
public class StaticTest {
int x;
public static void main(String[] args){
System.out.println(Algorithm.add(2,3));
//x = Algorithm.add(4,5); //illegal
}
}
class Algorithm {
public static int add(int a,int b) {
return a + b;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
133www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
final 关键字
final用来修饰一个类,方法,属性或局部变量
final 类不能被继承
final 方法不能被覆盖
final 变量的值不能被改变
package sample;
public final class FinalTest {
final int i = 10;
/** Creates a new instance of FinalTest */
public FinalTest() {
}
public final int getNumber() {
i = 20; //illegal
return i;
}
}
class FinalSub extends FinalTest {} //illegal
class FinalDemo {
final int getNumber() { return 10; }
}
class FinalDemoSub extends FinalDemo {
int getNumber() { //illegal
return 20;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
134www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
abstract类和 abstract方法
如果一个方法没有实现的代码,那么它必须被声明为抽象的方法。
public abstract String getName();
如果一个类包含有抽象方法,那么它必须被声明为抽象类。
public abstract class Account{
public abstract String getName();
…
}
抽象类不能实例化 ----不能生成对象。
可以定义一个抽象类的引用。
海外师资、北美技术、外企经验达内外企 IT培训
135www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
接 口
接口是一种特殊的抽象类
接口中所有的方法都是抽象方法
一个类可以实现多个接口
接口中的所有属性都会自动声明为 final static
接口与接口之间可以多重继承海外师资、北美技术、外企经验达内外企 IT培训
136www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
访问权限控制
Modifiers Inside class The same package Subclass other
public Yes Yes Yes Yes
protected Yes Yes Yes No
Default (no modifier) Yes Yes No No
private Yes No No No
海外师资、北美技术、外企经验达内外企 IT培训
137www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Object 类的方法
public String toString(),返回对象的字符串描述形式
public boolean equals(Object o):判断两个对象是否相等一般来说,我们会根据需要在自己写的类中覆盖这两个方法,
给出自己的定义。
海外师资、北美技术、外企经验达内外企 IT培训
138www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
toString()方法
返回描述某个对象的字符串
当直接输出一个对象时,这个方法被隐含的调用
package sample;
public class EqualTest {
public static void main(String[] args) {
…
Account a = new Account("george",100.00);
System.out.println(a);
}
}
class Account {
private String name;
private double balance;
public Account(String name,double balance) {
this.name = name;
this.balance = balance;
}
public boolean equals(Object o) {
Account a = (Account)o;
return (name.equals(a.name) && (balance == a.balance));
}
public String toString() {
return,The account:,+ name +,has balance:,+ balance;
}
海外师资、北美技术、外企经验达内外企 IT培训
139www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
equals() 方法
==运算符用来判断两个引用值是否相等(是否指向同一个对象)
equals(Object o) 方法一般在定义类时被覆盖(改写),该方法用来判断两个对象值是否相同。
package sample;
public class EqualTest {
public static void main(String[] args) {
String s1 = new String("Hello");
String s2 = s1;
String s3 = new String("Hello");
System.out.println("s1 == s2:" + (s1==s2));
System.out.println("s1 == s3:" + (s1==s3));
System.out.println("s1.equals(s3):
" + s1.equals(s3));
Account a = new Account("george",100.00);
Account b = new Account("george",100.00);
System.out.println("a == b:" + (a==b));
System.out.println("a.equals(b):" + a.equals(b));
}
}
class Account {
private String name;
private double balance;
public Account(String name,double balance) {
this.name = name;
this.balance = balance;
}
public boolean equals(Object o) {
Account a = (Account)o;
return (name.equals(a.name) &&
(balance == a.balance));
}
}
海外师资、北美技术、外企经验达内外企 IT培训
140www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
传给 main()方法的参数可以通过命令行在运行 java程序时给 main()方法传递参数,这些参数是以一个字符串数组的形式来存放的,我们可以在程序中使用这些参数。
public class MainMethodParameter{
public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
141www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Wrapper Class
Primitive Type Wrapper Class
boolean Boolean
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
海外师资、北美技术、外企经验达内外企 IT培训
142www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章中,我们讨论了以下问题,
静态变量和静态方法
final类,方法和变量
访问权限的控制
抽象类和抽象方法
接口
Object类和 String类
通过命令行传参数给 main()方法
基本数据类型的包装类海外师资、北美技术、外企经验达内外企 IT培训
143www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,定义一个接口 Assaultable(可攻击的 ),该接口有一个抽象方法 attack()。
2,定义一个接口 Mobile(可移动的),该接口有一个抽象方法 move()。
3,定义一个抽象类 Weapon,实现 Assaultable接口和 Mobile接口,但并没有给出具体的实现方法。
4,定义 3个类,Tank,Flighter,WarShip都继承自 Weapon,分别用不同的方式实现 Weapon
类中的抽象方法。
5,写一个类 Army,代表一支军队,这个类有一个属性是 Weapon数组 w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,在构造方法里通过传一个 int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组 w。该类还提供一个方法 addWeapon(Weapon wa),表示把参数 wa所代表的武器加入到数组 w中。
在这个类中还定义两个方法 attackAll()和 moveAll(),让 w数组中的所有武器攻击和移动。
6,写一个主方法去测试以上程序。
海外师资、北美技术、外企经验达内外企 IT培训
144www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个类 Student,包含两个属性 String name和 int age;要求覆盖 toString()方法和
equals()方法,使得直接输出 Student对象时输出的是对象的 name和 age;并且当两个对象的 name和 age都相同时认为它们相等;然后写一个主方法测试以上定义。
2,写一个程序,要求运行时从命令行输入不同的值打印不同的结果,若输入,male
则输出,you are a boy!”;若输入,female,则输出,you are a girl!”;若输入其他值则输出,you are wrong!!”。
3,写一个程序,要求运行程序时从命令行输入两个整形的数值,程序将他们的和值输出。
CONFIDENTIAL
Module 8,Java集合框架
(选学 )
达内外企 IT培训 铸就辉煌 IT人生北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
146www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架
集合是一种用来存储其他对象的对象
Three elements in Java to make up collections
Interfaces,define the methods that each type of collection must
implement
Implementations,actual classes such as Hashtable and Vector
Algorithms,methods that store,retrieve,and manipulate
elements in a collection
Package java.util
海外师资、北美技术、外企经验达内外企 IT培训
147www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架的接口
Collection
Set List Map
SortedSet SortedMap
List,有序存放,允许重复
Set,随机存放,不允许重复的对象,
SortedSet,自动排序存放
Map,存储 键 --值( key--value)对,要求所有的键必须唯一
SortedMap,按照键的大小来排序海外师资、北美技术、外企经验达内外企 IT培训
148www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架的继承关系和实现类
Collection
HashSet
(Set)
LinkedList
Vector,ArrayList
(List)
Hashtable
Hashmap
(Map)
TreeSet
(SortedSet)
TreeMap
(SortedMap)
海外师资、北美技术、外企经验达内外企 IT培训
149www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Collection Example,List
package sample;
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
List l = new ArrayList();
l.add(new Integer(1));
l.add(new Integer(4));
l.add(new Integer(3));
l.add(new Integer(2));
Iterator it = l.iterator();
while(it.hasNext()){
int i = ((Integer)it.next()).intValue();
System.out.println("Element in list is," + i);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
150www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Collection Example,Map
package sample;
import java.util.*;
public class MapTest {
public MapTest() {
}
public static void main(String[] args) {
String[] s1 = {
"Wang","Zhang","Li"};
String[] s2 = {
"78","87","88"};
Map hm = new HashMap();
for (int i = 0; i < s1.length; i++) {
hm.put(s1[i],s2[i]);
}
System.out.println("Wang score is," + hm.get("Wang"));
System.out.println("Zhang score is," + hm.get("Zhang"));
System.out.println("Li score is," + hm.get("Li"));
}
}
海外师资、北美技术、外企经验达内外企 IT培训
151www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,定义一个 Student类,要求在程序中生成若干个 Student对象,并将这些对象分别保存到
ArrayList和 HashSet中,然后遍历的输出出来。
2,写一个类,实现栈这种数据结构,要求底层数据使用 ArrayList存储。
CONFIDENTIAL
Module 9,Exceptions
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
153www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目标
定义一个异常
使用 try,catch,finally语句处理程序中的异常
Java异常类的继承关系
异常的处理海外师资、北美技术、外企经验达内外企 IT培训
154www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Basic Concepts of Exceptions
Exceptional conditions
Occurrences that alter the normal program flow
When an exceptional event occurs,an exception is
said to be thrown
The code that is responsible for doing something
about the error is called an exception handler
The exception handler catches the exception
海外师资、北美技术、外企经验达内外企 IT培训
155www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
try and catch statement
1,try {
2,// This is the first line of the,guarded region”
3,// that is governed by the try keyword.
4,// Put code here that might cause some kind of exception.
5,// We may have many code lines here or just one.
6,}
7,catch(MyFirstError) {
8,// Put code here that handles this error.
9,// This is the next line of the exception handler.
10,// This is the last line of the exception handler.
11,}
12,catch(MySecondError) {
13,// Put code here that handles this error.
14,}
15,
16,// Some other unguarded code begins here
海外师资、北美技术、外企经验达内外企 IT培训
156www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
finally statement
1,try {
2,// This is the first line of the,guarded region”.
3,}
4,catch(MyFirstError) {
5,// Put code here that handles this error.
6,}
7,catch(MySecondError) {
8,// Put code here that handles this error.
9,}
10,finally {
11,// Put code here to release any resource we
12,// allocated in the try clause.
13,}
14:
15,// More code here
海外师资、北美技术、外企经验达内外企 IT培训
157www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Exceptions call stack
Exception propagation
An exception will cause your application to stop
if it is never caught
Frequently used Exception API
– getCause()
– getMessage()
– printStackTrace()
海外师资、北美技术、外企经验达内外企 IT培训
158www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
异常类的继承关系
Classes derive from Error represent
unusual situations
Applications won?t be able to recover
from an error
All Java?s exception types derive
from Exception
RuntimeException,also called
unchecked exception
A unchecked exception does not
have to be caught
Other exceptions,also called
checked exceptions,must be treated
Object
Throwable
Error Exception
RuntimeException
海外师资、北美技术、外企经验达内外企 IT培训
159www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
常见的未检查异常
java.lang.ArithmeticException
java.lang.NullPointerException
java.lang.ArrayIndexoutofBoundsException
java.lang.SecurityException
Java.lang.NegativeArraySizeException
海外师资、北美技术、外企经验达内外企 IT培训
160www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
异常的处理
Handling,
try-catch-finally
Using throws
statement to
declare that the
code will cause
exceptions
public class JBeesLocalFile extends java.lang.Object {
private RandomAccessFile localFile;
/** Creates new JBeesLocalFile */public JBeesLocalFile(String localFileName)
throws IOException {File f = new File(localFileName);
if(f.getParent() != null){
File dir = new File(f.getParent());if(!dir.exists())
dir.mkdirs();}
localFile = new RandomAccessFile(localFileName,"rw");
}
synchronized public void writeBytes(byte[] in,long offset)throws IOException {
localFile.seek(offset);
localFile.write(in);}
public void close() throws IOException{
localFile.close();
}}
海外师资、北美技术、外企经验达内外企 IT培训
161www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
定义自己的异常类
Deriving from Exception
public class MalformedB64EncodeException extends java.lang.Exception {
/**
* Creates new <code>MalformedB64EncodeException</code> without detail message.
*/
public MalformedB64EncodeException() {
this("Error encoded string");
}
/**
* Constructs an <code>MalformedB64EncodeException</code> with the
specified detail message.
* @param msg the detail message.
*/
public MalformedB64EncodeException(String msg) {
super(msg);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
162www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
抛出异常
public class JBeesBase64 extends Object {
private final byte[] enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
0123456789+/".getBytes();private final byte pad = (byte)'=';
…
public byte[] decode(byte[] in) throws MalformedB64EncodeException {
if(in == null) return null;
int len = in.length;
int loop = len / 4;
int remainder = len % 4;
if(remainder != 0) throw new MalformedB64EncodeException();
byte[] out;
if(in[len - 2] == pad) out = new byte[loop * 3 - 2];
else if(in[len - 1] == pad) out = new byte[loop * 3 -1];
else out = new byte[loop * 3];
for(int i = 0; i < loop; i++) {
byte index0 = getIndex(in[i * 4 ]);
byte index1 = getIndex(in[i * 4 + 1]);
if(index0 == - 1 || index1 == -1) throw new MalformedB64EncodeException();
out[i * 3 ] = (byte)((index0 << 2) | (index1 >> 4));
if(in[i * 4 + 2] == pad) break;
else{ index0 = getIndex(in[i * 4 + 2]);
if(index0 == -1) throw new MalformedB64EncodeException();
out[i * 3 + 1] = (byte)((index1 << 4) | ( index0 >> 2));
}
if(in[i * 4 + 3] == pad) break;
else { index1 = getIndex(in[i * 4 + 3]);if(index1 == -1) throw new MalformedB64EncodeException();
out[i * 3 + 2] = (byte)((index0 << 6) | index1); }
}
return out;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
163www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章中,我们讨论了以下问题,
怎样定义异常
如何使用 try,catch,finally,throw,throws 等语法。
异常类的继承结构
异常的处理
CONFIDENTIAL
Module 10,Building GUIs
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
165www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
javax.swing.* 的常用组件
容器,组件和布局管理器
使用布局管理器
BorderLayout,FlowLayout,GridLayout,etc.
向容器中添加组件
使用多层嵌套的布局管理
了解常用组件的事件侦听器,并写出事件处理代码海外师资、北美技术、外企经验达内外企 IT培训
166www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
图形开发常用的包
java.awt
javax.swing
java.awt.event
海外师资、北美技术、外企经验达内外企 IT培训
167www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java图形开发的基本步骤
Step 1,选择容器
Step 2,为容器设置布局管理器
Step 3,添加图形组件
Step 4,设置事件处理常用容器:
javax.swing.JFrame
javax.swing.JDialog
javax.swing.JPane
javax.swing.JScrollPane
常用布局管理器:
java.awt.BorderLayout
java.awt.FlowLayout
java.awt.GridLayout
常用图形组件:
javax.swing.JButton
javax.swing.JLabel
javax.swing.JTextField
javax.swing.JTextArea
javax.swing.JPasswordField
javax.swing.JComboBox
javax.swing.JMenuBar
javax.swing.JMenu
javax.swing.JMenuItem
海外师资、北美技术、外企经验达内外企 IT培训
168www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Step 1:选择容器
组件可以添加到容器中
经常使用的容器有,JFrame,JDialog,JPanel,JScrollPane
容器类可以被继承海外师资、北美技术、外企经验达内外企 IT培训
169www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JFrame
javax.swing包的容器
是一个顶层容器
有边框,标题栏和菜单条
默认布局管理器是 BorderLayout
海外师资、北美技术、外企经验达内外企 IT培训
170www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JPanel
一般加在其他容器中
常用来在一个容器中对图形组件分组
默认的布局管理器是 FlowLayout
海外师资、北美技术、外企经验达内外企 IT培训
171www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
容器类的常用方法
add()
add(Component com)
add(Component,int index)
setLayout() and getLayout()
getComponent()
getInsets()
remove and removeAll()
validate()
海外师资、北美技术、外企经验达内外企 IT培训
172www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
使用容器类提供的 setLayout()方法为容器设置布局管理器
布局管理器用来限定组件在容器中的大小和位置
setLocation(),setSize()以及 setBounds() 方法来定义 组件的大小和位置
JFrame和 JDialog的默认布局管理器是 BorderLayout
JPanel的默认布局管理器是 FlowLayout
Step 2:选择布局管理器海外师资、北美技术、外企经验达内外企 IT培训
173www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Layout Manager
-?Flow Layout
Border Layout
Grid Layout
Card Layout
GridBag Layout
海外师资、北美技术、外企经验达内外企 IT培训
174www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BorderLayout
将容器分成 5个区域,
BorderLayout.CENTER,BorderLayout.EAST,
BorderLayout.WEST,BorderLayout.SOUTH,
BorderLayout.NORTH
是顶层容器 (JFrame,JDialog,和 JApplet )的默认布局管理器。
Constructors:
BorderLayout() BorderLayout(int hgap,int vgap)
海外师资、北美技术、外企经验达内外企 IT培训
175www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
FlowLayout
组件按照加入的先后循序从左向右排列,自动换行。
遵循组件的首选尺寸
FlowLayout的构造器
FlowLayout()
FlowLayout(int align)
FlowLayout(int align,int hgap,int vgap)
int align,FlowLayout.LEFT,FlowLayout.RIGHT,
FlowLayout.CENTER,FlowLayout.LEADING,
FlowLayout.TRAILING
海外师资、北美技术、外企经验达内外企 IT培训
176www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
GridLayout
基本布局策略是把容器的空间划分成若干行若干列的网格区域,组件就位于这些划分出来的小区域中。
所有的区域大小一样。
组件按从左到右,从上到下的方法加入。
忽略组件的首选尺寸
Constructors:
GridLayout()
GridLayout(int rows,int cols)
GridLayout(int rows,int cols,int hgap,int vgap)
海外师资、北美技术、外企经验达内外企 IT培训
177www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
组合的布局管理
JPanel
GridLayout
JPanel
FlowLayout
JFrame
BorderLayout
海外师资、北美技术、外企经验达内外企 IT培训
178www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
A Combined Layout Sample
Caculator.java
package sample.sample;
import java.awt.*;
import java.awt.event.*;
public class Caculator implements ActionListener {
private Frame f;
public Calculator() {
initComponent();
}
private void initComponent() {
f = new Frame("My Calculator V1.0");
f.setLayout(new BorderLayout()); //The frame uses BorderLayout
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
海外师资、北美技术、外企经验达内外企 IT培训
179www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Panel centerPanel = new Panel();
centerPanel.setLayout(new GridLayout(5,3));
//The panel uses GridLayout
String labels = "12+34-56*78/90=";
for(int i = 0; i < labels.length(); i++) {
Button btn = new Button(labels.substring(i,i+1));
btn.addActionListener(this);
centerPanel.add(btn);
}
f.add(centerPanel,BorderLayout.CENTER);
Panel northPanel = new Panel();
TextField tf = new TextField(30);
northPanel.add(tf);
f.add(northPanel,BorderLayout.NORTH);
}
A Combined Layout Sample
Caculator.java(cont.)
海外师资、北美技术、外企经验达内外企 IT培训
180www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
public void go() {
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new Calculator().go();
}
public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
}
}
A Combined Layout Sample
Caculator.java(cont.)
海外师资、北美技术、外企经验达内外企 IT培训
181www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
生成图形组件
Button btn = new Button(“Add”);
Label lbl = new Label(“Name”);
…
使用 add()方法向容器中添加组件
jf.add(btn);
jf.add(lbl);
Step 3:向容器中添加组件海外师资、北美技术、外企经验达内外企 IT培训
182www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Using component methods addXXXListener()
btn.addActionListener(…)
Step 4:设置事件处理代码海外师资、北美技术、外企经验达内外企 IT培训
183www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章中,我们讨论了以下问题,
海外师资、北美技术、外企经验达内外企 IT培训
184www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Review Questions
1.(Level 1)What are the four steps for building GUI?
2.(Level 1)What are the five common layout managers?
3.(Level 1)What is the difference between frame and panel?
4.(Level 2)What is the default layout manager for frame and
panel respectively?
海外师资、北美技术、外企经验达内外企 IT培训
185www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Assignment
1,(Level 1)Write a class called AWTFrame,The frame uses
border layout and contains a status label and a panel
which,in turn,contains two buttons,The panel use
flow
layout.
2.(Level 2)Write a class called AWTCombinatinFrame,The
frame uses border layout and contains a status label and a
panel which,in turn,uses grid layout and contains twelve
buttons(number 1-9 and *,0 and #)
CONFIDENTIAL
Module 11,I/O 流和文件
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
187www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
操作文件系统
java.io 包的结构
使用字符流和字节流来访问文件
对字符流和字节流做包装
对象序列化存储海外师资、北美技术、外企经验达内外企 IT培训
188www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
File 类的介绍
一个 File 对象既可以用来描述一个文件,也可以用来描述一层目录。
File 类常用的构造方法:
File(File parent,String child)
File(String pathname)
File(String parent,String child)
File(URI uri)
可以使用 File.separator来得到机器文件系统下的目录分隔符海外师资、北美技术、外企经验达内外企 IT培训
189www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
File 类的方法
boolean createNewFile()
boolean delete()
boolean mkdir()/mkdirs()
boolean renameTo(File destination)
boolean canRead()/canWrite()
boolean exists()
String[] list()
long lastModified()
String getPath()/getAbsolutePath()
String getParent()/getName()
海外师资、北美技术、外企经验达内外企 IT培训
190www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
MyDir.java
import java.io.*;
public class MyDir{
public static void main(String argv[]){
File f;
int numDirs=0,numfiles=0;
if(argv.length!=1&&argv.length!=0){
System.out.println(" Wrong Number of Parameters !");
System.exit(0);
}
if(argv.length==1) f = new File(argv[0]);
else f= new File(".");
File files[] = f.listFiles();
System.out.println(f.getPath()+"包含的目录和文件,");
海外师资、北美技术、外企经验达内外企 IT培训
191www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
MyDir.java(cont.)
for (int i=0; i<files.length; i++){
if (files[i].isDirectory()){
System.out.print("<Dir>\t");
numDirs++;
}
else{
System.out.print("\t"+files[i].length());
System.out.println("\t"+ new Date(files[i].lastModified()));
numfiles++;
}
System.out.println("\t"+files[i].getName());
}
System.out.println(numfiles+"个文件 ");
System.out.println(numDirs+"个目录 ");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
192www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
流的概念
流是一个数据序列
按不同的方式可以将流划分为以下几类:
输入流和输出流字节流和字符流节点流和过滤流
FilterInputStreamNode InputStream(for example,from disk file)
“Flow” of
bytes down
stream
read()
海外师资、北美技术、外企经验达内外企 IT培训
193www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStream (字节输入流)
读数据的三个 read()方法
int read()
int read(byte[])
int read(byte[],int,int)
其他常用方法
void close()
int available()
skip(long)
boolean markSupported()
void mark(int)
void reset(int)
海外师资、北美技术、外企经验达内外企 IT培训
194www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OutputStream (字节输出流)
三个写数据的方法
int write(int)
int write(byte[])
int write(byte[],int,int)
其他常用方法
void close()
void flush()
海外师资、北美技术、外企经验达内外企 IT培训
195www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStream和 OutputStream的继承结构海外师资、北美技术、外企经验达内外企 IT培训
196www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
FileInputStream and
FileOutputStream
The file must exist and can be read when you create a FileInputStream
FileInputStream(File file)
FileInputStream(String name)
A new file will be created or existed file will be overridden
when you create a FileOutputStream
FileOutputStream(File file)
FileOutputStream(File file,boolean append)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
FileInputStream infile =
new FileInputStream("myfile.dat");
FileOutputStream outfile =
new FileOutputStream("results.dat");
海外师资、北美技术、外企经验达内外企 IT培训
197www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BufferedInputStream and
BufferedOutputStream
Buffering an input/output stream to enhance
performance
Constructors of the class BufferedInputStream
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in,int size)
Constructors of the class BufferedOutputStream
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
海外师资、北美技术、外企经验达内外企 IT培训
198www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
DataInputStreamand
DataOutputStream
Enabling applications to read/write Java
primitive type data
Constructors
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
Methods
readBoolean()/writeBoolean
readByte()/writeByte()
readChar()/writeChar()
….
海外师资、北美技术、外企经验达内外企 IT培训
199www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Reader 和 Writer(字符输入 /输出流)
海外师资、北美技术、外企经验达内外企 IT培训
200www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStreamReader and
OutputStreamWriter
An InputStreamReader is a bridge from byte stream
to character stream
An OutputStreamWriter is a bridge from character
stream to byte Stream
Constructors
InputStreamReader(InputStream in,String
charsetName)
OutputStreamWriter(OutputStream out,String
charsetName)
海外师资、北美技术、外企经验达内外企 IT培训
201www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BufferedReader and
BufferedWriter
Buffering characters so as to provide for the
efficient reading/writing characters,chars,and lines
Constructors
BufferedReader(Reader in)
BufferedReader(Reader in,int size)
BufferedWriter(Writer out)
BufferedWriter(Writer out,int size)
Methods
readLine()
海外师资、北美技术、外企经验达内外企 IT培训
202www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Convenience for reading/writing character files
Constructors
FileReader(File file)
FileReader(String name)
FileWriter(File file)
FileWriter(String filename)
FileReader and FileWriter
海外师资、北美技术、外企经验达内外企 IT培训
203www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
包装流海外师资、北美技术、外企经验达内外企 IT培训
204www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
标准输入输出和出错流
System,out,an object of PrintStream
System,in,an object of InputStream
System,err,an object of PrintStream
海外师资、北美技术、外企经验达内外企 IT培训
205www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Implementing both DataInput and DataOutput
Providing capability for reading as well as writing
to a file when it is opened
Providing capability for reading or writing
to a specified point within the file by
using a file pointer
Constructors
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
Methods
read()/write() seek(long pointer)
RandomAccessFile
海外师资、北美技术、外企经验达内外企 IT培训
206www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Objects persistence
Only the data of an object is serialized
Transient data can not be Serialized
Objects must implement java.io.Serializable
Serilization
海外师资、北美技术、外企经验达内外企 IT培训
207www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
ObjectInputStream and
ObjectOutputStream
ObjectOutputStream and ObjectInputStream can
provide an application with persistent storage for
graphs of objects
An ObjectInputStream deserializes primitive data
and objects previously written using an
ObjectOutputStream
Constructors
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
Methods
readObject()/writeObject()
海外师资、北美技术、外企经验达内外企 IT培训
208www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章,我们讨论了以下问题,
使用 File类来操作文件系统
java.io包的继承结构
使用字节流和字符流做输入输出
对六对象做包装
对象序列化的概念海外师资、北美技术、外企经验达内外企 IT培训
209www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Question & Answer
海外师资、北美技术、外企经验达内外企 IT培训
210www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
大量 IT认证培训视频资料免费下载! (包括达内,Java尚学堂
,北京树人,赛迪网校,传智播客,新东方网校等 )!
网址 http://www.ibeifeng.com/?u=15670
1www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
软 件 工 程 师 培 训 系 列 教 材
Java 语言基础版权所有,翻印必究
CONFIDENTIAL
课程概述北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层
Email:guangzhou@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
达内外企 IT培训 铸就辉煌 IT人生当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
3www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程概述
Java开发环境介绍及编程入门
标示符、关键字及数据类型
表达式及流程控制
数组
方法的定义和调用
面向对象编程
Java语言高级特性
异常处理 (选学 )
AWT & Swing(选学 )
I/O流及文件读写 (选学 )
海外师资、北美技术、外企经验达内外企 IT培训
4www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程框架
Java语言基础开发环境介绍及编程入门标示符、关键字及数据类型表达式及流程控制 数组面向对象编程异常处理
Exceptions
开发图形界面 AWT事件模型 Swing 组件介绍
Java图形编程文件和 I/O流面向对象编程 Java语言高级特性基本数据结构及算法海外师资、北美技术、外企经验达内外企 IT培训
5www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
课程目标
掌握程序设计语言开发的一般步骤
编译并运行 Java应用程序
理解并使用 Java的在线帮助文档
理解 Java语言的语法元素和结构特点
理解面向对象程序设计的一般特性,并且能使用这些特性
理解并使用 Java异常处理机制
开发一个图形用户界面
理解 Java事件处理模型
了解常用的 swing组件
了解 Java I/O流
掌握对文件的读写操作海外师资、北美技术、外企经验达内外企 IT培训
6www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
开发环境
Sun Ultra Workstations/PCs
Solaris/Linux
J2SE 5.0
NetBeans/JBuilder/WSAD/EClipse
Oracle 9i
CONFIDENTIAL
Module 1
Java开发环境介绍及编程入门北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
世上没有绝望的处境,只有对处境绝望的人海外师资、北美技术、外企经验达内外企 IT培训
8www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
了解高级语言开发的一般步骤
正确安装及配置 Java开发和运行环境
理解 JVM的运行机制
了解 java语言的垃圾回收机制
编写并运行第一个 java代码海外师资、北美技术、外企经验达内外企 IT培训
9www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
程序语言发展历程机器语言:二进制机器代码,不便理解,不好记忆,
与硬件平台相关,不具有可移植性。
汇编语言:用助记符号来描述,与机器代码一一对应,
能够理解,但同样不可移植。
高级语言:按自然语言的语法风格书写程序,方便理解,
在原代码的层次上可以实现跨平台移植。
10001001 11100101
mov dptr,#2000
if(a>b)
max=a;
else
max=b;
海外师资、北美技术、外企经验达内外企 IT培训
10www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
高级语言开发过程编辑原代码 编译 执行原码机器码 机器码 机器码
CPU CPU CPU
跨平台
01
00
11
01
10
10
00
11
00
11
01
01
不跨平台海外师资、北美技术、外企经验达内外企 IT培训
11www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java开发基本术语
JDK
JRE
JVM
JDK:(Java Development kit)
包含 Java运行的基本类库和开发命令
,安装 JDK可以进行完整的 Java开发。
JRE:(Java Runtime Environment)
包含 Java运行的基本类库和一些运行命令,安装 JRE可以运行编译好的 Java
程序。
JVM:(Java Virtual Machine)
Java语言内部运行的核心。
海外师资、北美技术、外企经验达内外企 IT培训
12www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
下载并安装 JDK
1.从以下网站可下载 JDK
http://java.sun.com
根据开发机器的不同,请下载相应平台下的 JDK
2,Install JDK
Windows,run the executable
Unix,run the shell
海外师资、北美技术、外企经验达内外企 IT培训
13www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JDK 下载页面
Win 32平台 JDK下载
Linux平台 JDK下载海外师资、北美技术、外企经验达内外企 IT培训
14www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
配置 Java环境变量
3,设置如下三个环境变量,JAVA_HOME,CLASSPATH,PATH
Windows 2000/NT/XP系统:
开始 —设置 —控制面板 —系统 —高级 —环境变量海外师资、北美技术、外企经验达内外企 IT培训
15www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
配置 Java环境变量
Unix系统:
csh,添加以下三行命令到 $HOME/.cshrc文件中
setenv JAVA_HOME /usr/java...
setenv PATH $JAVA_HOME/bin:...
setenv CLASSPATH,
bsh/ksh:添加以下三行命令到 $HOME/.profile文件中
JAVA_HOME=/usr/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.
export JAVA_HOME PATH CLASSPATH
海外师资、北美技术、外企经验达内外企 IT培训
16www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java虚拟机 (JVM)
Bytecode
JVM
CPU
提供字节码( bytecode)的运行环境屏蔽底层平台的差异海外师资、北美技术、外企经验达内外企 IT培训
17www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JVM的作用海外师资、北美技术、外企经验达内外企 IT培训
18www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java垃圾收集的概念
Java语言使用 new运算符来分配内存空间,没有动态内存分配的概念。
Java系统线程自动处理无用内存空间的垃圾收集
Java程序员只能建议,但不能强制 JVM去执行垃圾收集程序,使用下面的代码:
java.lang.System.gc()/java.lang.Runtime.gc()
海外师资、北美技术、外企经验达内外企 IT培训
19www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java程序的运行过程
HelloWorldApp.java
HelloWorldApp.class
javac
java跨平台不跨平台海外师资、北美技术、外企经验达内外企 IT培训
20www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
My First Java Program
package day01; //package declaration
/**
*This is my first java program,In this program,I defined a
variable—*name with type String,and then,I print,Hello
Everybody!” and *name?s value to screen.
*/
public class MyFirstJavaProgram { //class declaration
public static void main(String[ ] args) { //execution entry
String name="tony tang";
System.out.println("Hello Everybody! ");
System.out.println("my name is:"+name);
}//main method end!
}//class end!
海外师资、北美技术、外企经验达内外企 IT培训
21www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java 开发基本概念
源文件
1,只能包含一个顶层的 public类或接口。
2,源文件的文件名必须跟这个 public 类或接口名相同(如果存在的话),并且以,java作为后缀名。
包
1,将类和接口组织在一起的一个实体。
2,在文件系统中用一层目录(文件夹)来描述。
海外师资、北美技术、外企经验达内外企 IT培训
22www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
编译和运行 MyFirstJavaProgram
1,保存原代码文件到以下位置:
e:\java_source\day01\MyFirstJavaProgram.java
2,改变当前目录到 e:\java_source
3,使用 javac命令编译 MyFirstJavaProgram.java文件
javac day01\ MyFirstJavaProgram.java
4,运行 MyFirstJavaProgram
java day01.MyFirstJavaProgram
海外师资、北美技术、外企经验达内外企 IT培训
23www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
重要的 Java命令
编译 java文件成 class文件
$javac <options> <source files>
执行一个类文档
$java [-options] class [args...]
生成 java程序文档
$javadoc [options] [packagenames] [sourcefiles] [@files]
生成 /列出 /展开 /更新 一个 jar存档文件
$ jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C directory] files,..
海外师资、北美技术、外企经验达内外企 IT培训
24www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JDK提供的开发类库
java.lang
java.awt
javax.swing
java.awt.event
java.io
java.util
海外师资、北美技术、外企经验达内外企 IT培训
25www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java API 文档
Download it from http://java.sun.com
海外师资、北美技术、外企经验达内外企 IT培训
26www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
怎样建立 Java开发环境
Java语言的关键特性
Java虚拟机 (JVM)的功能
Java的垃圾收集机制
常用 Java开发命令和开发工具包
编写并运行一个 Java应用程序
CONFIDENTIAL
Module 2
标示符、关键字和数据类型北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
你可以选择这样的,三心二意,,
信心、恒心、决心;创意、乐意海外师资、北美技术、外企经验达内外企 IT培训
28www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
-?程序注释
标示符
关键字
基本数据类型海外师资、北美技术、外企经验达内外企 IT培训
29www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
注 释
三种类型的注释
//单行注释
/*这是一段多行注释,
它跨越了多个行
*/
/** 这是一个文档注释,可以使用 JDK的 javadoc工具从原文件中抽取这种注释形成程序的帮助文档。
*/
使用 javadoc命令建立 HTML格式的程序文档
javadoc [options] [packagenames] [sourcefiles] [@files]
海外师资、北美技术、外企经验达内外企 IT培训
30www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的标示符
1,什么是标示符?
在 java语言中用来给一个类、变量或方法命名的符号
2,标示符的命名规则:
以字母,“_”或,$”符号开头可以包含字母,“_”,,$”和数字符号大小写敏感不能与保留关键字冲突没有长度限制例如,identifier _sys_ var1 $char userName
user_ name
海外师资、北美技术、外企经验达内外企 IT培训
31www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的标示符(续)
3,命名 约定,
类名,接口名,每个单词的首字母应该大写。
class MyFirstClass
interface Weapon
字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写。
boolean isWoman
void setName(String name)
常量:全部用大写字母表示。
public final int GREEN
public final int HEAD_ COUNT
Java包( Package):它们全都字母小写。
package java.awt.event
海外师资、北美技术、外企经验达内外企 IT培训
32www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java中的关键字关键字列表:
abstract boolean break byte case catch char
class continue default do double else extends
enum false final finally float for if implements
import instanceof int interface long native new
null package private protected public return short
static super switch synchronized this throw
throws transient true try void volatile while
保留字,const,goto
所有的关键字都是小写,friendly,sizeof不是 java的关键字海外师资、北美技术、外企经验达内外企 IT培训
33www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数据类型基本数据类型( primitive type)
引用数据类型( reference type)
海外师资、北美技术、外企经验达内外企 IT培训
34www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java的基本数据类型
boolean 布尔值( true 或 false)
byte 8-bit 整形值
short 16-bit 整形值
int 32-bit 整形值
long 64-bit 整形值
char 16-bit unicode编码的字符
double 64-bit 浮点数值
float 32-bit 浮点数值海外师资、北美技术、外企经验达内外企 IT培训
35www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔类型 -boolean
一个 boolean类型的变量用来表示一个或真或假的关系
一个 boolean 类型变量的值必须是 true 或 false二者之一
boolean isCorrect = true;
海外师资、北美技术、外企经验达内外企 IT培训
36www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
文本数据类型 — char和 String
char
1,其实就是一个无符号的 16位整形,其范围为 0~ 65535,用来存储该字符的 Unicode编码值,因为 Unicode 编码中包含汉字的编码,所以一个
char类型的变量也可以存储一个汉字字符。
2,在代码中直接给出的一个字符值必须用单引号括起来。
char zhChar =?中’;
char enChar =?a?;
char ucChar =?\u0060?;
3,对某些不方便直接书写或直接书写有歧义的字符,java语言规定用转义字符给出。
4,可以把 char类型数据当作整数数据来操作。例如:
int three=3;
char one=?1?;
int four=three+one;
海外师资、北美技术、外企经验达内外企 IT培训
37www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
转义字符转义字符 描述
\ddd 1到 3位 8进制数所表示的字符 (ddd)
\uxxxx 1到 4位 16进制数所表示的字符 (xxxx)
\? 单引号字符
\ 双引号字符
\\ 反斜杠字符
\r 回车
\n 换行
\f 走纸换页
\t 横向跳格
\b 退格
Java语言中转义字符都以 ‘ \‘给出常用转义字符列表:
海外师资、北美技术、外企经验达内外企 IT培训
38www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
字符串类型 ----String
String
1,是 JDK中定义的一个类,不是基本数据类型
2,一个 String对象可以用来存储多个字符,在程序中直接给出一个 String值要用双引号括起来
String myName =,Tony Tang”;
3,可以使用 + 运算符把多个 String数据连接起来,并且还可连接其他类型的数据例如:
int count=7;
System.out.println("Counted " + count + " chars." );
海外师资、北美技术、外企经验达内外企 IT培训
39www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
整形数据( byte,short,int and long)
三种形式给一个整形变量直接赋值,
十进制、八进制和十六进制
直接给出的值默认是 int类型。
长整形值应该在数字后面跟上 ‘ l? 或 ‘ L?标示。
public void testIntType() {
int ia = 0x55; //十六进制
int ib = 011; //八进制
byte bb = 0x771;
byte ba = (byte)0x771;
long la = 1234567L; //十进制
}
海外师资、北美技术、外企经验达内外企 IT培训
40www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
整形数据在计算机内的存储方式计算机能存储的值都是二进制值,整形数据在计算机中的存储方式分两种情况讨论:
short a=57; 0000 0000 0011 1001
1111 1111 1100 0111
1,正整数,存储该数字的二进制原码。
short a=-57;
2,负整数,存储该数字的二进制补码。
int a=57; 0000 0000 0000 0000 0000 0000 0011 1001
int a=-57; 1111 1111 1111 1111 1111 1111 1100 0111
高字节位 低字节位海外师资、北美技术、外企经验达内外企 IT培训
41www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
浮点数据类型 —
float 和 double
直接在程序中书写的浮点数默认为 dobule类型。
float 类型的数据占 32位长度( 4 Bytes)
double类型的数据占 64位长度( 8 Bytes)
直接表示一个 float 类型的值必须在数字后跟?f? 或‘ F?
直接表示一个 double 类型的值可以在数字后跟?d? 或‘ D?
可以用科学计数法表示,如,123.456e3或 123.456E3
public void testFloatType() {
float fa = 123.4f;
float fb = 12.5E300F;
float fc = (float)12.5E300;
double da = 123D;
double db = 123.456D;
double dc = 123.45e301;
}
海外师资、北美技术、外企经验达内外企 IT培训
42www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
基本数据类型的取值范围
Type Bits Bytes Minimum Range Maximum Range
boolean 8 1 Only two values,true or false
byte 8 1 -27 27 - 1
short 16 2 -215 215 - 1
char 16 2 0 216-1
int 32 4 -231 231 - 1
long 64 8 -263 263 - 1
float 32 4 Not needed Not needed
double 64 8 Not needed Not needed
海外师资、北美技术、外企经验达内外企 IT培训
43www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
变量的声明和赋值
package sample;
public class Assign {
public static void main(String args[]) {
int x,y; // 声明 int类型变量 x和 y
float z = 3.414f; // 声明 float类型变量并赋值
double w = 3.1415; //声明 double类型变量并赋值
boolean truth = true; //声明 boolean类型变量并赋值
char c; //声明 char类型变量 c
String str; //声明 String类型的引用
String str1 =,bye”; //声明 String类型的引用并且实例化
c =?A?; // 给 c变量赋值
str =,Hi out there!”; // 给 str实例化
x = 6;
y = 1000;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
44www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
数组 Array,类 classe,接口 interface属于 reference 类型。
reference 类型的变量是所引用的对象的内存地址。
例子,class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public MyDate( int day,int month,int year) {,.,}
public void print() {,.,}
}
public class TestMyDate {
public static void main( String[] args) {
MyDate my_ birth = new MyDate( 22,7,1964);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
45www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
创建一个类对象:
MyDate my_ birth = new MyDate( 22,7,1964);
海外师资、北美技术、外企经验达内外企 IT培训
46www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
引用数据类型( reference type)
两个引用变量的 赋值 将会产生如下结果:
int x = 7;
int y = x;
MyDate s = new MyDate( 22,7,1964);
MyDate t = s;
t = new MyDate( 22,12,1964);
两个变量指向同一个对象:
海外师资、北美技术、外企经验达内外企 IT培训
47www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
对象气球引用对象 对象引用对象对象就像一个充满氢气的气球,我们没有办法直接去得到它,要想对它的使用都必须通过一根连着它的绳子来访问,这根绳子就是对象的引用。
一根绳子同时只能连着一个气球,就像一个引用同时只能指向一个对象;
可以用多根绳子同时连接一个气球,也就是可以有多个引用同时指向同一个对象;
如果某个气球没有任何绳子连着它,那它就会飞走,同样,某个对象如果没有引用连接它,它就会成为垃圾,等着被 java的垃圾收集器回收;
如果某根绳子没有连接任何气球,那么它就是一个空引用,对它的访问没有意义。
同样,某个引用如果没有指向对象,那么对它的访问将会抛出 NullPointerException
引用 null
海外师资、北美技术、外企经验达内外企 IT培训
48www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章中,我们讨论了以下问题,
不同类型的注释
标示符和关键字
基本数据类型
引用类型
对象的概念海外师资、北美技术、外企经验达内外企 IT培训
49www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个程序,要求定义出 boolean,int,char,double,float,String
类型的变量并赋初值,然后将这些值输出出来。
2,程序中定义有如下语句,画出这些整形值在内存空间中的存储状态。
int a=74;
int b=-132;
int c=0x2B8F;
3,下列哪些赋值语句是错误的:
(1) byte b= 0x175;
(2) int i=0x27f;
(3) char c=123;
(4) int a=?真 ’ ;
(5) float f=12.345E2;
(6) boolean f=0;
海外师资、北美技术、外企经验达内外企 IT培训
50www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
4,判断下列语句中的 a和 b的值是否相等:
(1) int a=0; int b=?0‘;
(2) int a=0; char b=?\u0000‘;
(3) int a=123; char b=?\u007B‘;
(4) int a=0x123; char b=123;
(5) int a=3+?5‘; char b=‘8‘;
(6) int a=?3‘+‘5‘; char b=?8‘;
(7) char a=?\u0000‘; char b=?0‘;
CONFIDENTIAL
Module 3
表达式及流程控制语句中国北京:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号 中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
中国上海:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C区 9楼邮编,200001
Email,shanghai@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
你可以这样理解 impossible(不可能) ——
I'm possible (我是可能的)
海外师资、北美技术、外企经验达内外企 IT培训
52www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
Java的运算符
基本数据类型的赋值
布尔表达式
选择结构 (if else,switch)
循环结构( while,do…while,for )
使用 continue和 break进行循环控制海外师资、北美技术、外企经验达内外企 IT培训
53www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
常用运算符列表序号 描述 运算符 结合性
1 括号和引用 () [ ] 。 左?右
2 单目运算符 ++ - - ! ~ 右?左
3 算术运算符 * / % + - 左?右
4 关系运算符 > >= < <= == != 左?右
5 逻辑运算符 && || & | 左?右
6 位运算符 << >> >>> & | ^ 左?右
7 条件运算符?,/
8 赋值运算符 = += -= *= /= %= >>= >>>= <<= &= |= ^= 右?左海外师资、北美技术、外企经验达内外企 IT培训
54www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
算术运算符说明:
Java对,+”运算符进行了扩展,使它能够进行字符串的连接,
如,abc”+“de”,得到串,abcde”
++i,--i 在使用 i前,先使 i的值改变
i++,i-- 在使用 i后,再改变 i的值海外师资、北美技术、外企经验达内外企 IT培训
55www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
关系运算符说明:
Java中,任何数据类型的数据(包括基本类型和引用类型)都可以通过 ==或 !=来比较是否相等 (这与 C,C++不同 )。
关系运算的结果返回 true或 false,而不是 C,C++中的 1或 0。
等于和不等于适用于所有内建的数据类型,但其他比较不适用于
boolean类型。
海外师资、北美技术、外企经验达内外企 IT培训
56www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔逻辑运算符逻辑运算符 AND( &&),OR( ||)以及 NOT( !)能生成一个布尔值( true或 false)
说明:
只可将 AND,OR或 NOT应用于布尔值。不可将一个非布尔值当作布尔值在逻辑表达式中使用例如:以下是非法的。
int i=1,j=2;
i && j
i || j
!i
海外师资、北美技术、外企经验达内外企 IT培训
57www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
布尔逻辑运算符说明:
对浮点数字的比较是非常严格的。
短路运算:
1,a && b && c
2,a || b || c
3,x=y=1 a=5,b=3,c=2,d=1
(x=a<b) &&(y=c<d) x,y =?
海外师资、北美技术、外企经验达内外企 IT培训
58www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符运算符 用法 描述
~ ~ op 按位取反
& op1 & op2 按位与
| op1 | op2 按位或
^ op1 ^ op2 按位异或
>> op1 >> op2 op1右移 op2位
<< op1 << op2 op1左移 op2位
>>> op1 >>> op2 op1无符号右移 op2位海外师资、北美技术、外企经验达内外企 IT培训
59www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符( ~,&,|,^)
海外师资、北美技术、外企经验达内外企 IT培训
60www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符( >>,>>>,<<)
说明:
>>,将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,最高位则移入原来高位的值例如,a = 00110111,则 a>>2 = 00001101
b = 11010011,则 b>>2 = 11110100
右移一位相当于除 2取商例如,128 >> 1 returns 128/ 21 = 64
256 >> 4 returns 256/ 24 = 16
-256 >> 4 returns -256/ 24 = -16
>>>,一个数的各二进制位 无符号 右移若干位,与运算符 >>相同,移出的低位被舍弃,但不同的是 最高位都补 0。
如 a = 00110111,则 a>>>2 = 00001101
b = 11010011,则 b>>>2 = 00110100
海外师资、北美技术、外企经验达内外企 IT培训
61www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
位运算符说明:
<<,用来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,低位补 0。
例如,a = 00001111,则 a<<2 = 00111100。
在不产生溢出的情况下,左移一位相当于乘 2
128 << 1 returns 128 * 21 = 256
16 << 2 returns 16 * 22 = 64
海外师资、北美技术、外企经验达内外企 IT培训
62www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换
基本数据类型和引用类型的数据都可以转换类型,但这种转换是有限制的
类型转换分为两种:自动类型转换 (隐含转换 )和强制类型转换 (
显式转换 )
隐含类型转换发生在把一个子类型赋给一个超类型时
显式类型转换有一定的限制海外师资、北美技术、外企经验达内外企 IT培训
63www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
基本数据类型转换序列
char
byte
short
int
double
float
long
说明:
1,在本图中,顺着箭头方向的类型转换可以自动进行,
逆箭头方向的转换或无箭头类型之间的转换必须强制转换。
2,能将 A类型变量自动转换成 B类型变量的前提条件是这种转换不会造成数据和精度的丢失,即 A类型的取值范围是
B类型的取值范围的子集。
海外师资、北美技术、外企经验达内外企 IT培训
64www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换的例子
package sample;
public class CastingTest {
public void implictCasting() {
byte a = 0x60;
int ia = a;
char b = 'a';
int c = b;
long d = c;
long e = 1000000000L;
float f = e;
double g = f;
String s = "hello";
Object o = s;
}
public void explicitCasting() {
long l = 1000000L;
int i = l; //(int)l;
double d = 12345.678;
float f = d; //(float)d;
Object o = new String("Hello");
String str = o; //(String)o;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
65www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
流程控制语句
1 分支语句,if-else,switch-case
2 循环语句,for,while,do-while
3 循环跳转语句,break,continue,label:
海外师资、北美技术、外企经验达内外企 IT培训
66www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
选择结构 — if else
if( boolean expression){
code block 1
}else{
code block 2
}
if( boolean expression){
code block
}
if( boolean expression 1){
code block 1
}else if (boolean expression 2){
code block 2
}else{
code block 3
}
if else 的语法结构
1,基本结构
2,省略 else分支
3,多层嵌套海外师资、北美技术、外企经验达内外企 IT培训
67www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
选择结构 — switch case
switch case 实现多分支选择结构的语句:
switch(expression) {
case 整数值 1,语句 ; break;
case 整数值 2,语句 ; break;
case 整数值 3,语句 ; break;
case 整数值 4,语句 ; break;
case 整数值 5,语句 ; break;
//..
default:语句 ;
}
海外师资、北美技术、外企经验达内外企 IT培训
68www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
switch case 说明说明:
表达式 expression可以是以下四种基本数据类型和枚举类型
(byte,short,int,char)
case子句中的值必须是常量,而且所有 case子句中的值应是不同的
case通常与 break语句联用,以保证多路分支的正确实现。
多个 case可以公用一组执行语句 。
海外师资、北美技术、外企经验达内外企 IT培训
69www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
switch case 应用例题:根据考试成绩的等级打印出百分制分数段。
public class GradeLevel{
public static void main( String args[ ] ){
System.out.println("\n**** first situation ****");
char grade='C'; //normal use
switch( grade ){
case 'A',System.out.println(grade+" is 85~100");break;
case 'B',System.out.println(grade+" is 70~84");break;
case 'C',System.out.println(grade+" is 60~69");break;
case 'D',System.out.println(grade+" is <60");break;
default,System.out.println("input error");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
70www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
for循环
格式
for(初始表达式 ; 布尔表达式 ; 步进 ){
循环体语句块
}
说明:
无论初始表达式,布尔表达式,还是步进,都可以置空。
初始表达式在整个循环过程中只执行一次。
for(int i = 0,j = 1; i < 10 && j != 11; i++,j++)
/* body of for loop */;
海外师资、北美技术、外企经验达内外企 IT培训
71www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
while 循环
格式:
while(布尔表达式 ){
循环体语句块
}
例子,public class WhileTest {
public static void main(String[] args) {
double r = 0;
while(r < 0.99d) {
r = Math.random();
System.out.println(r);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
72www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
do while 循环
格式,
do {
循环语句
}while(布尔表达式 );
例子,
海外师资、北美技术、外企经验达内外企 IT培训
73www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
break
不带标号的 break语句,跳出它所在的循环语句或 switch 语句,并从紧跟该循环语句或 switch 语句后的第一条语句处执行
int n=13;
boolean flag=true;
for(int i=2;i<=n/2;i++){
if(n%i==0){
flag=false;
break;
}
}
System.out.println(n+(flag?‖ is‖:‖is not‖)+‖ a prime number‖);
海外师资、北美技术、外企经验达内外企 IT培训
74www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
带标号的 break
带标号的 break语句:
对 Java来说,唯一用到标签的地方是在循环语句之前,如:
label1,循环语句跳出标号所指定的块,并从紧跟该块后的第一条语句处执行海外师资、北美技术、外企经验达内外企 IT培训
75www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
continue
不带标号的 continue语句,用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环
带标号的 continue语句 跳转到标号指明的外层循环中。
海外师资、北美技术、外企经验达内外企 IT培训
76www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
实例变量和局部变量
实例变量的初始化
Java语言的运算符
基本数据类型和引用类型
使用 if,switch,for,while,do,break and continue 来控制程序的流程海外师资、北美技术、外企经验达内外企 IT培训
77www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,给定 3个数 a,b和 c,输出最大的数。
2,某电信公司的市内通话费计算标准如下:
三分钟内 0.2元,三分钟后每增加一分钟增加 0.1元,不足一分钟的按一分钟计算。
要求编写程序,给定一个通话时间(单位:秒),计算出应收费金额。
3,某市的出租车计费标准为,3公里以内 10元,3公里以后每加 0.5公里加收 1元;每等待 2.5分钟加收 1元;超过 15公里的加收原价的 50%为空驶费。要求编写程序,对于任意给定的里程数(单位:公里)和等待时间(单位:秒)计算出应付车费,车费直接截去小数位,只取整数。
4,编写程序,判断给定的某个年份是否是闰年。
闰年的判断规则如下:
( 1)若某个年份能被 4整除但不能被 100整除,则是闰年。
( 2)若某个年份能被 400整除,则也是闰年。
海外师资、北美技术、外企经验达内外企 IT培训
78www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
5,给定一个百分制的分数,输出相应的等级。
90分以上 A级
80~89 B级
70~79 C级
60~69 D级
60分以下 E级
6,编写程序求 1+3+5+7+…… +99 的和值。
7,编写程序输出 1-100之间所有能被 7整除的偶数。
8,求所有满足如下条件的四位数:
千位上的数字大于百位数字,百位数字大于十位数字,十位数字大于个位数字,并且千位数字是其他三位数字的和。
9,给定两个任意的正整数,求它们之间的所有完全平方数,完全平方数是指这个数是某个整数的平方,例如 16,25,36等都是完全平方数。
10,给定 2个正整数,求它们的最大公约数。
11,编写程序求下列多项式的前 50项的和:
1-1/3+1/5-1/7+1/9-……
海外师资、北美技术、外企经验达内外企 IT培训
79www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
12,请编写程序输出九九乘法表。
13,编写程序输出 1-100之间的所有素数。
14,在屏幕上输出一个 n行的金字塔图案,例如,若 n=5,则图案如下:
15,求斐波那契数列前 n项的和值,斐波那契数列如下:
1,1,2,3,5,8,13,21……
前两位数是 1,从第三位开始每位数都是前两位数之和
16,给定一个整数,把它的各位数字倒排过来形成一个新的整数例如:给定 12345 输出 54321 ;给定 9870 输出 789
CONFIDENTIAL
Module 4,数组
www.tarena.com.cn
中国北京:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号 中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
中国上海:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C区 9楼邮编,200001
Email,shanghai@tarena.com
加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当上帝关上了所有门的时候,他一定为你开了一扇窗海外师资、北美技术、外企经验达内外企 IT培训
81www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本 章 目 标
声明并建立一个基本类型的数组和引用类型的数组
为什么数组在使用前必须初始化
定义并初始化一个数组
正确使用数组中的元素
创建一个多维数组(存放数组的数组)
海外师资、北美技术、外企经验达内外企 IT培训
82www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
声明数组相同的数据类型元素类型按一定的顺序排列就构成了数组数组元素可以为:
基本数据类型
某一类的对象(引用类型)
建立 java数组需要以下三个步骤:
声明数组
创建数组空间
初始化数组元素海外师资、北美技术、外企经验达内外企 IT培训
83www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建数组声明数组的语法格式有两种如下:
数组元素类型 数组名 [];
数组元素类型 [] 数组名;
例如,char s[]; Point p[];
或,char[] s; Point[] p;
海外师资、北美技术、外企经验达内外企 IT培训
84www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组实例化说明:
为数组开辟内存空间,在创建数组空间时必须为它指明数组的长度。
一个数组是一个对象,所以用 new来创建数组语法格式为:
数组名 = new 数组元素类型 [数组元素的个数 ];
例如:
int[] MyIntArray;
MyIntArray =new int[10];
海外师资、北美技术、外企经验达内外企 IT培训
85www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组实例化说明:
也可以在创建数组空间的时候,同时将初值给出来,例如:
int[] MyIntArray={1,2,3,4,5,6,7,8,9};
存储空间的分配等价于使用 new
基本数据类型的数组元素系统会自动初始化为默认值(对于数值,默认值就是零;对于 char,它是 null;而对于 boolean,它却是 false)。
数组名是对数组对象的一个引用。
海外师资、北美技术、外企经验达内外企 IT培训
86www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个基本数据类型的数组创建一个基本数据类型元素的数组:
public char[] createArray(){
char[] s;
s = new char[ 26];
for ( int i= 0; i< s.length; i++ ) {
s[ i] = (char) (‘A’+ i);
}
return s;
}
海外师资、北美技术、外企经验达内外企 IT培训
87www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个对象数组创建一个对象数组:
public Point[] createArray(){
Point[] p;
p = new Point[10];
for ( int i= 0; i<p.length; i++ ) {
p[i] = new Point( i,i+1);
}
return p;
}
海外师资、北美技术、外企经验达内外企 IT培训
88www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
多维数组
1,定义方式,type 维数 arrayName;
例如,int [][] intArray; int[][][] a2;
2,分配内存空间,有两种方法:
直接为每一维分配空间,如 int[][] a = new int[2][3];
int twoDim [][] = new int [][ 4]; //error
分别为每一维分配空间如,int[][] a = new int[2][ ];
a[0] = new int[3];
a[1] = new int[3];
可以为每行设置为空间大小不同的数组。
如,a[0] = new int[3];
a[1] = new int[5];
海外师资、北美技术、外企经验达内外企 IT培训
89www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
多维数组说明说明,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。
3,初始化有两种方式:
先定义数组,分配空间,然后直接对每个元素进行赋值
在定义数组的同时进行初始化。
如,int a[][] = {{2,3},{1,5},{3,4}};
海外师资、北美技术、外企经验达内外企 IT培训
90www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数组的拷贝使用 System,arraycopy() 方法,
// original array
int elements[] = { 1,2,3,4,5,6 };
// new larger array
int hold[] = { 10,9,8,7,6,5,4,3,2,1 };
// copy all of the elements array to the hold
// array,starting with the 0th index
System,arraycopy( elements,0,hold,0,elements,length);
海外师资、北美技术、外企经验达内外企 IT培训
91www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章里,我们讨论了以下问题,
如何声明并建立一个基本数据类型的数组和引用类型的数组
为什么数组在使用前必须实例化
怎样定义并初始化数组
怎样知道数组的元素个数
怎样建立一个多维数组海外师资、北美技术、外企经验达内外企 IT培训
92www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1.定义一个 int型的一维数组,包含 10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
2.定义一个 int型的一维数组,包含 10个元素,分别赋值为 1~10,然后将数组中的元素都向前移一个位置,即,a[0]=a[1],a[1]=a[2],… 最后一个元素的值是原来第一个元素的值,然后输出这个数组。
3,定义一个 int型的一维数组,包含 40个元素,用来存储每个学员的成绩,循环产生 40个
0~100之间的随机整数,将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。
4,(选做)承上题,将这 40个成绩按照从高到低的顺序输出出来。
5,(选做)编写程序,将一个数组中的元素倒排过来。例如原数组为 1,2,3,4,5;
则倒排后数组中的值为 5,4,3,2,1。
海外师资、北美技术、外企经验达内外企 IT培训
93www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
6,要求定义一个 int型数组 a,包含 100个元素,保存 100个随机的 4位数。再定义一个
int型数组 b,包含 10个元素。统计 a数组中的元素对 10求余等于 0的个数,保存到 b[0]中;对 10求余等于 1的个数,保存到 b[1]中,…… 依此类推。
7,定义一个 20*5的二维数组,用来存储某班级 20位学员的 5门课的成绩;这 5门课按存储顺序依次为,core C++,coreJava,Servlet,JSP和 EJB。
( 1)循环给二维数组的每一个元素赋 0~100之间的随机整数。
( 2)按照列表的方式输出这些学员的每门课程的成绩。
( 3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。
( 4)要求编写程序求所有学员的某门课程的平均分。
CONFIDENTIAL
Module 5,模块化的程序设计
----方法的调用北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
再长的路,一步步也能走完;
再短的路,不迈开双脚也无法到达海外师资、北美技术、外企经验达内外企 IT培训
95www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的概念方 法输入 输出当我们要建一栋大楼,我们不需要把一砖一瓦的建立过程全部写在一个程序代码块里,我们可以把建大楼的工作划分成若干个功能模块,让每一个模块完成一部分功能,这样方便我们对程序的管理和维护,比如:打地基的方法,
建主体的方法,装修的方法等等。而在我们的主题程序中只需要对他们去依次调用就可以完成整个建大楼的工作主方法 方法 A 方法 B
模块化的程序设计过程实际上就是方法之间相互调用的过程模块化的思想:把一个大的问题细分为若干个小的问题方法:完成某一具体功能的封装的程序模块海外师资、北美技术、外企经验达内外企 IT培训
96www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的定义
<修饰符 > <返回值 > <方法名 >([<参数列表 >])
[throws <声明抛出异常类型 >] {<方法体语句块 >}
public void setName(String name) throws IllegalNameException {… }
public String getName() {… }
如果一个方法没有明确的返回值,那么它的返回值类型必须定义为 void
构造方法没有返回值,也不能写 void
海外师资、北美技术、外企经验达内外企 IT培训
97www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
模块化程序设计 — 方法的调用方法调用的基本步骤:
1,为被调用方法分配临时存储空间。
2,将实参的值复制一份传给形参。
3,程序流程跳到被调用方法中执行。
4,被调用方法执行完成或遇到 return语句,则程序流程跳回主方法,
同时被调用 方法的临时存储空间被回收。
海外师资、北美技术、外企经验达内外企 IT培训
98www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
public class MethodInvoke{
public static void main(String[] args){
int age=21;
addAge(age);
System.out.println(―age=―+age);
}
public static void addAge(int a){
a++;
System.out.println(―a=―+a);
}
}
方法的调用 (图解 )
main()方法 addAge()方法
age 21
step1,为被调用方法分配临时存储空间
a21
step2,将实参的值复制一份传给形参
step3:程序流程跳到被调用方法中执行
step4,被调用方法执行完成或遇到
return语句,则程序流程跳回主方法,
同时被调用 方法的临时存储空间被回收
22
F:\>java MethodInvoke
a=22
age=21
海外师资、北美技术、外企经验达内外企 IT培训
99www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个方法,求 1+3+5+7+… 的前 n项的和,n通过方法参数给定,和值通过方法返回值返回。
2,写一个方法判断给定的年份是否是闰年。
3,写一个方法,用来求一个整形数组中的最大元素,方法需要一个 int[] 类型的参数,返回一个整形值。
4,写一个方法用来判断一个整数是否是素数,如果是则返回 true,否则返回 false,
在主方法中调用这个方法,验证其是否正确。
5,写一个方法用来生成一个整形数组,该方法返回一个 int[] 类型,需要一个 int
型参数,数组的大小由传进来的参数决定。
6,要求将第 4章练习 7的 (1)~(4)步分别用方法实现。
CONFIDENTIAL
Module 6,类和对象北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
假如我不能,我一定要;假如我一定要,我就一定能!
海外师资、北美技术、外企经验达内外企 IT培训
101www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章目标
面向对象编程的基本概念:封装、继承和多态
private 和 public 修饰符
对象的创建和初始化
方法的调用
方法的重载和覆盖
this和 super关键字
理解 Java语言中的下列概念:
package,import,class,member method,field、
constructor,override/overload,superclass constructor
海外师资、北美技术、外企经验达内外企 IT培训
102www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Everything is Object
程序设计的本质工作:抽象抽象的方式不一样:面向过程和面向对象面向对象的观点:一切皆对象一只名为小强的蟑螂一条名为旺财的狗某个客户下的一个订单我在网上订购的一本书 ……
类( Class) —抽象的数据类型,用来描述某一类具有相同特性的对象。
比如:蟑螂、狗、订单、书先有类的定义,然后才能生成对象。
定义一个类我们需要定义两种成员:
属性(用来描述静态的特性)
方法(用来描述动态的操作)
海外师资、北美技术、外企经验达内外企 IT培训
103www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
定义类
public class Animal{
String name; //属性
int age; //属性
public Animal(String name,int age){ //构造方法
this.name=name;
this.age=age;
}
public void eat(){ //方法
System.out.println(name+‖ eating!!‖);
}
}
[修饰符 ] class 类名 [extends 父类名 ] [implements 接口 1 [,接口 2… ]] {
类的定义主体
}
海外师资、北美技术、外企经验达内外企 IT培训
104www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
创建一个对象(实例)
1,为对象分配存储空间,
2,为成员变量赋初始值
3,调用构造方法海外师资、北美技术、外企经验达内外企 IT培训
105www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
构造方法
方法名跟类名相同
没有返回值类型
public class Xyz {
// member variables go there
public Xyz() {
// set up the object.
}
public Xyz(int x) {
// set up the object with a parameter
}
}
海外师资、北美技术、外企经验达内外企 IT培训
106www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
参数传递
基本数据类型的参数按值传递
引用类型的参数按引用传递
package sample;
public class ParameterTest {
static void increment(int i) { ++i;}
static void changeName(Student s) {
s.setName("Larry"); }
static void changeStudent(Student s) { s = new
Student("Mary","female",20); }
public static void main(String[] args) {
int i = 2;
System.out.println("before increment() " + i);
increment(i);
System.out.println("after increment() " + i);
Student s = new Student("George","male",18);
System.out.println("before changeName() " + s);
changeName(s);
System.out.println("after changeName() " + s);
s = new Student("George","male",18);
System.out.println("before changeName() " + s);
changeStudent(s);
System.out.println("after changeName() " + s);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
107www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的调用 ----引用传递
public class MethodInvoke2{
public static void main(String[] args){
Animal a1=new Animal(―xiaoqiang‖,4);
addAge(a1);
System.out.println(a1.age);
}
public static void addAge(Animal a){
a.age++;
}
}
main() addAge()
name
age
0x1a2d3c4f
a1
0x1a2d3c4f
4
a1 a
海外师资、北美技术、外企经验达内外企 IT培训
108www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
this关键字
this 指向当前类或对象
public class Student {
private String name;
private String gender;
private int age;
……
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setGender(String gender) { this.gender = gender; }
public String getGender() { return gender; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
……
}
海外师资、北美技术、外企经验达内外企 IT培训
109www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
数据的隐藏
package sample;
public class DataHiddenTest {
public static void main(String[] args) {
Student s = new Student();
s.name = "George"; //illegal
s.gender = "male"; //illegal
s.age = 18; //illegal
}
}
public class Student {
private String name;
private String gender;
private int age;
public Student() {}
…
}
海外师资、北美技术、外企经验达内外企 IT培训
110www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
封 装
隐藏实现细节
为所有用户提供统一界面
增强可维护性海外师资、北美技术、外企经验达内外企 IT培训
111www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的重载
方法名相同
参数类型一定不同
返回值可以相同也可以不同
package sample;
import java.net.MalformedURLException;
import java.net.URL;
public class OverloadingTest {
public void print(int i) {}
public void print(float f) {}
public String print() { return "Hello"; }
protected URL print(String s) throws
MalformedURLException { return new URL(s); }
}
海外师资、北美技术、外企经验达内外企 IT培训
112www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
构造方法的重载
Call to this(…) must be the first statement in constructor
package sample;public class Employee {
private String name; private int salary;
public Employee(String n,int s) {name = n;
salary = s;}
public Employee(String n) {this(n,0);
}
public Employee() { //int a = 0; //Illegal
this( " Unknown " ); }
}
海外师资、北美技术、外企经验达内外企 IT培训
113www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
默认的构造方法
每个类都有构造方法。
如果程序员在定义类时没有定义构造方法的话,Java
将自动为该类添加一个公开的空参空实现的构造方法。
如,public Animal () {
}
海外师资、北美技术、外企经验达内外企 IT培训
114www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
继承
是,is a” 的关系
声明的形式
public class Manager extends Employee {…}
Java是一个单一继承的语言 ---- 一个类只有一个直接父类,如果没有声明父类,则默认的父类为
java.lang.Object
海外师资、北美技术、外企经验达内外企 IT培训
115www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
继承
构造方法不能被继承
方法和属性可以被继承
子类的构造方法隐含的调用父类的默认构造方法
如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。
如下形式:
super(…)
海外师资、北美技术、外企经验达内外企 IT培训
116www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
super 关键字
代表指向父类的引用
super.age
super.addAge()
代表调用父类的构造方法
super();
super(“wangcai”,8);
super 关键字的两种用法:
海外师资、北美技术、外企经验达内外企 IT培训
117www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java
package sample;
public class InheritanceTest {
public static void main(String[ ] args) {
new SubA(1);
SubA sa = new SubA();
sa.print();
new SubB();
}
}
海外师资、北美技术、外企经验达内外企 IT培训
118www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java(Cont.)
class SuperA {
private int j = 10;
public SuperA(int i) {System.out.println("constructor SuperA(int)"); }
public SuperA() { System.out.println("constructor SuperA()"); }
void print() {System.out.println("print() in SuperA"); }
}
class SubA extends SuperA {
private int k = 2;
public SubA(int i) { super(i); System.out.println("constructor
SubA(int)"); }
public SubA() {
//隐含调用 super()-->SuperA()
System.out.println("constructor SubA()");
}
void print() { super.print(); System.out.println("print() in SubA"); }
}
海外师资、北美技术、外企经验达内外企 IT培训
119www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InheritanceTest.java(Cont.)
class SuperB {
public SuperB(String s) {
System.out.println("Constructor superB(String)");
}
}
class SubB extends SuperB {
public SubB() {
super("Hello");
System.out.println("Constructor subB()");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
120www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
instanceof 运算符
package sample;
public class InstanceofTest {
public static void main(String[] args) {
Employee unknown = new Manager();
Employee gzhu = new Employee("gzhu");
System.out.println("unknown is instanceof manager," +
(unknown instanceof Manager));
System.out.println("unknown is instanceof employee," +
(unknown instanceof Employee));
System.out.println("gzhu is instanceof manager," +
(gzhu instanceof Manager));
System.out.println("gzhu is instanceof employee," +
(gzhu instanceof Employee));
}
}
boolean operator
Type identification
海外师资、北美技术、外企经验达内外企 IT培训
121www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
类型转换
使用 instanceof 运算符确定对象的类型
子类对象可以隐含扩展为父类型
父类型必须明确声明转化为子类型
不是所有的父类型对象都能转化为子类型海外师资、北美技术、外企经验达内外企 IT培训
122www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
方法的覆盖
方法名相同,参数类型相同,返回值也相同
访问权限不能更封闭
抛出异常类型不能更宽泛海外师资、北美技术、外企经验达内外企 IT培训
123www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java
package sample;
import java.io.IOException;
public class OverridenTest {
public static void main(String[] args) {
SuperC c = new SubC();
c.methodA(0);
c.methodB();
c.methodC();
c.methodD("hello",3);
c.methodE("aaa",2);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
124www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java(Cont.)
class SuperC {
public void methodA(int i) { System.out.println("methodA(int) in
SuperC"); }
protected void methodB() { System.out.println("methodB() in
SuperC"); }
void methodC() { System.out.println("methodC() in SuperC"); }
public void methodD(String s,int i) throws IOException {
System.out.println("methodD(String,int) in SuperC");
}
public int methodE(String s,int i) {
System.out.println("methodE(String,int) in SuperC");
return 0;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
125www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OverridenTest.java(Cont.)
class SubC extends SuperC {
public void methodA(int i) { System.out.println("methodA(int) in
SubC"); }
public void methodB() { System.out.println("methodB() in SubC"); }
/**The followings are invalid overriding */
private void methodC() { System.out.println("methodC() in SubC"); }
public void methodD(String s,int i) throws Exception {
System.out.println("methodD(String,int) in SubC");
}
public double methodE(String s,int i) {
System.out.println("methodE(String,int) in SubC");
return 0;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
126www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结
面向对象的基本概念,封装,继承和多态
对象的建立和初始化
对象的方法调用
构造方法
方法的重载和覆盖
this 关键字和 super关键字海外师资、北美技术、外企经验达内外企 IT培训
127www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个类,名为 Animal,该类有两个私有属性,name(代表动物的名字 ),和 legs(代表动物的腿的条数 );要求为两个私有属性提供 public 的访问方法。并提供个两构造方法
,一个无参,默认给 name赋值为 AAA,给 legs赋值为 4;另一个需要两个参数,分别用这两个参数给私有属性赋值。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的 move()方法,其中一个无参,在屏幕上输出一行文字,XXX Moving!!(XXX
为该动物的名字 );另一个需要一个 int参数 n,在屏幕上输出 n次 XXX Moving!!
2,写一个类 Fish,继承自 Animal类,并提供一个构造方法,该构造方法需要一个参数 name,
并给 legs赋默认值 0;该类还要求覆盖 Animal类中的无参 move()方法,要求输出,XXX
Swimming!!
3,写一个类 Bird,继承自 Animal类,并提供一个构造方法,该构造方法需要一个参数 name,
并给 legs赋默认值 2;该类还要求覆盖 Animal类中的无参 move()方法,要求输出,XXX
Flying!!
4,写一个类 Zoo,要求分别生成若干个 Animal,Fish和 Bird。并调用他们的属性和方法。
海外师资、北美技术、外企经验达内外企 IT培训
128www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
5.写一个类用来模拟栈这种数据结构,要求底层使用数组存储数据,并给出相应的进栈和出栈的方法 。
6,写一个类 Person,包含以下属性,String name; int age; boolean gender;
Person partner。 为 Person类写一个 marry(Person p)方法,代表当前对象和 p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因 。 要求在另外一个类中写一个主方法,来测试以上程序 。 ( 下列情况不能结婚,1,同性;
2,未达到结婚年龄,男 <24,女 <22; 3,某一方已婚 )
7,写以下类:
飞机:型号,最大座位数,最大航程 。
航班:航班号,航空公司名称,航空公司代号,航班日期,出发地,目的地,
起飞 时间,到达时间,里程,使用飞机,剩余座位,全价,折扣率 。
方法,setPlane(Plane p);
客户:姓名,身份证号,帐户余额 。
方法,order(Flight f);
CONFIDENTIAL
Module 7,Java语言高级特性
达内外企 IT培训 铸就辉煌 IT人生北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
130www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
static 修饰属性和方法
final 修饰类,方法和变量
abstract 类和方法
接口
访问权限的控制
Object类介绍
main()方法的参数
Wrapper Class
海外师资、北美技术、外企经验达内外企 IT培训
131www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
静态变量
一个类只有一份,
被类的所有实例共享
能在没有生成任何类的实例时就被访问到
在某种意义上类似于全局变量
直接使用类名来访问
package sample;
public class Animal {
private int serialNumber;
private String name;
private static int counter = 0;
public Animal (String name) {
counter++;
serialNumber = counter;
this.name=name;
}
public static void main(String[] args) {
Animal a1=new Animal(“xiaoqiang”);
Animal a2=new Animal(“wangcai”);
Animal a3=new Animal(“a huang”);
System.out.println("counter " + counter);
System.out.println(a1.name+,:”+a1.serialNumber);
System.out.println(a2.name+,:”+a2.serialNumber);
System.out.println(a3.name+,:”+a3.serialNumber);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
132www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
静态方法
可以在没有任何实例时调用
不能在 static方法内部访问非 static成员
不能被非 static方法覆盖
package sample;
public class StaticTest {
int x;
public static void main(String[] args){
System.out.println(Algorithm.add(2,3));
//x = Algorithm.add(4,5); //illegal
}
}
class Algorithm {
public static int add(int a,int b) {
return a + b;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
133www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
final 关键字
final用来修饰一个类,方法,属性或局部变量
final 类不能被继承
final 方法不能被覆盖
final 变量的值不能被改变
package sample;
public final class FinalTest {
final int i = 10;
/** Creates a new instance of FinalTest */
public FinalTest() {
}
public final int getNumber() {
i = 20; //illegal
return i;
}
}
class FinalSub extends FinalTest {} //illegal
class FinalDemo {
final int getNumber() { return 10; }
}
class FinalDemoSub extends FinalDemo {
int getNumber() { //illegal
return 20;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
134www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
abstract类和 abstract方法
如果一个方法没有实现的代码,那么它必须被声明为抽象的方法。
public abstract String getName();
如果一个类包含有抽象方法,那么它必须被声明为抽象类。
public abstract class Account{
public abstract String getName();
…
}
抽象类不能实例化 ----不能生成对象。
可以定义一个抽象类的引用。
海外师资、北美技术、外企经验达内外企 IT培训
135www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
接 口
接口是一种特殊的抽象类
接口中所有的方法都是抽象方法
一个类可以实现多个接口
接口中的所有属性都会自动声明为 final static
接口与接口之间可以多重继承海外师资、北美技术、外企经验达内外企 IT培训
136www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
访问权限控制
Modifiers Inside class The same package Subclass other
public Yes Yes Yes Yes
protected Yes Yes Yes No
Default (no modifier) Yes Yes No No
private Yes No No No
海外师资、北美技术、外企经验达内外企 IT培训
137www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Object 类的方法
public String toString(),返回对象的字符串描述形式
public boolean equals(Object o):判断两个对象是否相等一般来说,我们会根据需要在自己写的类中覆盖这两个方法,
给出自己的定义。
海外师资、北美技术、外企经验达内外企 IT培训
138www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
toString()方法
返回描述某个对象的字符串
当直接输出一个对象时,这个方法被隐含的调用
package sample;
public class EqualTest {
public static void main(String[] args) {
…
Account a = new Account("george",100.00);
System.out.println(a);
}
}
class Account {
private String name;
private double balance;
public Account(String name,double balance) {
this.name = name;
this.balance = balance;
}
public boolean equals(Object o) {
Account a = (Account)o;
return (name.equals(a.name) && (balance == a.balance));
}
public String toString() {
return,The account:,+ name +,has balance:,+ balance;
}
海外师资、北美技术、外企经验达内外企 IT培训
139www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
equals() 方法
==运算符用来判断两个引用值是否相等(是否指向同一个对象)
equals(Object o) 方法一般在定义类时被覆盖(改写),该方法用来判断两个对象值是否相同。
package sample;
public class EqualTest {
public static void main(String[] args) {
String s1 = new String("Hello");
String s2 = s1;
String s3 = new String("Hello");
System.out.println("s1 == s2:" + (s1==s2));
System.out.println("s1 == s3:" + (s1==s3));
System.out.println("s1.equals(s3):
" + s1.equals(s3));
Account a = new Account("george",100.00);
Account b = new Account("george",100.00);
System.out.println("a == b:" + (a==b));
System.out.println("a.equals(b):" + a.equals(b));
}
}
class Account {
private String name;
private double balance;
public Account(String name,double balance) {
this.name = name;
this.balance = balance;
}
public boolean equals(Object o) {
Account a = (Account)o;
return (name.equals(a.name) &&
(balance == a.balance));
}
}
海外师资、北美技术、外企经验达内外企 IT培训
140www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
传给 main()方法的参数可以通过命令行在运行 java程序时给 main()方法传递参数,这些参数是以一个字符串数组的形式来存放的,我们可以在程序中使用这些参数。
public class MainMethodParameter{
public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
141www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Wrapper Class
Primitive Type Wrapper Class
boolean Boolean
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
海外师资、北美技术、外企经验达内外企 IT培训
142www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
本章总结在这一章中,我们讨论了以下问题,
静态变量和静态方法
final类,方法和变量
访问权限的控制
抽象类和抽象方法
接口
Object类和 String类
通过命令行传参数给 main()方法
基本数据类型的包装类海外师资、北美技术、外企经验达内外企 IT培训
143www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,定义一个接口 Assaultable(可攻击的 ),该接口有一个抽象方法 attack()。
2,定义一个接口 Mobile(可移动的),该接口有一个抽象方法 move()。
3,定义一个抽象类 Weapon,实现 Assaultable接口和 Mobile接口,但并没有给出具体的实现方法。
4,定义 3个类,Tank,Flighter,WarShip都继承自 Weapon,分别用不同的方式实现 Weapon
类中的抽象方法。
5,写一个类 Army,代表一支军队,这个类有一个属性是 Weapon数组 w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,在构造方法里通过传一个 int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组 w。该类还提供一个方法 addWeapon(Weapon wa),表示把参数 wa所代表的武器加入到数组 w中。
在这个类中还定义两个方法 attackAll()和 moveAll(),让 w数组中的所有武器攻击和移动。
6,写一个主方法去测试以上程序。
海外师资、北美技术、外企经验达内外企 IT培训
144www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,写一个类 Student,包含两个属性 String name和 int age;要求覆盖 toString()方法和
equals()方法,使得直接输出 Student对象时输出的是对象的 name和 age;并且当两个对象的 name和 age都相同时认为它们相等;然后写一个主方法测试以上定义。
2,写一个程序,要求运行时从命令行输入不同的值打印不同的结果,若输入,male
则输出,you are a boy!”;若输入,female,则输出,you are a girl!”;若输入其他值则输出,you are wrong!!”。
3,写一个程序,要求运行程序时从命令行输入两个整形的数值,程序将他们的和值输出。
CONFIDENTIAL
Module 8,Java集合框架
(选学 )
达内外企 IT培训 铸就辉煌 IT人生北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
当你觉得没有什么困难能阻碍你去实现心中的梦想时,
上帝就开始帮你了!
海外师资、北美技术、外企经验达内外企 IT培训
146www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架
集合是一种用来存储其他对象的对象
Three elements in Java to make up collections
Interfaces,define the methods that each type of collection must
implement
Implementations,actual classes such as Hashtable and Vector
Algorithms,methods that store,retrieve,and manipulate
elements in a collection
Package java.util
海外师资、北美技术、外企经验达内外企 IT培训
147www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架的接口
Collection
Set List Map
SortedSet SortedMap
List,有序存放,允许重复
Set,随机存放,不允许重复的对象,
SortedSet,自动排序存放
Map,存储 键 --值( key--value)对,要求所有的键必须唯一
SortedMap,按照键的大小来排序海外师资、北美技术、外企经验达内外企 IT培训
148www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
集合框架的继承关系和实现类
Collection
HashSet
(Set)
LinkedList
Vector,ArrayList
(List)
Hashtable
Hashmap
(Map)
TreeSet
(SortedSet)
TreeMap
(SortedMap)
海外师资、北美技术、外企经验达内外企 IT培训
149www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Collection Example,List
package sample;
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
List l = new ArrayList();
l.add(new Integer(1));
l.add(new Integer(4));
l.add(new Integer(3));
l.add(new Integer(2));
Iterator it = l.iterator();
while(it.hasNext()){
int i = ((Integer)it.next()).intValue();
System.out.println("Element in list is," + i);
}
}
}
海外师资、北美技术、外企经验达内外企 IT培训
150www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Collection Example,Map
package sample;
import java.util.*;
public class MapTest {
public MapTest() {
}
public static void main(String[] args) {
String[] s1 = {
"Wang","Zhang","Li"};
String[] s2 = {
"78","87","88"};
Map hm = new HashMap();
for (int i = 0; i < s1.length; i++) {
hm.put(s1[i],s2[i]);
}
System.out.println("Wang score is," + hm.get("Wang"));
System.out.println("Zhang score is," + hm.get("Zhang"));
System.out.println("Li score is," + hm.get("Li"));
}
}
海外师资、北美技术、外企经验达内外企 IT培训
151www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
练 习
1,定义一个 Student类,要求在程序中生成若干个 Student对象,并将这些对象分别保存到
ArrayList和 HashSet中,然后遍历的输出出来。
2,写一个类,实现栈这种数据结构,要求底层数据使用 ArrayList存储。
CONFIDENTIAL
Module 9,Exceptions
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
153www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目标
定义一个异常
使用 try,catch,finally语句处理程序中的异常
Java异常类的继承关系
异常的处理海外师资、北美技术、外企经验达内外企 IT培训
154www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Basic Concepts of Exceptions
Exceptional conditions
Occurrences that alter the normal program flow
When an exceptional event occurs,an exception is
said to be thrown
The code that is responsible for doing something
about the error is called an exception handler
The exception handler catches the exception
海外师资、北美技术、外企经验达内外企 IT培训
155www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
try and catch statement
1,try {
2,// This is the first line of the,guarded region”
3,// that is governed by the try keyword.
4,// Put code here that might cause some kind of exception.
5,// We may have many code lines here or just one.
6,}
7,catch(MyFirstError) {
8,// Put code here that handles this error.
9,// This is the next line of the exception handler.
10,// This is the last line of the exception handler.
11,}
12,catch(MySecondError) {
13,// Put code here that handles this error.
14,}
15,
16,// Some other unguarded code begins here
海外师资、北美技术、外企经验达内外企 IT培训
156www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
finally statement
1,try {
2,// This is the first line of the,guarded region”.
3,}
4,catch(MyFirstError) {
5,// Put code here that handles this error.
6,}
7,catch(MySecondError) {
8,// Put code here that handles this error.
9,}
10,finally {
11,// Put code here to release any resource we
12,// allocated in the try clause.
13,}
14:
15,// More code here
海外师资、北美技术、外企经验达内外企 IT培训
157www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Exceptions call stack
Exception propagation
An exception will cause your application to stop
if it is never caught
Frequently used Exception API
– getCause()
– getMessage()
– printStackTrace()
海外师资、北美技术、外企经验达内外企 IT培训
158www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
异常类的继承关系
Classes derive from Error represent
unusual situations
Applications won?t be able to recover
from an error
All Java?s exception types derive
from Exception
RuntimeException,also called
unchecked exception
A unchecked exception does not
have to be caught
Other exceptions,also called
checked exceptions,must be treated
Object
Throwable
Error Exception
RuntimeException
海外师资、北美技术、外企经验达内外企 IT培训
159www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
常见的未检查异常
java.lang.ArithmeticException
java.lang.NullPointerException
java.lang.ArrayIndexoutofBoundsException
java.lang.SecurityException
Java.lang.NegativeArraySizeException
海外师资、北美技术、外企经验达内外企 IT培训
160www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
异常的处理
Handling,
try-catch-finally
Using throws
statement to
declare that the
code will cause
exceptions
public class JBeesLocalFile extends java.lang.Object {
private RandomAccessFile localFile;
/** Creates new JBeesLocalFile */public JBeesLocalFile(String localFileName)
throws IOException {File f = new File(localFileName);
if(f.getParent() != null){
File dir = new File(f.getParent());if(!dir.exists())
dir.mkdirs();}
localFile = new RandomAccessFile(localFileName,"rw");
}
synchronized public void writeBytes(byte[] in,long offset)throws IOException {
localFile.seek(offset);
localFile.write(in);}
public void close() throws IOException{
localFile.close();
}}
海外师资、北美技术、外企经验达内外企 IT培训
161www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
定义自己的异常类
Deriving from Exception
public class MalformedB64EncodeException extends java.lang.Exception {
/**
* Creates new <code>MalformedB64EncodeException</code> without detail message.
*/
public MalformedB64EncodeException() {
this("Error encoded string");
}
/**
* Constructs an <code>MalformedB64EncodeException</code> with the
specified detail message.
* @param msg the detail message.
*/
public MalformedB64EncodeException(String msg) {
super(msg);
}
}
海外师资、北美技术、外企经验达内外企 IT培训
162www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
抛出异常
public class JBeesBase64 extends Object {
private final byte[] enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
0123456789+/".getBytes();private final byte pad = (byte)'=';
…
public byte[] decode(byte[] in) throws MalformedB64EncodeException {
if(in == null) return null;
int len = in.length;
int loop = len / 4;
int remainder = len % 4;
if(remainder != 0) throw new MalformedB64EncodeException();
byte[] out;
if(in[len - 2] == pad) out = new byte[loop * 3 - 2];
else if(in[len - 1] == pad) out = new byte[loop * 3 -1];
else out = new byte[loop * 3];
for(int i = 0; i < loop; i++) {
byte index0 = getIndex(in[i * 4 ]);
byte index1 = getIndex(in[i * 4 + 1]);
if(index0 == - 1 || index1 == -1) throw new MalformedB64EncodeException();
out[i * 3 ] = (byte)((index0 << 2) | (index1 >> 4));
if(in[i * 4 + 2] == pad) break;
else{ index0 = getIndex(in[i * 4 + 2]);
if(index0 == -1) throw new MalformedB64EncodeException();
out[i * 3 + 1] = (byte)((index1 << 4) | ( index0 >> 2));
}
if(in[i * 4 + 3] == pad) break;
else { index1 = getIndex(in[i * 4 + 3]);if(index1 == -1) throw new MalformedB64EncodeException();
out[i * 3 + 2] = (byte)((index0 << 6) | index1); }
}
return out;
}
}
海外师资、北美技术、外企经验达内外企 IT培训
163www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章中,我们讨论了以下问题,
怎样定义异常
如何使用 try,catch,finally,throw,throws 等语法。
异常类的继承结构
异常的处理
CONFIDENTIAL
Module 10,Building GUIs
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
165www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
javax.swing.* 的常用组件
容器,组件和布局管理器
使用布局管理器
BorderLayout,FlowLayout,GridLayout,etc.
向容器中添加组件
使用多层嵌套的布局管理
了解常用组件的事件侦听器,并写出事件处理代码海外师资、北美技术、外企经验达内外企 IT培训
166www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
图形开发常用的包
java.awt
javax.swing
java.awt.event
海外师资、北美技术、外企经验达内外企 IT培训
167www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Java图形开发的基本步骤
Step 1,选择容器
Step 2,为容器设置布局管理器
Step 3,添加图形组件
Step 4,设置事件处理常用容器:
javax.swing.JFrame
javax.swing.JDialog
javax.swing.JPane
javax.swing.JScrollPane
常用布局管理器:
java.awt.BorderLayout
java.awt.FlowLayout
java.awt.GridLayout
常用图形组件:
javax.swing.JButton
javax.swing.JLabel
javax.swing.JTextField
javax.swing.JTextArea
javax.swing.JPasswordField
javax.swing.JComboBox
javax.swing.JMenuBar
javax.swing.JMenu
javax.swing.JMenuItem
海外师资、北美技术、外企经验达内外企 IT培训
168www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Step 1:选择容器
组件可以添加到容器中
经常使用的容器有,JFrame,JDialog,JPanel,JScrollPane
容器类可以被继承海外师资、北美技术、外企经验达内外企 IT培训
169www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JFrame
javax.swing包的容器
是一个顶层容器
有边框,标题栏和菜单条
默认布局管理器是 BorderLayout
海外师资、北美技术、外企经验达内外企 IT培训
170www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
JPanel
一般加在其他容器中
常用来在一个容器中对图形组件分组
默认的布局管理器是 FlowLayout
海外师资、北美技术、外企经验达内外企 IT培训
171www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
容器类的常用方法
add()
add(Component com)
add(Component,int index)
setLayout() and getLayout()
getComponent()
getInsets()
remove and removeAll()
validate()
海外师资、北美技术、外企经验达内外企 IT培训
172www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
使用容器类提供的 setLayout()方法为容器设置布局管理器
布局管理器用来限定组件在容器中的大小和位置
setLocation(),setSize()以及 setBounds() 方法来定义 组件的大小和位置
JFrame和 JDialog的默认布局管理器是 BorderLayout
JPanel的默认布局管理器是 FlowLayout
Step 2:选择布局管理器海外师资、北美技术、外企经验达内外企 IT培训
173www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Layout Manager
-?Flow Layout
Border Layout
Grid Layout
Card Layout
GridBag Layout
海外师资、北美技术、外企经验达内外企 IT培训
174www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BorderLayout
将容器分成 5个区域,
BorderLayout.CENTER,BorderLayout.EAST,
BorderLayout.WEST,BorderLayout.SOUTH,
BorderLayout.NORTH
是顶层容器 (JFrame,JDialog,和 JApplet )的默认布局管理器。
Constructors:
BorderLayout() BorderLayout(int hgap,int vgap)
海外师资、北美技术、外企经验达内外企 IT培训
175www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
FlowLayout
组件按照加入的先后循序从左向右排列,自动换行。
遵循组件的首选尺寸
FlowLayout的构造器
FlowLayout()
FlowLayout(int align)
FlowLayout(int align,int hgap,int vgap)
int align,FlowLayout.LEFT,FlowLayout.RIGHT,
FlowLayout.CENTER,FlowLayout.LEADING,
FlowLayout.TRAILING
海外师资、北美技术、外企经验达内外企 IT培训
176www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
GridLayout
基本布局策略是把容器的空间划分成若干行若干列的网格区域,组件就位于这些划分出来的小区域中。
所有的区域大小一样。
组件按从左到右,从上到下的方法加入。
忽略组件的首选尺寸
Constructors:
GridLayout()
GridLayout(int rows,int cols)
GridLayout(int rows,int cols,int hgap,int vgap)
海外师资、北美技术、外企经验达内外企 IT培训
177www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
组合的布局管理
JPanel
GridLayout
JPanel
FlowLayout
JFrame
BorderLayout
海外师资、北美技术、外企经验达内外企 IT培训
178www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
A Combined Layout Sample
Caculator.java
package sample.sample;
import java.awt.*;
import java.awt.event.*;
public class Caculator implements ActionListener {
private Frame f;
public Calculator() {
initComponent();
}
private void initComponent() {
f = new Frame("My Calculator V1.0");
f.setLayout(new BorderLayout()); //The frame uses BorderLayout
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
海外师资、北美技术、外企经验达内外企 IT培训
179www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Panel centerPanel = new Panel();
centerPanel.setLayout(new GridLayout(5,3));
//The panel uses GridLayout
String labels = "12+34-56*78/90=";
for(int i = 0; i < labels.length(); i++) {
Button btn = new Button(labels.substring(i,i+1));
btn.addActionListener(this);
centerPanel.add(btn);
}
f.add(centerPanel,BorderLayout.CENTER);
Panel northPanel = new Panel();
TextField tf = new TextField(30);
northPanel.add(tf);
f.add(northPanel,BorderLayout.NORTH);
}
A Combined Layout Sample
Caculator.java(cont.)
海外师资、北美技术、外企经验达内外企 IT培训
180www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
public void go() {
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new Calculator().go();
}
public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
}
}
A Combined Layout Sample
Caculator.java(cont.)
海外师资、北美技术、外企经验达内外企 IT培训
181www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
生成图形组件
Button btn = new Button(“Add”);
Label lbl = new Label(“Name”);
…
使用 add()方法向容器中添加组件
jf.add(btn);
jf.add(lbl);
Step 3:向容器中添加组件海外师资、北美技术、外企经验达内外企 IT培训
182www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Using component methods addXXXListener()
btn.addActionListener(…)
Step 4:设置事件处理代码海外师资、北美技术、外企经验达内外企 IT培训
183www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章中,我们讨论了以下问题,
海外师资、北美技术、外企经验达内外企 IT培训
184www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Review Questions
1.(Level 1)What are the four steps for building GUI?
2.(Level 1)What are the five common layout managers?
3.(Level 1)What is the difference between frame and panel?
4.(Level 2)What is the default layout manager for frame and
panel respectively?
海外师资、北美技术、外企经验达内外企 IT培训
185www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Assignment
1,(Level 1)Write a class called AWTFrame,The frame uses
border layout and contains a status label and a panel
which,in turn,contains two buttons,The panel use
flow
layout.
2.(Level 2)Write a class called AWTCombinatinFrame,The
frame uses border layout and contains a status label and a
panel which,in turn,uses grid layout and contains twelve
buttons(number 1-9 and *,0 and #)
CONFIDENTIAL
Module 11,I/O 流和文件
(选学)
北京达内:
电 话,010-62196102,62136369
地 址:海淀区北三环西路 18号中鼎大厦 B座 701,709室邮编,100086
Email,beijing@tarena.com
上海达内:
电话,021-61202630,61202603
地 址,上海市北京东路 668号
(上海科技京城 )C
区 9楼邮编,200001
Email,shanghai@tarena.com
广州达内:
电 话,(020)85518868 85518898
地 址,广州天河区岗顶侨鑫教育主楼三层加拿大多伦多:
Tel,1-(647) 284-8872
Address,106-7 Crescent
Place Toronto,
Ontario,Canada
Post Code,M4C 5L7
海外师资、北美技术、外企经验达内外企 IT培训
187www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
目 标
操作文件系统
java.io 包的结构
使用字符流和字节流来访问文件
对字符流和字节流做包装
对象序列化存储海外师资、北美技术、外企经验达内外企 IT培训
188www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
File 类的介绍
一个 File 对象既可以用来描述一个文件,也可以用来描述一层目录。
File 类常用的构造方法:
File(File parent,String child)
File(String pathname)
File(String parent,String child)
File(URI uri)
可以使用 File.separator来得到机器文件系统下的目录分隔符海外师资、北美技术、外企经验达内外企 IT培训
189www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
File 类的方法
boolean createNewFile()
boolean delete()
boolean mkdir()/mkdirs()
boolean renameTo(File destination)
boolean canRead()/canWrite()
boolean exists()
String[] list()
long lastModified()
String getPath()/getAbsolutePath()
String getParent()/getName()
海外师资、北美技术、外企经验达内外企 IT培训
190www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
MyDir.java
import java.io.*;
public class MyDir{
public static void main(String argv[]){
File f;
int numDirs=0,numfiles=0;
if(argv.length!=1&&argv.length!=0){
System.out.println(" Wrong Number of Parameters !");
System.exit(0);
}
if(argv.length==1) f = new File(argv[0]);
else f= new File(".");
File files[] = f.listFiles();
System.out.println(f.getPath()+"包含的目录和文件,");
海外师资、北美技术、外企经验达内外企 IT培训
191www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
MyDir.java(cont.)
for (int i=0; i<files.length; i++){
if (files[i].isDirectory()){
System.out.print("<Dir>\t");
numDirs++;
}
else{
System.out.print("\t"+files[i].length());
System.out.println("\t"+ new Date(files[i].lastModified()));
numfiles++;
}
System.out.println("\t"+files[i].getName());
}
System.out.println(numfiles+"个文件 ");
System.out.println(numDirs+"个目录 ");
}
}
海外师资、北美技术、外企经验达内外企 IT培训
192www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
流的概念
流是一个数据序列
按不同的方式可以将流划分为以下几类:
输入流和输出流字节流和字符流节点流和过滤流
FilterInputStreamNode InputStream(for example,from disk file)
“Flow” of
bytes down
stream
read()
海外师资、北美技术、外企经验达内外企 IT培训
193www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStream (字节输入流)
读数据的三个 read()方法
int read()
int read(byte[])
int read(byte[],int,int)
其他常用方法
void close()
int available()
skip(long)
boolean markSupported()
void mark(int)
void reset(int)
海外师资、北美技术、外企经验达内外企 IT培训
194www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
OutputStream (字节输出流)
三个写数据的方法
int write(int)
int write(byte[])
int write(byte[],int,int)
其他常用方法
void close()
void flush()
海外师资、北美技术、外企经验达内外企 IT培训
195www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStream和 OutputStream的继承结构海外师资、北美技术、外企经验达内外企 IT培训
196www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
FileInputStream and
FileOutputStream
The file must exist and can be read when you create a FileInputStream
FileInputStream(File file)
FileInputStream(String name)
A new file will be created or existed file will be overridden
when you create a FileOutputStream
FileOutputStream(File file)
FileOutputStream(File file,boolean append)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
FileInputStream infile =
new FileInputStream("myfile.dat");
FileOutputStream outfile =
new FileOutputStream("results.dat");
海外师资、北美技术、外企经验达内外企 IT培训
197www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BufferedInputStream and
BufferedOutputStream
Buffering an input/output stream to enhance
performance
Constructors of the class BufferedInputStream
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in,int size)
Constructors of the class BufferedOutputStream
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
海外师资、北美技术、外企经验达内外企 IT培训
198www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
DataInputStreamand
DataOutputStream
Enabling applications to read/write Java
primitive type data
Constructors
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
Methods
readBoolean()/writeBoolean
readByte()/writeByte()
readChar()/writeChar()
….
海外师资、北美技术、外企经验达内外企 IT培训
199www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Reader 和 Writer(字符输入 /输出流)
海外师资、北美技术、外企经验达内外企 IT培训
200www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
InputStreamReader and
OutputStreamWriter
An InputStreamReader is a bridge from byte stream
to character stream
An OutputStreamWriter is a bridge from character
stream to byte Stream
Constructors
InputStreamReader(InputStream in,String
charsetName)
OutputStreamWriter(OutputStream out,String
charsetName)
海外师资、北美技术、外企经验达内外企 IT培训
201www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
BufferedReader and
BufferedWriter
Buffering characters so as to provide for the
efficient reading/writing characters,chars,and lines
Constructors
BufferedReader(Reader in)
BufferedReader(Reader in,int size)
BufferedWriter(Writer out)
BufferedWriter(Writer out,int size)
Methods
readLine()
海外师资、北美技术、外企经验达内外企 IT培训
202www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Convenience for reading/writing character files
Constructors
FileReader(File file)
FileReader(String name)
FileWriter(File file)
FileWriter(String filename)
FileReader and FileWriter
海外师资、北美技术、外企经验达内外企 IT培训
203www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
包装流海外师资、北美技术、外企经验达内外企 IT培训
204www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
标准输入输出和出错流
System,out,an object of PrintStream
System,in,an object of InputStream
System,err,an object of PrintStream
海外师资、北美技术、外企经验达内外企 IT培训
205www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Implementing both DataInput and DataOutput
Providing capability for reading as well as writing
to a file when it is opened
Providing capability for reading or writing
to a specified point within the file by
using a file pointer
Constructors
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
Methods
read()/write() seek(long pointer)
RandomAccessFile
海外师资、北美技术、外企经验达内外企 IT培训
206www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Objects persistence
Only the data of an object is serialized
Transient data can not be Serialized
Objects must implement java.io.Serializable
Serilization
海外师资、北美技术、外企经验达内外企 IT培训
207www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
ObjectInputStream and
ObjectOutputStream
ObjectOutputStream and ObjectInputStream can
provide an application with persistent storage for
graphs of objects
An ObjectInputStream deserializes primitive data
and objects previously written using an
ObjectOutputStream
Constructors
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
Methods
readObject()/writeObject()
海外师资、北美技术、外企经验达内外企 IT培训
208www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
总 结在这一章,我们讨论了以下问题,
使用 File类来操作文件系统
java.io包的继承结构
使用字节流和字符流做输入输出
对六对象做包装
对象序列化的概念海外师资、北美技术、外企经验达内外企 IT培训
209www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
Question & Answer
海外师资、北美技术、外企经验达内外企 IT培训
210www.Tarena.com.cn 010-62136369 ; 021-61202630; 020-85518868
大量 IT认证培训视频资料免费下载! (包括达内,Java尚学堂
,北京树人,赛迪网校,传智播客,新东方网校等 )!
网址 http://www.ibeifeng.com/?u=15670