??xml version="1.0" encoding="utf-8" standalone="yes"?>
1. 如何讄Java开发环?Win2000)
{:Start-Control panel-System-Advance-Environment Variables
讄环境变量Q?br /> PATH = %PATH%;c:\j2sdk1.4.2_05\bin;
CLASSPATH = .;
注:javac~辑器L在当前查找文Ӟ而java解释器只有在c\径中包含??目录的情况下才会查找当前目录。如果类路径没有讄Qƈ不会产生什么问?-黙认c\径中包含?”目录。但Q如果设|了c\径,却没有包含?”话Q就会生问?-E序~译时不会出错,但却无法q行?/p>
2. 什么是Java?
{:1) ~程语言(先编译再解释)Q?br /> 2) 开发环境;
3) q行环境Q?br /> 4) 部v环境Q?/p>
3. Java的特?br />{:1) ?Java语法是C++语法的一个“纯净”版?Q?br /> 2) 可移植?br /> 3) 面向对象
4) 分布?Java把打开套接字连接等J琐的网lQ务变得非常容?
5) 健壮?Java~译器会查出很多其他语言在运行时L昄出来的错误;Java采用的指针模型可以消除重写内存和数据崩溃的可?
7) 多线E?多线E编E的单性是Java成ؓ行的服务器端开发语a的主要原因之一)
8) 安全(用Java可以构徏防病毒和防篡改的pȝ)
9) 动?Java可随意增加新的方法以及实例变量,而客L却不需做Q何的更改)
10)体系l构中立(字节码与计算Zpȝ构无养I只要存在q行时系l,可在多种处理器上执行)
4. Java中基本概?br />{:1) 源文?br /> 在最层只包括一个publiccd的类/接口Q文件名与类/接口名同q以.java作ؓ文g后缀?br /> 2) ?package ,在源文g中this idertify只能攑֜W一行,且最多只能是一?
一个将cd接口l织在一块的实体Q在文gpȝ中以目录/文g夹型式呈现?/p>
事实上今天所学知识远比上面列出的要多Q更多的知识炚w过l习提前和我们见面了Q像如何自行创徏cR创建类的属性和Ҏ、控制打印输出的格式(通过消息对话框输出结?、以及局部变量、实例变量、全局变量(cd量、静态变?间的区别。以上知识点在以后的学习中会逐渐接触刎ͼ是故不详l介l。另外,今天的学习内Ҏ自己以前׃几倍的旉才摸索清楚的。有人手把手引着Q真好!
教Java的老师有二位,一位传授知识、一位辅导练习。授评薛老师讲课不温不火、胸有成竏V看CQ仿佛看到Java的高度。辅导的薛老师有问必答、拉q了我们与Java的距R?/p>
2004-8-13 星期五 ??/p>
1. 注释的三UŞ?br />{: // 单行注释
/* 一或多行注?*/
/** 文注释 */
2. Java代码中的“;”、“{}”、??br />{:Java语句以分号分隔;
Java代码块包含在大括号内Q?br /> 忽略I格?/p>
3. 标识W?br />{:1) 用以命名cR方法和变量、以及包Q?br /> 2) 以字W、“_”或?”开_
3) 无长度限制?/p>
4. 数据cd
{:1) 整型
byte 8位 ?-128?27
short 16位 ?-2^15?^15-1
int 32位 ?-2^31?^31-1
long 64位 ?-2^63?^63-1
2) 点cd
float 32位 ?
double 64?br /> 3) 字符cd
char 16?br /> 4) 布尔?br /> boolean false/true
注:1) char是无W号?6位整?字面值必ȝ单引hhQ?br /> 2) String 是类Q非原始数据cdQ?br /> 3) 长整型数字有一个后~为“L”或“l”,八进制前~为?”,十六q制前缀为?x”;
4) 黙认点cd为doubleQ?br /> 5) float数据cd有一个后~为“f”或“F?Double数据cd后可跟后~“D”或“d?
5. identifiers Naming Rules
{:1) c?接口名首字母大写Q?br /> 2) Ҏ、变量名W一个字母小写,其余首字母大写;
3) 帔R名称全部大写Q?br /> 4) 包名全部写?/p>
6. 理解对象
{:在OOP中,E序由对象组成,q些对象h某种属性以及对象可执行的某些操?Ҏ)。OOP高效的关键在于它让每个对象负责执行一l相关的d?/p>
2004-8-16 星期一 ?/p>
表达式和控制程
1. 变量和作用域
{:1) 局部变?br /> 定义在方法内部,其作用域ҎQ也UCؓ临时变量、栈变量?br /> 2) 实例变量
定义在类内部Q其作用域ؓ整个cR如未定义初|pȝ会自动ؓ其赋黙认倹{?/p>
cd 黙认?br /> byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
All reference types null
2. 操作W?br />{:1) >> 前面是零补零Q前面是一补一;
2) >>> 无符号右U?
3) && 短\与,前面为假Q表辑ּ为假Q后面不计;
4) || 短\或,前面为真Q表辑ּ为真Q后面不计算Q?/p>
3. 数字cd之间的{?br />{:1) byte ——→ short ——→ int ——→ long
2) char ——→ int - - - ?float
3) float ——→ double
4) long - - - ?float+++++++++++++++
5) long - - - ?double
6) int ——→ double
注:1)实箭头表C无信息损失的{换,虚箭头表C{换可能引h失;
2)int和float同ؓ32位,但float要有几位表示q的位数Q在_ֺ位数上要比int要小Q所以有可能会有损失。long转ؓdouble同理Q?br /> 3)char和short同ؓ16位,但char属无W号敎ͼ其范围ؓ0~2^16, short的范围ؓ-2^15~2^15-1 , 所以char和short不能怺转换Q?br /> 4)byte、short、char属child型,在计时会自动{为int型,然后转ؓ更大范围cd(long、short、double)?/p>
4. 强制cd转换
{:1) 语法Q圆括号中给转换的目标类型,随后是待转换的变量名。例Qdoublc x=9.997;int nx = (int)x;
2) 如果试图强制转换的类型超Z目标cd的范_l果是一个被截取的不同的数?
3) 不能在布值和M数字cd间强制类型{换,如确要{换,可用条件表辑ּQ例Qb?1:0?/p>
5. 自动转换的三U类?br />{:1) 赋值 ?double d=1.23f;
2) Ҏ调用 Math.sqrt(2);
3) 数D{?-9.232e20+1;
6. 强制转换(cast)的二U类?br />{:1) 赋?br /> 2) Ҏ调用
7. switch与case
{:1) switch变量可以是byte、short、char、int;
2) default值可以位于switch代码剙、中部或底部;
3) break不是必须的。例如:case 1:case 2:case 3:
2004-8-17 星期二 ??/p>
数组
1. 声明数组
{:1) 一l相同类?可以是类)数据的集?
2) 一个数l是一个对?
3) 声明一个数l没有创Z个对?
4) 数组能以下列形式声明Q?br /> int[] i ?int i[]
Car[] c ?Car c[]
2. 创徏数组
{:1) 创徏原始数组 int[] i = new int[2];
2) 创徏cȝ型数l?Car[] c = new Car[100];
3) 数组创徏后有初始倹{?/p>
3. 初始化数l?br />{:1) 初始化、创建、和声明分开
int[] i;
i = new int[2];
i[0] = 0;
i[1] = 1;
2) 初始化、创建、和声明在同一旉
int[] i = {0,1};
Car[] c = {new Car(),new Car()};
4. 多维数组
{:1) 有效
int[][] i1 = new int[2][3];
int[][] i2 = new int[2][];
i2[0] = new int[2],i2[1] = new int[3];
2) 无效
int[][] i1 = new int[][3];
3) 数组长度
int[] i = new int[5];
int len = i.length;//len = 5;
Student[][] st = new Student[4][6];
len = st.length;//len = 4;
len = st[0].length;//len = 6;
请问以下哪段代码哪个可正执行?(a,c)
1. a char[] i = {'a','b'}; i = new char[]{'b','c'};
b char[] i = {'a','b'}; i = {'b','c'};
c char[] i = new char[2]; i = new char[]{'b','c'};
d char[] i = new char[2]; i = {'b','c'};
2004-8-18 星期三 ??/p>
今天讲完数组Q类的概念开了一个头。封装、ѝ多态,p三个概念展开、D例、D猫、狗、哺乛_特的例子。Dl猫、狗增加一只眼睛只要改变一下父cM子。三只眼睛的狗?我们哈哈大笑Q只是,今天的日记怎么写?都是一些概忉|的东西?/p>
接口(interface)是ؓ了解军_重承,l承产生多?cR方?。封装可以最大限度地代码重用。类是一U抽象、包含有属性以及改变属性的Ҏ。对象是cȝ实例Q除了这些还有什么?数组是对象吗Q?/p>
不能定Q那查API、问同学、请教老师。还不行Q那老师l你开灶吧!教室后头架着DVQ用影像真实地记录着我们的学习生z,谁也不许掉队?/p>
大多数知识在译֠上解决了Q晚上的旉Q看书、预习,能看多远看多q。自已看Q雾里看花;而老师教,一片瞪明。一路通透下去,只是依然担心Q十八天能否Core Java讲完?/p>
2004-8-19 星期四 ??/p>
对象和类(?
1. 装、多态、和l承
{:1) 装
a. 把数据和行ؓl合在一个包中,q对对象的用者隐藏数据的实现q程。对象中的数据称为对象的实例字段(instance field), 操作数据的函数和q程UCؓ对象的方?method)。一个特定对象就是类在实例字D上有着特定值的某个实例?br /> b. 实现装的关键在于绝不让Ҏ直接讉K其他cȝ实例字段?/p>
2) l承
a. 在现有类的基上构建新的类。当l承一个现有类Ӟ重?l承)了那个类的方法和字段Q同Ӟq可以向新类中增L的方法和字段?br /> b. 在通过扩展类来定义子cLQ只需要说明子cd类的区别就行。所以在设计cLQ把最通用的方法放在超cMQ把更专门的Ҏ攑֜子类中?/p>
3) 多?polymorphism)
一个对象变量可以指向多U实际类型的现象?/p>
2. cd对象
{:1) c:数据cd/元数据的抽象;
2) 对象Q类的实?instance of)?/p>
3. Ҏ定义
{:1) 格式 <modifiers><return_type><name>([argument_list>])[throws <exception>]{<block>}
例如Qpublic String getName(){ return name; }
2) 当没有返回值时Q返回类型必被定义为voidQ?br /> 3) 构造方法没有返回类型?/p>
4. 参数传?br />{:Java语言L使用传D用。这意味着Ҏ得到的只是所有参数值的拯。因此,Ҏ不能修改传递给它的M参数变量的内宏V?/p>
5. this
{:1) this是个隐式参数Q代表被构造的对象;
2) 如果构造器的第一个语句具有Ş式this(...)Q那么这个构造器调用同一cM的其他构造器?/p>
6. 装的特?br />{:1) 使具体实C可视;
2) Ҏ有的用户l一接口;
3) 增强可维护性?/p>
7. Ҏ重蝲
{:1) Ҏ名相?
2) 参数必须不同;
3) q回cd可以不同;
2004-8-20 星期五 ??/p>
对象和类(?
8. 创徏和初始化对象
{:1) Z个对象分配内存空_q初始化q个对象的gؓQ?/null/false?br /> 2) 调用构造方法?/p>
9. 构造器
{:1) 构造器和类h相同的名?
2) 一个类可以有多个构造器;
3) 构造器可以?个?个或者多个参?
4) 构造器没有q回?
5) 构造器只能和newq算W一赯调用?
10. 构造器重蝲
{:1) 黙认构造器指没有参数构造器Q它把所有实例字D设为默认?
2) 如果~写的类没有构造器Q系l会自动提供黙认构造器Q那么构造没有构造参数的对象是非法的?/p>
11. 子类
{:1) 是一U关p?现有cȝc?super class)、基c?base class)、或是父c?parent class); 而新cȝ为子c?subclass child class)或者是zc?derived class));
2) 一U声明类型,public class Student extends Person{...};
3) 单ѝ?/p>
12. l承
{:1) 构造器不能被初始化;
2) Ҏ和字D可以被初始?
3) 子类构造器自动调用父类的黙认构造器Q?br /> 4) 当父c黙认构造器不存在时Q子cL造器要显式调用超cȝ其它构造器?/p>
13. Super
{:1) 调用类Ҏ;
2) 调用类构造器?/p>
14. l承(Polymorphism)
{:1) 一个对象变量可以指向多U实际类型的现象;
2) 它是一个运行时x?/p>
15. instanceof操作W?br />{:1) Booleancd;
2) 判断某个实例是否属于指定c?接口
16. casting
{:1) 把一U类型强制{换成另一U类型的q程被称为类型{?casting);
2) q行转换的惟一原因在于有时在暂时忽视对象实际类型之后,需要用实际对象的全部功能;
3) 要养成在cd转换之前先判断它是否能成功的~程习惯(使用instanceof);
4) 应尽量少用类型{换和instanceof操作W?/p>
17. Ҏ重写(overridden)
{:1) 名称、参数列表和q回cd相同;
2) modifier不能来窄;
3) 异常抛出不能变宽;
2004-8-23 星期一 ?/p>
高语言Ҏ??
1. 静态字D和Ҏ
{:1) 静态字D:每个cM只存在一个这L字段Q反之,cȝ每一对象都有自己一份对q个实例字段的拷?
2) 静态方法:能不通过对象直接讉K; 不能讉K非静态变? 不能被非静态方法重?
2. 初始化块
{:1) 只被执行一?
2) 初始化块首先被运行,然后才是构造器的主体部分被执行?/p>
3. 调用构造器后详l的执行q程
{:1) 初始化所有数据字Dؓ默认?0?.0、false或null);
2) 按照在类声明中出现的ơ序依次执行所有字D初始化语句和初始化?
3) 如果构造器的第一行代码调用了另一个构造器Q则执行被调用的构造器M;
4) 执行构造器M?/p>
4. final关键?br />{:1) finalcM能被l承;
2) finalҎ不能被改?
3) final变量不能被改?
5. 抽象c?br />{:1) Ҏ没有Ҏ体,必须被声明ؓ抽象Ҏ; 例:abstract int getAge();
2) 一个类中包含有抽象Ҏ必须声明为抽象类;
3) 抽象cM能实例化Q但仍可以创建类的对象变?
4) 能声明方法或cȝ型ؓ抽象;
注:1) 抽象Ҏ如同Ҏ占位W,q些Ҏ一定要在子cM实现;
2) 即不含抽象ҎQ类也可被声明ؓ抽象cR?/p>
6. 接口
{:1) 接口是抽象类的另外一UŞ?没有实例变量的抽象类);
2) 在一个接口中所有方法都是抽象方?
3) 接口中所有变量都必须被定义ؓfinal staticQ?br /> 4) 接口可以l承多个接口?/p>
注:1) 接口中的Ҏ自动被置为public, 因此Q在接口中声明方法ƈ不需要提供public关键字。但在实现接口时Q必LҎ声明为public?br />
2004-8-24 星期二 ??/p>
高语言Ҏ??
7. 讉K控制
{:修饰W ?内部c ?相同包 ?子类 其它
public √ ?√ ?√ ??br /> protected √ ?√ ?√ ?
default √ ??br /> private √ ?
8. ?=”操作符和equals()Ҏ
{:1) ?=”操作符定两个引用是否指向相同对象;
2) equals()Ҏ判断两个对象是否指向同一块内存区?q种试q没有太大用处,如果x试对象是否相{,需要覆盖equalsҎQ进行更有意义的比较);
9. toString()Ҏ
{:1) 和equals()Ҏ一PtoString()是Objectcd外一个重要的Ҏ;
2) 它返回一个代表该对象值的字符丌Ӏ几乎每个类都会覆盖该方法,以便打印该对象当前状态的表示?br /> 3) 无论何时对象同字W串相连接,那么可以?+"操作W,q时Java~译器会自动调用toStringҎ获得对象的字W串表示。例Q?br /> Point p = new Point(10,20);
String message = "The current position is " + p;//自动调用p.toString()
10. 内部c?br />{:内部cL定义在其他类内部的类Q?br /> 1) 内部cd象能够访问创建它的对象的实现-包括那些U有数据;
2) 内部c能够隐藏v来,不ؓ同一包中的其他类所?
3) 匿名内部cd以方便地定义q行时回?
4) 所有内部类在编写事件程序时用v来很方便?/p>
11. 静态内部类
{:1) 内部cȝ最单Ş?
2) 不能和外部类同名;
3) 被编译成一个独立的cL?
4) 只能讉K外部cȝ静态方法、静态实例变?包括U有cd);
12. 实例内部c?br />{:1) 定义在类内部Q没有用static修饰W?
2) 像实例变?
3) 能访问外部类的所有实例变?
4) 在一个外部类里创Z个实例内部类实例Qthis.new Innerclass();
5) 在一个外部类外创Z个实例内部类实例Q?new OuterClass()).new Innerclass();
6) 在一个内部类里访问一个实例内部类QOuterclass.this.member;
13. 局部内部类
{:1) 定义在方法里;
2) 最的一U内部类;
3) 和局部变量类? 不能被定义ؓpublicQprotectedQprivate和static;
4) 只能讉Kfinal型局部变量?/p>
2004-8-25 星期三 ??/p>
高语言Ҏ??
14. 匿名内部c?br />{:1) 没有cd;
2) 没有class关键?
3) 没有l承和声?
4) 没有构造函?
15. 装c?br />{:原始基本cd 包装c?br /> boolean Boolean
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
16. 集合接口cd?br />{:
Collection
?br /> |ˉˉˉˉˉˉ|
Set List Map
↑ ??br /> | |
SortedSet SortedMap
1) Set: 集合cM不允许有重复对象;
2) SortedSet: 和Set接口同,但元素按升序排列;
3) List: 元素加蝲和移出时按照有顺序,可以保存重复对象?br /> 4) Map: 存储了唯一关键字L识的对象Q不允许有重复关键字?br /> 5) SortedMap: 和MapcdQ但对象按他们关键字的升序排列?/p>
17. 包括具体cd内的集合cd?br />{:
Collection
?br /> |ˉˉˉˉˉˉ|
HashSet LinkedList Hashtable
(Set) Vector, ArrayList Hashmap
(List) (Map)
↑ ??br /> | |
TreeSet TreeMap
(SortedSet) (SortedMap)
18. 五个最常用的集合类之间的区别和联系
{:1) ArrayList: 元素单个Q非同步Q效率高Q多用于查询
2) Vector: 元素单个Q同步,U程安全Q多用于查询
3) LinkedList:元素单个Q多用于插入和删?br /> 4) HashMap: 元素成对Q非同步Q元素可为空
5) HashTable: 元素成对Q同步,元素不可为空
19. 反射
{:1) 定一个对象的c?
2) 获得一个类的修改符、变量、方法、构器函数、和父类的相cM?
3) 扑և哪些帔R和方法是从一个接口声明的;
4) 创徏一个在q行时才知道名称的类;
5) 调用对象的方?
2004-8-26 星期四 ??/p>
异常
1. 异常的基本概?br />{:1) 异常事g改变E序程;
2) 当一个异怺件发生时Q一个异常被抛出;
3) 响应处理异常的代码被UCؓexception handler;
4) exception handler捕获异常;
5) 异常处理能让你集中精力在一个地方解决问题,然后处理错误的代码分开来放在另一个地斏V?/p>
2. 捕获异常
{:1) 讄一个try/catch的代码块;
2) 如果try块内的Q何代码抛Z由catch子句指定的异常,?br /> a. E序跌try块中的其他代?
b. E序执行catch从句中的处理器代码?br /> 3) 如try块内没有抛出异常Q直接蟩qcatch从句内容?br /> 4) 如try块内抛出的异常没有在catch从句中指? 则该Ҏ会立即退出?/p>
3. 处理异常
{:1) 应捕捉ƈ处理那些已知如何处理的异常,而传递那些不知如何处理的异常;
2) 如想传递异常,必须在方法的定义中增加一个throws修饰W,以通知调用者可能会抛出一个异?
3) 对子cL法抛出的异常不能出类Ҏthrows指o的范围。如父类不抛ZQ何异常,在子cL法中必须捕捉每一个“已查异常”?/p>
4. 捕捉多个异常
{:1) 每个异常cd使用一个catch从句;
2) 如前面catch从句捕获异常Q将直接跌后面catch从句内容;
3) 按异常类型的子类->类的顺序排列catch从句的先后顺序?/p>
5. finally 声明
{:无论是否捕获异常Q都会执行finally从句中的代码;
6. 异常调用?br />{:1. 哪个Ҏ调用的代码发生异常,q回到哪个方?
2. mainҎ调用的代码发生异常,q回到虚拟机?/p>
7. 异常层次
{:1) h于Error的类代表不常用的环境(通常是硬件层?;
2) 应用E序不能够从Error中恢复正?
3) 所有的Java异常都v源于Exception;
4) RuntimeExcepiton也称为未查异?
5) 未检查异常无L?
6) 其它异常Q也UCؓ查异常,必须处理
Object
?br /> Throwable
?br /> |ˉˉˉˉˉˉˉˉ|
Error Exception
| ?br /> | |ˉˉˉˉˉˉˉ|
RuntimeException
8. 一些未查的异常
{:1) java.lang.ArithmeticException 如:?;
2) java.lang.NullPointerException 如:没初始化一个References便?
3) java.lang.ArrayIndexoutofBoundsException 如:调用一个有十个元素的Array的第十一个元素的内容;
4) java.lang.NumberFormatException 如:Integer.parseInt("a");
9. 写你自己的异?br />{:1) 要做的仅仅是从Exceptionl承或者是从Exception的一个子c衍生出自己需要的cd?
2) 习惯为每一个异常类提供一个默认的构造器以及一个包含详l信息的构造器?/p>
10. 抛出你自q异常
{:1) 在方法的定义中增加一个throws修饰W,以通知调用者可能会抛出一个异?
2) 在方法中构造一个该cȝ实例Q然后抛实例?/p>
三个Java笑?/p>
1. 作ؓ父亲的儿子,我是他的子类Q我l承他的全部属性和ҎQ但Z么父亲会开车,我不会?开车这个方法也许是finalcd?/p>
2. 你们M十家公司面试Q也许没有一家会问你内部c?累不?。虽然内部类很少用,但没人性的公司即应聘成功Q徏议也别去?/p>
3. 你今天早上出门的时候看了不该看的一q,以致于一天没有干zR看到这U异常,你们的项目经理过来问你是否技术上到了问?试图捕获异常)Q你摇摇?异常cd不对)Q然后你们的事务l理q来Q你告诉他你在早上看C自己最喜欢的Polo车竟然有最不喜Ƣ的l色。事务经理安C可将目标转ؓ宝马Qƈ允诺周末一起开他的宝马Lv上田园兜?捕获异常)Q你情A大ؓ好{q提动加?异常得到处理Q程序正常运?。不q的是,你们的事务经理刚好情l也不好Q他直接你的情况反映给ȝ?捕获异常Q没处理直接抛出)。更不幸的是Q也怽们公司的Zl理和项目经理刚好不在,q种情况被你们的头看刎ͼ他将你开?首先被Exception捕获Q粗略处?。你被开除后Q整个项目无法进行下去,最后公司被宣布解散。因为整个公司就你一个h?/p>
2004-8-27 星期五 ??/p>
创徏囑Ş用户界面
1. AWT
{:1) Abstract Window Toolkit(抽象囑Ş工具);
2) 提供一pd的对象去创徏囑Ş用户界面;
3) 在java.awt包里包括三种cd的类Q?br /> a lg: 可视化图形工L基本c,包括容器;
b 容器: 一U可以装载其他组件的Ҏlg;
c 布局理? 容器里用来定?布置)用户界面lg的一U接口?/p>
2. 创徏囑Ş用户界面步骤一Q选择容器
{:1) lg可被加入到容?
2) 通常使用以下容器: Frame, Dialog, Applet, Panel;
Component
?br /> Container
?br /> |ˉˉˉˉˉˉ|ˉˉˉˉˉˉ|
ScrollPane Window Panel
↑ ??br /> |ˉˉˉˉˉ| |
Frame Dialog Applet
?br /> FileDialog
3. 容器Ҏ
{:1) add(Component com) : 组件加入容?
2) setLayout(): 讄布局理?
3) pack(): 按照首选的寸和组件的布局构徏H体;
4) setTitle(): 讄H体标题;
4. 创徏囑Ş用户界面步骤二:选择布局理?br />{:1) 使用容器的setLayout()Ҏ讄容器理器;
2) lgҎsetLocation()、setSize()、setBounds()定义了组件的寸和位|?
3) Windowcd器黙认布局理器是BorderLayoutQ?br /> 4) Panelcd器黙认布局理器是BorderLayoutQ?/p>
5. 创徏囑Ş用户界面步骤三:增加lgq容?br />{:1) 创徏lg
TextField tf = new TextField();
...
2) 使用容器Ҏadd()组件增加进容器
add(tf);
6. 创徏囑Ş用户界面步骤四:创徏事务处理
{:使用lgҎQaddXXXListener()
7. Frames
{:1) h自Windowc?
2) 不能作ؓ一个部件放到其他部仉;
3) 有标题、连框和菜单工具?
4) 默认的布局理器是BorderLayout;
5) 使用setLayout()改变布局理?
6) 创徏一个frame标例: Frame frame = new Frame("The First GUI")?/p>
8. Panels
{:1) 通常被加入其它容?
2) 把一l相关的lg攑ֈ容器?
3) 默认的布局理器是FlowLayout;
9. FlowLayout布局理?br />{:1) 重每个lg自n的大?
2) 构造方法:
FlowLayout()
FlowLayout(int align)
FlowLayout(int align, int hgap, int vgap)
int align: FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING, FlowLayout.TRAILING
10. BorderLayout布局理?br />{:1) 分ؓ五个区域Q?br /> BorderLayout.CENTER, BorderLayout.EAST,
BorderLayout.WEST, BorderLayout.SOUTH,
BorderLayout.NORTH
2) 南北区域保持lg高度Q?但宽度因容器宽度改变;
3) 东西区域保持lg宽度Q?但高度因容器宽度改变;
4) 中部区域Q高宽均改变;
5) 构造方?br /> BorderLayout(), BorderLayout(int hgap, int vgap)
11. GridLayout布局理?br />{:1) 在容器里以网格Ş状排列组?
2) 每个|格均是相等寸;
3) 忽略每个lg的原始尺?
4) 构造方?
GridLayout()
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hgap, int vgap)
12. CardLayout布局理?br />{:1) 每一个组件处理成一张牌Q在M时候只有一张牌可视;
2) 不尊重组件的原始寸;
3) 构造方法:
CardLayout()
CardLayout(int hgap, int vgap)
4) CardLayout中方?br /> void first(Container c)
void last(Container c)
void next(Container c)
void show(Container c, String name)
13. GridBagLayout 布局
{:1) 在网格里攄lg;
2) 一个组件可占多行或?
3) 当组件被加入容器旉过GridBagConstraints对象定lg占多少个表?
4) 构造方法:GridBagLayout();
5) 重要ҎQsetConstraints(Component c, GridBagConstraints gcs)
14. GridBagConstraintsc?br />{:构造方?br /> GridBagConstraints()
GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
2004-8-30 星期一 ?/p>
AWTlg?/p>
1. lg公有Ҏ
{:1) setForeground(): 讄前景颜色; setBackground(): 讄背景颜色;
2) getForeground(): 取得前景颜色; setBackground(): 取得背景颜色;
3) setEnabled(): 使组件有? getEnabled(): 取得lg有效的状?
4) setVisible(): 使组件可? getVisible(): 取得lg可视状?
5) setFont(): 讄lg字体; getFont(): 取得lg字体;
6) setSize(): 讄lg大小; getSize(): 取得lg大小;
7) getPreferredSize(): 取得默认的尺?
8) setLocation(): 讄lg位置; getLocation():获得lg位置;
9) setBounds(): Udq且重新调整寸; getBounds(): q回q个lg的范?位置和尺?;
10)paint(): l制lg; repain():重绘; update():更新;
2. 按钮(Button)
{:1) 当单L产生一个动作action;
2) 构造函敎ͼ
Button()
Button(String label)
3) ҎQ?br /> setActionCommand(): 讄q个按钮触发的动作事件的命o名称;
getActionCommand(): q回q个按钮触发的动作事件的命o名称;
setLabel(): 讑֮q个按钮的标{?
getLabel(): 得到q个按钮的标{?
addActionListener(): 加入指定的动作侦听器L按钮动作事g;
removeActionListener(): U除指定的动作侦听器Q按钮不再接收动作事g;
getActionListeners(): q回所有登记的动作侦听器的数组;
3. d(Canvas)
{:1) 用来昄囑Ş;
2) l制外Ş、像素以及带有许多颜色的文本
3) 构造方法:
Canvase()
Canvas(GraphicsConfiguration conf)
4) ҎQ?br /> paint()
update()
4. 复选框(Checkbox)
{:1) 单独使用Q显CZ选中或不选中的复选框;
2) 作ؓ复选框l的成员Q它的表现和单选按钮同;
3) 构造函?
checkbox()
checkbox(String label)
checkbox(String label, boolean state)
checkbox(String label, boolea state, CheckboxGroup group)
checkbox(String label, CheckboxGroup, boolean state)
4) 关于checkbox的方?
addItemListener(): 加入指定目监听器接收复选框目事g;
removeItemListener(): U除指定的项目监听器Q复选框不再接收复选框事g;
setState(): 复选框讑֮为指定状?
getState(): 判断复选处于“开”或“关”状?
setLabel(): 讄复选框标签;
getLabel(): 得到复选框标签?br /> 5) 关于CheckboxGroup的方?br /> getSelectedCheckbox(): 从复选框l中得到当前选择;
setSelectedCheckbox(): 讄复选框l中指定复选框为选中?/p>
5. 下拉列表(Choice)
{? 1) 一U下拉菜单Ş式的单选项;
2) 当前选中的项目显C在屏幕?
3) 构造函?
Choice()
4) Ҏ:
add(): Z拉列表加入选项元素;
insert: 在指定位|插入选项元素;
getSelectedItem(): 以字W串形式q回当前选项;
getSelectedIndex(): q回当前选项的烦?
getItem(): q回下拉列表中指定烦引位|元素的字符串格?
addItemListener(): 加入指定目监听器,接收来自下拉列表的项目事?
removeItemListener(): U除指定目监听器,使它不再接收来自下拉列表的项目事?
6. 标签(Label)
{:1) 用以在屏q上昄文本;
2) 没有直接的交互动?
3) 构造方法:
Label()
Label(String text)
Label(String text, int alignment)
4) Ҏ
setText(): 讄标签的文本ؓ指定内容;
getText(): 得到标签的文本内?
7. 列表(List)
{:1) 在屏q上昄一l文本选项;
2) 允许用户单选或多?
3) 构造方?br /> List()
List(int rows)
List(int rows, boolean multipleModel)
8. 文本?Textfield)
{:1) 提供一单行可供~辑的文?br /> 2) 构造方?br /> Textfield()
Textfield(int columns)
Textfield(String text, int columns)
9. 文本?TextArea)
{:1) 提供多行多列的可~辑文本?
2) 文本区将昄水^和垂直的滚动?
3) 构造方?br /> TextArea()
TextArea(int rows, int cols)
TextArea(String text)
TextArea(String text, int rows, int cols)
TextArea(String text, int rows, int cols, int scrollbars)
10. 对话?Dialog)
{:1) 一个带有标题和边界的自q?
2) 黙认的布局理器是BorderLayout;
3) 必须拥有一个调用?
4) 可以是模式和非模式的?/p>
11. 文g对话?File Dialog)
{:1) 模式对话?
2) 用以选择文g;
12. 滚动面板(Scroll Pane)
{:1) 一个容器类;
2) 能ؓ单个lg自动水^或垂直滚?
13. 菜单?MenuBar)
{:1) 一个菜单条lg是一个水q单,它只能加入到一个框架中Qƈ成ؓ所有菜单树的根?br /> 2) 使用框架的setMenuBar()Ҏ讄菜单?
14. 菜单(Menu)
{:1) 主要功能是装载菜单项;
2) l承自MenuItemc,因此它能装蝲其它菜单;
15. 菜单?MenuItem)
{:1) 菜单组件是菜单树的文本“叶”结点,它们通常被加入到菜单中,以构成一个完整的菜单;
2) 通常一个ActionListener加入C个菜单项对象中,以提供菜单的行ؓ?/p>
16. 弹出式菜?PopupMenu)
{:1) 提供了一U独立的菜单Q可以在Mlg上显C?
2) 可以菜单条目和菜单加入到弹出式菜单中去?/p>
AWT事g模型
1. 什么是事gQ?br />{:1) 事g?事g的生器;
2) 事g-描述发生了什么的对象;
3) 事g处理?接收事g、解释事件ƈ处理用户交互的方?
2. 事g?br />{:1) 事g源是一个事件的产生?
2) 提供Ҏ允许其它Ҏ增加或移除事件处理器;
例:在Buttonlg上点击鼠标会产生以这个Button为源的一个ActionEvent, q个ActionEvent实例是一个对象,它包含关于刚才发生的那个事g的信息的对象?/p>
3. 事g处理?br />{:1) 事g处理器就是一个接收事件、解释事件ƈ处理用户交互的方法?/p>
4. 事gcd
{:1) 对于每类事gQ都有一个接口,q个接口必须由想接收q个事g的类的对象实现。这个接口还要求定义一个或多个Ҏ。当发生特定的事件时Q就会调用这些方法?/p>
5. ActionEvent
{:1) 双击列表?
2) 按钮被选中;
3) 菜单被选中;
4) 文本域回车?/p>
6. TextEvent
{:适用二行文本域同步情?/p>
7. ItemEvent
{:1) 多选框选中或取?
2) 可选菜单选中或取?
3) 下拉列表w中;
4) 列表w中?/p>
8. 事g适配?br />{:1) 事g适配器空实现了一个事件处理器的所有方?
2) 你只需l承q写你感兴的Ҏ卛_
2004-8-31 星期二 ??/p>
Java基础c?/p>
1. JFC预览
{:1) Java基础cL关于GUIlg和服务的完整集合Q它大大化了健壮Java应用E序的开发和实现;
2) Java基础cd中的一部分是Swing, Swing是构{在AWT上层的一些组件的集合;
3) Java基础cM要包?个APIQ?br /> a. AWT: 为各cJava应用E序提供了多UGUI工具;
b. Java2D: 一囑ŞAPI, 为Java应用E序提供了一套高U的有关二维囑Ş囑փ处理的类;
c. Accessibility API: 提供了一套高U工P用以辅助开发用非传统输入和输出的应用E序?br /> d. Drag & DropQ提供了Java和本地应用程序之间的互操作性,用来在Java应用E序和不支持Java技术的应用E序之间交换数据?br /> e. Swing:JFC模块的重点,用来q行ZH口的应用程序开发,它提供了一套丰富的lg和工作框Ӟ以指定GUI如何独立于^台地展现其视觉效果?/p>
2. Swing介绍
{:1) 它是围绕着实现AWT各个部分的API构筑?
2) 大多数组件不象AWT那样使用与^台相关的实现?/p>
3. 导入Swingq程
{:1) 导入Swing?
2) 选择外观和感?getLookAndFeel());
3) 讄H口容器
a. JFrame与Frame怼;
b. 你不能直接将lg加入到JFrame?
c. 一个content pane包含了除菜单条外所有Frame的可视组?/p>
4. JComponentc?br />{:1) 所有Swing都作为JComponent的子cL实现;
2) Swinglg从JComponentl承了如下功能:
a. Ҏ(setBorder()Ҏ指定在组件周围显C的Ҏ, EmptyBorder的实例来指定一个组件在其周围留有一定的额外I间);
b. 双缓?可以改善一个频J被改变的组件的外观Q缺省是双缓?;
c. 提示?通过用setToolTipText()Ҏ来指定一个字W串Q提供给用户有关某个lg的帮助信?
d. 键盘D
e. 应用E序范围的可插式外观和感?/p>
Java程?/p>
1. 什么是Applet?
{:1) Applet是能够嵌入到一个HTML面中,且可通过Web览器下载和执行的一UJavac?
2) Applet通过览器或applet viewersq行;
2. Applet的安全限?br />{:1) q行时执行另一E序;
2) M文g的输?输出;
3) 调用本地Ҏ;
4) 试打开除提供Applet的主Z外的Mpȝ的Socket?/p>
3. Applet和AWT的层?br />{:java.lang.Object
|
|
java.awt.Component
|
|
java.awt.Containter
|
|
java.awt.Panel
|
|
java.applet.Applet
4. Applet的方法和Applet的生命周?br />{:1) init()
a. 只在Applet首次装入时被调用, q且在调用start()之前执行完成;
b. 可用于初始化数据?
2) start()
a. 当Applet成ؓ可见时运?br /> 3) stop()
a. 当Applet成ؓ不可见时q行
5. Applet标记
{:1) code=appletFile.class l定了含有编译好的Applet子类的文件名;
2) width = pixels height = pixels l出了Applet昄区域的初始宽度和高度;
3) codebase = codebaseURL 指定了Applet的URL(包含有Applet代码的目? 如该属性未指定Q则采用文的URL);
4) align = alignment 指定了Applet的对齐方?br /> 5) <param name = appletAttribute1 value = value> 提供参数
6. Applet和浏览器的交互方?br />{:1) getParameter(String name)Q?取得参数;
2) getCodeBase(): q回一个描qAppletcL件本w源目录的URL对象;
3) getDocumentBase(): q回一个描q装载Applet的HTML文g的URL对象;
2004-9-1 星期三 ??/p>
U程
1. 什么是U程Q?br />{:1) 一个线E是一个程序单个的q箋控制;
2) 一个Y件能处理一pd的线E构?
3) U程能同时运行,彼此独立;
4) 包ؓjava.lang.Thread;
2. U程或上下文的构?br />{:1) 一个虚拟处理机;
2) CPU执行的代?br /> 代码可以或不可以由多个线E共享,q和数据是独立的。两个线E如果执行同一个类的实例代码,则它们可以共享相同的代码?br /> 3) 代码操作的数?br /> 数据可以或不可以由多个线E共享,q和代码是独立的。两个线E如果共享对一个公共对象的存取Q则它们可以׃n相同的数据?/p>
3. U程机制
{:1) 当线E开始,run()Ҏ里代码被执行;
2) 创徏U程的二U方法:
a. l承Threadc?
b. 实现Runnable接口?/p>
4. 通过l承ThreadcdZ个线E?br />{:1) 定义
public class MyThread extends Thread{
public void run(){...}
}
2) 初始?br /> MyThread testThread = new MyThread()
5. 通过实现runnable接口创徏一个线E?br />{:1) 定义
public class MyRunnable implements Runnable {
public void run(){...}
}
2) 初始?br /> MyRunnable testRunnable = new MyRunnable();
Thread testThread = new Thread(testRunnable)
6. 二种创徏U程Ҏ的比?br />{:1) l承ThreadcL面向对象~程;
2) 实现Runnable接口解决了单l承
7. U程调度
{:1) U程是抢占式的,但ƈ不一定是分时的;
2) 有多个线E可q行Q但只有一个线E在实际q行?br /> 3) 所有可q行U程Ҏ优先U保存在池中Q当一个被d的线E变成可q行Ӟ它会被放入相应的可运行池Q优先最高的非空池中的线E得到处理机旉?br /> 4) sleep()调用会给较低优先U线E一个运行的ZQyield()Ҏ只会l相同优先U程一个执行的Z?/p>
8. U程的基本控?br />{:1) 启动U程Q用start()ҎQ这意味着U程可以由JVM调度q执行,q不意味着U程׃立即执行?br /> 2) l止一个线E:当一个线E结束运行ƈl止Ӟ它就不能再运行了?br /> 3) 试一个线E:isAlive()Ҏ用来定一个线E是否仍是活的。活着的线Eƈ不意味着U程正在q行?br /> 4) 延迟U程Q?br /> sleep()QɾU程停止一D|_间隔期满后,U程不一定立x复执行?br /> join()Q挂起当前线E,直至它所调用的线E终止?/p>
9. synchronized关键?br />{:1) 标识一l变量应该被一个线E独占地使用;
2) public void push(char c){
synchronized(this){
...
}
}
public synchronized void push(char c) {
...
}
3) 所有对易碎数据的存取应当是同步的,由synchronized保护的易数据应当是private的?/p>
10. U程交互
{:1) wait()Q交出锁和CPU的占?
2) notify()Q将从对象的{待池中U走一个Q意的U程Qƈ攑ֈ锁池中,那里的对象一直在{待Q直到可以获得对象的锁标记?br /> 3) notifyAll(): 从{待池中U走所有等待那个对象的U程q放到锁池中Q只有锁池中的线E能获取对象的锁标记Q锁标记允许U程从上ơ因调用wait()而中断的地方开始l运行?/p>
2004-9-2 星期四 ??/p>
式I/O和文?/p>
1. 和基础知识
{:1) 一个流是字节的源或目的
2) 二种基本的流是:输入和输出?br />
2. InputStreamҎ
{:1) 三个基本的read()Ҏ
a. int read(): 从流里读出的一个字节或?1;
b. int read(byte[])Q将数据d到字节数l中Qƈq回所ȝ字节?
c. int read(byte[], int , int)Q两个int参数指定了所要填入的数组的子范围?br /> 2) 其它Ҏ
a. void close(): 关闭,如用过滤器,关闭栈顶部的,会关闭其余的?br /> b. int available(): q回可从中d的字节数?br /> c. skip(long): 丢弃了流中指定数目的字符?/p>
2. OutputStreamҎ
{:1) 三个基本的read()Ҏ
a. void write():
b. void write(byte[])Q?br /> c. void write(byte[], int , int)Q?br /> 写输出流?br /> 2) 其它Ҏ
a. void close(): 关闭,如用过滤器,关闭栈顶部的,会关闭其余的?br /> b. int flush(): 允许你强制执行写操作?/p>
3. FileInputStream和FileOutputStream
{:1) l点,使用盘文g?br /> 2) 要构造一个FileInputStream, 所兌的文件必d在而且是可ȝ?br /> 3) 要构造一个FileOutputStream而输出文件已l存在,则它被覆盖?br /> FileInputStream infile = new FileInputStream("myfile.dat");
FIleOutputStream outfile = new FileOutputStream("results.dat");
4. BufferInputStream和BufferOutputStream
{:qo器流Q可以提高I/O操作的效?/p>
5. DataInputStream和DataOutStream
{:通过来dJava基本c?注意DataInputStream和DataOutputStream的方法是成对的?/p>
6. PipedInputStream和PipedOutputStream
{:用来在线E间通信.
7. Reader和Writer
{:1) Java技术用Unicode来表C字W串和字W,而且提供16位版本的,以便用类似的Ҏ处理字符?br /> 2) InputStreamReader和OutputStreamWriter作ؓ字节与字符中的接口?br /> 3) 如果构造了一个连接到的Reader和WriterQ{换规则会在用缺省^台所定义的字节编码和Unicode之间切换?/p>
8. 文g
{:1) 一个文件对象可以代表文件或者目?
2) Filecd理所有磁盘操?
3) 构造方法:
a. File(File parent, String child):
b. File(String pathName);
c. File(String parent, String child);
d. File(URI uri)
4) 目录分隔
File.separator
9. 随机存取文g
{:1) 实现了二个接口:DataInput和DataOutput;
2) 只要文g能打开pd;
3) 通过文g指针能读写文件指定位|?
4) 可以讉K在DataInputStream和DataOutputStream中所有的read()和write()操作;
5) 在文件中UdҎ:
a. long getFilePointer(): q回文g指针的当前位|?br /> b. void seek(long pos): 讄文g指针到给定的l对位置?br /> c. long length(): q回文g的长度?/p>
10. 串行?br />{:1) 一个对象存攑ֈ怹存储器上UCؓ保持;
2) 只有对象的数据被串行?
3) 标记为transient关键字的数据不被串行化?/p>
2004-9-3 星期五 ??/p>
|络
1. socket
{:1) 在一个特定编E模型下Q进E间通信链\的端炏V?br /> 2) 一个socket包括两个:一个输入流(d另一个进E所写的数据)和一个输出流(向另一个进E发送数??/p>
2. Java技术中的网l?br />{:1) q接的地址(Host name 或?IP Address);
2) 端口?范围?-65535, 于1024的端口号保留l预定义的服?;
3. Java中的|络模型:
{:1) 服务器分配一个端口号Q如果客戯求一个连接,服务器用accept()Ҏ打开socketq接;
2) 客户在host的port端口建立q接;
3) 服务器和客户使用InputStream和OutputStreamq行通信?/p>
4. 建立服务器端
{:1) ServerSocket server = new ServerSocket(post)
2) Socket connection = server.accept();
3) ObjectInputStream input = new ObjectInputStream(connection.getInputStream());
ObjectOutputStream output = new ObjectOutputStream(connection.getOutputStream());
4) 处理输入和输出流;
5) 关闭和socket?/p>
5. 建立客户?br />{:1) Socket connection = new Socket(127.0.0.1, 7777);
2) ObjectInputStream input = new ObjectInputStream(connection.getInputStream());
ObjectOutputStream output = new ObjectOutputStream(connection.getOutputStream());
3) 处理输入和输出流;
4) 关闭和socket?/p>
6. URLq接
{:1) URL和URLConnectioncd装了大量复杂的从q端服务器获取信息的操作Q?br /> 2) 支持HTTP和FTP资源
URL url = new URL(" URL url = new URL("ftp://TonyDeng@enterinfo.net")
3) 打开一个网l连?br /> URLConnection urlconn = url.openConnection()
4) 打开一个输入流
inputStream in = url.openStream()
7. UDP socket
{:1) 无连接的协议
2) 不保证消息的可靠传输
3) 它们由Java技术中的DatagramSocket和DatagramPacketcL?/p>