多多、

下午
JAVA的字节码校验机制
是否符合JVM规范
是否破坏系统
是否堆栈溢出
参数、类型转换的正确性
JAVA中内存的使用
用new申请内存
JVM的gc回收内存
通过后台线程实现
程序员只有建议权,但JVM有权决定是否运行
Person P=new person();
P=null;(内存垃圾)
JDK安装后的文件
bin 可执行文件
javac 编译
java 解释执行
lib 类库文件
demo案例
src.zip 源代码
API 类库说明(需单独下载)
环境变量的配置:
Path/PATH(unix) 配bin下面的可执行文件
CLASSPATH 配lib下面的类库文件和当前文件.(只配置.即可)
JAVA_HOME 配JDK安装目录(可以不配)
右键点击“我的电脑”—属性-高级-环境变量
用户变量只针对当前用户
系统变量针对所有用户
先在系统变量中找到Path,点编辑,在Path的最前面加上C:\ProgramFiles\Java\jdk1.6.0_01\bin;(不能删除Path的任何已经存在的东西)
点新建,变量名CLASSPATH
变量值 : .;C:\Program Files\Java\jdk1.6.0_01\lib(lib可以不配)
点新建,变量名:JAVA_HOME
变量值:C:\ProgramFiles\Java\jdk1.6.0_01(可以不配)

验证成功:
javac 找文件
javac -d . 文件名 自动生成目录
运行时: java 包名.类名
java -version 找类

在windows系统中,配置环境变量完成以后,重启dos窗口

主方法(JVM运行类时的入口方法)

练习:打印个人信息
姓名、年龄、学校
java,lang包内的类自动加载,当前包里的类也能找到。其它类用import导入,

JAVA中重要的包
java.lang 核心包,自动加载
java.awt/javax.swing/java.awt.event 图形用户解面
java.applet 小应用程序
java.io 输入输出包
java.net 网络包
java.util 工具包
java.sql/javax.sql 操作数据库包

Scanner sc=new Scanner(System.in);
System.out.println(“请输入名字:”);
String name=sc.next();
System.out.println(“请输入年龄:”);
int age=sc.nextInt();
System.out.println(“您的名字:”+name);
System.out.println(“您的年龄:”+name);
1. Java语言特点和JAVA术语
2. Java开发环境的搭建
3. Java开发的基本步骤
4. jar包:.class文件压缩成jar
5. Java包和import
6. Scanner的使用
作业:
1 必须的 带上package语句,开发HelloWorld
2 实现模拟商品的买卖
输入商品名称、输入商品的数量、
输入商品的价格(用int)
然后打印 买了 xx,个数和总价。
2010年3月24日 星期三 第四天 小雨
JAVA语言元素
注释(Comments):
// 单行注释
/* */ 多行注释
/** */ 多行注释,支持javadoc的文档化
用法:1、可以标注代码
2、可以调试代码
标识符(Identifiers):
作用:为类、方法、变量起名。
1、必须字母、下划线、$、数字组成,数字不能开头
2、区分大小写
3、长度无限
4、可以是中文
5、不能是Java的关键字(关键字全小写)
基本数据类型(Primitive data types):
Java是强类型语言,所有变量在使用前必须声明类型
常量
变量声明(带类型出现),变量第一次赋值叫初始化
Java变量类型:
基本类型(一个值)
boolean/char/byte/short/int/long/float/double
char 一个字符,用单引号括起来具备字符和整数的双重特性,但String就是字符串
整形默认是int,浮点默认是double
byte/short/int/long 第一位是符号位
引用类型 一个地址(引用)-->内存区域(对象)
类、接口、属组、枚举、标注
下午
基本类型转换:赋值时左右类型必须一致,范围小的可以自动转换为范围大的,常数可以自动转换(byte by=2 ),大范围向小范围的需要强制类型转换,所有byte、short、char的运算,自动转换成int后运算
自动转换:byte->short->int->long->float->double
char->int
强制转换:
小类型 变量名=(小类型)大类型的数值
JAVA语言规范
1、类、接口名所有单词首字母大写
2、变量名、方法名、首字母小写,其他单词首字母大写
3、包名全小写,不同单词用“.”隔开
4、常量所有字母全大写,不同单词“_”隔开
写程序的基本要求
1、有缩进(两到四个空格)
2、代码采取插入式写法{}
运算符(Operators):
赋值运算符(Assigment operators):
内容:
Java的变量、标识符、关键字、类型、类型的赋值和转换、运算符

ChangeTem
Timer
.exrc set nu set ts=4 Math.round()

2010年3月25日 星期四 第五天 多云
移位运算符
>> 右移 前边补符号位
<< 左移 后边补0
>>> 无符号右移 前边补两个0
在移位运算时,先对移位数求余(int%32,long%64),对于负数,加倍数转成正数,再求余
逻辑运算符
&&、& 逻辑与(并且)
||、|  逻辑或(或者)
&&、||短路与/或(优化过),只要一个条件不成立,就不再计算后面的所有条件。
!  逻辑非(取反)
条件运算符(三目运算符)(? :)
(条件)?结果1:结果2;
条件为真,输出结果1;条件为假,输出结果2
运算符的优先级:
1、= 底
2、() 高
流程控制
if_else statement 分支语句

if(条件1){if出现1次,满足条件1执行语句
}else if(条件2){else 出现0~n次,满足条件2执行的语句
}else{以上条件都不满足,执行的语句
}
有else必选其一,没else可选其一;
容易产生的错误:
练习:
1、输入工资int,判断工资水平
工资大于等于10000的,打印高薪
工资在[6000~10000)的,打印中等薪水
工资在[3000~6000)的,打印底薪
工资在[1500~3000)的,打印救济金
其他的,打印失业了。。。
2、把温度转换和并未一个类,先提示输入1或2,然后根据1活或2进行温度转换!
3、计算一下北京的出租车计费
输入公里数和等待时间
3公里以内10元,每多一公里2元,超过15公里每公里3元
等待时间每150秒1元,不足的舍弃
要求:输出车费
for loop 循环 反复执行语句
for(int i=1;i<=1000;i++){
System.out.println(“i”);
}
for (1循环变量初始化;2循环条件;3变量步进){
4反复执行的语句(循环语句);
}
循环变量执行顺序:1-2-4-3-2-4-3-2.......2或者死循环
Ctrl+C 退出死循环 命令行下
Eclipse中在console中,点红色方块,可以退出JVM

打印1-100的所有奇数:要求两种思路
循环次数不确定的循环,采用死循环+break
for( ; ; )==while(true)
字符串的比较用equals,不用==
练习:输入学生考试成绩,输入-1代表退出。退出以后,要求输出的总分和平均分,平均分要求四舍五入(Math.round()).
作业:
1、打印

***
*****
*******
2、要求打印出1-100的所有素数(质数)
只能被1和它自身整除的数字(2,3,5,7......97)
3、有36个人,36块砖,男人每次4块,女人每次3块,小孩每2人搬1块,一次搬完,每个人都搬了。求几个男人,几个女人,几个小孩?
4、要求输入年份、月数,输出这个月的天数!
(能被4整除并且不能被100整除)
(能被400整除的)。

2010年3月26日 星期五 第六天 晴
switch case
switch (byte,short,char,int,枚举){
case 变量值 :
break;
case 变量值 :
break;
default:
其它值;(最后分支可以不写break)
}
while
int i=0; 初始化循环变量
while(i<10(条件语句)){
循环体;
步进语句;
}
do...while
do{
循环体;
步进语句;
}while(条件); //分号不能少,循环至少执行一次
break、continue、return
break 跳出循环(循环结束);
continue 结束本次,继续下次;
return 结束方法。
下午
数组(Arrays)
1、定义数组
2、数组的初始化
3、取出数组中的数据(元素)
4、数组的算法
数组的概念
数组仅仅是数据载体,不是数据本身
数组元素
数组元素就是数据
数组下标
数组是有序线性结构,存在数据下标。下标从0开始,元素的个数减一。[0~~个数-1]

定义属组: 数组是引用类型
类型 [ ] 变量名 = new 类型 [元素个数]
int [ ] arr= new int [ 10 ]
1、数组:arr
2、数组元素:arr [i] 数组下标 [ 0, i-1]
3、元素个数:10 , arr.length
4、数组下标:[0 , arr.length)
数组元素默认值:
boolean: false
char: '/u0000'
其它类型:不同精度的0或者0.0
引用类型:null
作业:
Day4HomeWork

ftp 192.168.0.25
sd1003
sd1003
note
2010年3月29日 星期一 第七天 晴
1、选择排序
2、插入排序
3、冒泡排序!
相邻的进行比较,前大后小,交换位置,
4、快速排序

二分查找
二叉树
平衡二叉树,每一层节点,左、右层数差[1,1],能保证查询的效率
栈内存(引用)
后进先出
堆内存(对象)
gc()
二维数组:
数组元素:一维数组
总结:
排序的算法:选择,插入,冒泡,快速
二分查找法和平衡二叉树
二维数组的使用
作业1、用代码实现选择和插入的排序
作业2、实现一个int[]的长度的可变性,用add方法取代以前的操作方式。
ArrayList的设计,实现方式:
定义一个int数组,长度不一定,然后定义一个变量,记录元素个数,当个数超过或者等于数组长度时,new更大数组,然后arraycopy,元素个数继续增加!
方法格式:
public void add(int i){ }

2010年3月30日 星期二 第八天 阴有小雨
面向对象(Object Orienten)
OOA 面向对象的分析
OOD 面向对象的设计
OOP 面向对象的编程
OOT 面向对象的测试
类/对象
类是概念上的,抽象的
对象是客观世界的,具体的
属性/字段,代表特征
直接定义在类体{}内的变量
属性在不赋值时有默认值,与数组元素的默认值(null)是一样,其他变量没有默认值
[修饰符] 类型 属性名 [=默认值];
方法/函数 行为
[修饰符] 返回类型 方法名(参数列表)[throws Exception] { 方法体 }
属性和方法的区别:
属性后边没有(),方法后边有();
练习:归纳一下Student类的代码
类student{学号、姓名、性别、年龄、上课、聊天、吃饭}
构造方法:
用来得到对象
new 构造方法-->对象(放在堆里面)
所有的类都有构造方法,但不一定都能调用;如果程序员不写,那么,系统会提供一个默认的无参构造方法;但如果程序员写了,就没有默认的构造方法!
[修饰符] 类名(参数列表) [throws Exception]{ }
类与构造方法的区别:
构造方法后有(),类名后没有()
构造方法与方法的区别:
练习:
写一个员工类Emp,编号、姓名、性别、工资、部门、上班、领工资
分析:什么是属性,什么是方法。要求提供两个构造,一个无参,另一个全参(所有属性都可以通过构造赋值)
参照TestStudent写一个TestEmp,调用方法
this代表本类的对象
不能出现在静态方法中
this. 调属性/方法,在没有重名的时候,this.可以省掉
出现在构造方法中,this代表即将构造的对象
出现在方法中,代表方法的调用对象
this() 调本类的构造,用于参数少的调参数多的;必须出现在本类构造的第一行;
练习:
计算器:
设计add()
double add(double d1,double d2)
int add(int a,int b)
方法重载(Overload):便于调用方法
方法名相同,参数类型不同,返回类型最好相同
多个构造自然形成重载
功能相似的方法可以重载
变量的分类
实例变量:(直接定义在类体{}中)
作用范围:本类中非Static的位置均可使用
类变量:(直接定义在类体{}中,并用static修饰)
作用范围:本类中所有地方
局部变量:(定义在其他位置)
作用范围:定义的局部范围
在传参(方法、构造)时,在栈内存中压入一个传入的变量副本(参数),在方法中所有的操作针对参数,参数副本的内容于变量的内容完全一致;所有Java传参叫做:值传递
new对象时,次序:
1、先申请内存空间,为本类、本类的属性
2、执行默认初始化
3、执行显式
4、执行构造当中的代码
面向对象三大特性:
封装:
好处:
1、属性值有效
2、安全
3、隐藏类的细节
4、对外提供了统一、安全有效的操作方式
封装步骤:
1、所有非常量属性用private隐藏
2、提供public方法的操作属性
3、修改构造中的代码,改为调用set方法


面向对象的基本概念:
类,对象,属性,方法,构造
重载,封装
能用封装写出类,包括属性(封装),方法,构造,如何调用。
作业:
1、写一个Person类,必须封装属性。
2、写一个Point类,包括x,y两个属性(坐标)
要封装,并且提供两个构造,
提供一个方法计算该点到(0,0)的距离的方法;
提供一个方法计算两个点之间距离的方法(重载)
开平方方法去java.lang.Math中找

2010年3月31日 星期三 第九天 晴
继承(Inheritance):
从逻辑上,子类必须is a 父类
1、子类复用父类代码
2、继承是多态前提条件
子类 extends 父类 (单继承)
父类派生子类
每一个类只能有一个直接父类
java.lang.Object是所有类的父类
1、属性可以继承
2、非私有方法可以继承
3、构造方法无法继承,但子类必然调用父类构造方法
new子类时,可以隐式或者显式调用父类的构造方法
默认情况下,子类调用父类无参构造方法,但子类可以用Super(参数)调用父类构造方法(显式)
Super.
Super代表父类对象,this代表子类对象
Super() 必须在构造方法的第一行
构造方法:先执行父类构造方法,再执行子类构造方法

方法重写/覆盖 Override 区别于重载(Overload)
父类的方法不满足子类的需求时,可以重写父类方法
规则:
1、方法名相同,参数相同,返回值类型相同(5.0以后允许返回子类类型)
2、访问权限不能变小
3、抛出异常不能更大

多态(Polymorphism):
一个名称对应多种形态,叫多态
1、基本类型多态,本质:自动类型转换
2、方法多态,重载、重写
*3、类/接口的多态,父类的引用可以指向父类和子类的多态
Person p=new Person ;
Person p=new Student;
4、多态主要用于方法参数的设计和方法返回类型(传参时的多态)

当发生类的多态时,拿子类的对象当父类用
1、定义在子类中的属性、方法不能直接使用
2、如果父类方法被重写了,静态方法调父类的,非静态方法掉子类重写的
3、子类中定义的属性、方法可以通过强制类型转换后使用
练习:
写两个类Person(name、age),封装,提供两个构造方法,并且写一个test方法,打印“PersonTest”
再写Person的子类Student,加入id属性(封装),重写test方法,打印“StudentTest”
1、引用类型的类型转换只能发生在父子类之间
2、子类可以自动转换成父类的对象
3、父类需要强制类型转换成子类,但只有在父类的引用指向子类的对象时才成功
4、在强制类型转换之前,用instanceof判断对象的类型
instanceof判断一个对象是否是另一个对象的实例
练习&&作业:
写一个园,要求有圆心坐标(Point)和半径,用封装实现。
提供两个构造 ,单独提供两个方法:
1、计算圆的面积(Math中有圆周率PI)
2、判断一个点(Point)是否在圆内
作业:
1、总结所有面向对象的概念:
类、对象、方法、属性、构造、重写、重载、封装、继承、多态(什么是、为什么、怎么用)
2、设计一个公司员工的模块
有销售Sales(编号、姓名、工资、奖金、电话)
管理Admin(编号、姓名、工资、分红、电话)
财务Money(编号、姓名、工资、帐户、电话)
技术Tech(编号、姓名、工资、项目组、电话)
要求单独提供方法:
计算年收入(技术13薪,财务12薪)。。。重写
写一个工具类TestEmp,在工具类中提供一个方法:
按照员工的年收入,判断是否需要申报个税
超过12万的返回需要申报
要求使用类、对象、属性、方法、构造、封装、继承、重写、多态

2010年4月1日 星期四 第十天 阴有雨
static 代表类相关,所有对象共享(内存中共享)
static属性/方法可以用类名.调用
static的成员会在类加载时完成(在创建对象之前)
static方法中不能直接使用对象相关的属性/方法(创建时间问题)也不能使用this.
池: 常驻内存,反复利用
static池、String常量池、Integer自动装箱池、DB连接池、线程池
static可以修饰:
属性、方法、语句块{}、内部类
声明不加载类
final代表不可改变,不能继承(System、String、、、)
final方法不能重写
final变量只能初始化(必需)
final变量只限制一层
final修饰的变量,必须赋一次值,可以在构造方法中赋值
final属性只有get方法,没有set方法
final修饰的变量针对一个对象时是常量!!
练习:
银行排号的代码:(Custom)
每人按照次序得到号码:1、2、3、4、5、、、、
设计一个Custom类,号码不可改变,有次序
练习:
Java设计单例(Singleton)
一个类只需要一个对象(单个实例)
创建对象(实例)靠构造,一个public的构造不可能单例
类外必须不能调构造(private)
public static Singleton getInstance(){ }
abstract 抽象 无法实现
abstract 可以修饰类/方法
abstract 类有构造,但不能new
abstract方法没有方法体
public abstract 类名{
public abstract 返回类型 方法名(参数列表);
}
含有抽象方法的类必须是抽象类,抽象类可以不包含抽象方法。
所有抽象类的引用,都指向非抽象的子类对象
所有抽象方法,都执行子类中重写后的方法(非抽象子类一定要重写抽象方法)
Interface 接口可以实现多重继承关系
public interface 接口名
1、接口可以看成特殊抽象类,支持多态、重写
2、接口中所有属性都是常量 public static final
3、接口中的所有方法都是public abstract (抽象方法)
4、接口无构造方法
5、类可以实现多个接口 implements(实现),多个接口用“,”隔开,接口之间是多重继承,用extends。
面向接口编程,接口可以指定规范
练习&&作业:
写一个复数类(a+bi),提供复数加、减、乘法的方法。
(a+bi)+(c+di)=(a+b)+(b+d)i 减法也一样 i*i=-1
(a+bi)*(c+di)=(ac-bd)+(ad+bc)i

设计一个教室,教室里有n个学生、一个老师、一个网管、
要求:学生人数要固定;老师所有教室共享;网管所有教室共享,并且不会换人。。封装、继承、数组、static、final、abstract

2010年4月2日 星期五 第十一天 多云
访问权限:
private 本类
Default 本类、本包
protected 本类、本包、子类可以继承使用
不能new父类对象,用父类.使用;不在子类中不能使用参数;非子类的类和参数不在同一个包中不能使用
public
Object
clone 浅克隆、深克隆
1、副本不能是对象本身x.clone() != x
实现clone()步骤:
1、实现cloneable接口
2、重写clone(),把权限改为public
浅克隆:复制引用
深克隆:复制对象(内存)
equals 是==实现 ==永远比内存地址
equals方法可以改变(重写)
1、基本类型的比较用“==”
2、引用类型与null比,用“==”
3、引用类型之间的比较(非空引用)用equals();
hashCode
重写equals,一定要重写hashCode
toString()的调用方法
1、System.out.println() 自动调用对象toString
2、连接字符串时,自动调用toString
3、正常调用:对象.toString
finalize
String
String 是一组不可改变的unicode的字符序列(有序)
String 使用不变模式,String对象永远不变,
String =“abc”;s=“bcd”;变得不是对象,不是地址
String 底层是char[]
String(byte[] bytes,int offset, int length)
bytes:文本内容
int offset:开始下标
int length:使用长度
String(String original)
方法:
charAt 返回指定下标的char
endsWith 测试此字符串是否以指定的后缀结束,返回boolean类型的值
startsWith 以........开始
equals 比较字符串是否相等
equalsIgnoreCase 比较字符串是否相等,忽略大小写
getBytes() 把字符串转换成byte数组,把String拆成b
byte[]
*indexOf(Stri ng str) 在大字符串中查小字符串,返回第一个字符的位置,没找到返回-1。
*indexOf(String str,int formIndex)从指定下标开始搜索,返回该下标后第一次出现的位置,没找到返回-1结束
length() 返回此字符串的长度
matches 检验String是否符合正则表达式
replace(Char , Char)替换字符串
split() 拆分字符串
substring() 截取字符串
toLowercase() 全转小写
toUppercase() 全转大写
trim() 去掉首尾的空白
作业:
1、把前面的所有的东西做一个总结
基本语法(运算符、流程控制、类型、数组)
面向对象(类、对象、属性、方法、构造、封装、继承、多态、重载、重写、this、super、static、final、abstract、接口)
API的类(Object中equals、hashCode、toString、String的相关方法)
要求:笔记+代码,要自己多敲一下(1-2天)
2、代码
写一个StringUtil类,提供方法如下:
a、能统计某一字符串中某字符的个数
b、截取E-mail中的用户名,并返回
c、实现一下某数字型的字符串变成int(“123”-->123)
'1'-'0'=数字1(先判断正负数)
3、五子棋的实现(参考class文件)
java FiveChessGame

2010年4月6日 星期二 第十二天 阴
正则表达式:
第一组: ^代表正则表达式的开始符号
$ 结束
\ 转义字符
() 把一些东西结合成整体
. 代表任意一个字符
| 代表或者
第二组:\d 数字
\D 非数字
\w 英文单词字符
\W 非英文单词字符
[] 定义自己的东西
第三组: [abc] a或b或c
[a-z] 所有小写字母
[a-zA-Z0-9] 字母数字
[^abc] 非abc
第四组: ? 0-1此
* 0-n次
+ 1-n次
{n} n次
{n,} >=n次
{n,m} n到m次
在string中matches用于匹配正则表达式
不变的字符串:String 的方法,返回一个新对象
可变字符串:可变,无池,用于修改字符串
StringBuffer 多用户并行的问题,线程安全,低效
不产生新的对象,只有一个对象(返回自身)
StringBuilder 非线程安全,高效
练习:
1、实现一下右补空格的方法:
String rpad(String str,int length) 传入的String,要求长度
2、实现Java字符串连接运算符(+)
String add(String st,Object obj)
String add(String st,int i)
String add(String st,double d)
用StringBuilder的append实现
192.168.0.25
常用封装类: int Integer
long Long
double Double
Integer.parseInt(String s);
Double.parseDouble(String s);
5.0封装类实现与基本类型的自动转换(自动装箱/解箱)
Integer存在自动装箱池,范围-128-127
自动装箱和解箱唯一失败的情况:
Integer i=null; int i1=i; 报空指针异常
练习与作业:
1、把今天的代码掌握
2、用正则表达式优化昨天的作业
3、模拟实现用户的注册功能。
要求:提示输入用户名、密码、email,都验证格式
用户名:5-12位字母、数字、下划线
密码:6-12位字母、数字
如果输入错误 提示重新输入(for循环)
全部输入完以后打印出新用户信息

2010年4月7日 星起三 第十三天 多云
常用工具类
double计算 java.Math包
BigDecimal 用string做参数
做除法时保留有效位数
可实现:字符串加法,比如:123456789 12345678909876543
日期:java.util
Date 日期 数据库:java.sql.Date继承自Date
getTime()
Calendar 日历
时间点:Date 相对于1970.1.1.00:00:00
时间段:
java.text.SimpleDateFormat;
y年 yyyy
M月 MM
d日 dd
H时 HH
m分 mm
s秒 ss
S毫秒
内部类:
定义在一个类内部(类体{}内)的类叫内部类。可以看作是一个方法。
分类:
静态内部类 定义在类体{}内
成员内部类 定义在类体{}内
局部内部类 定义在其他位置
只能使用属性和final的局部变量
匿名内部类 定义在其他位置
匿名内部类:
1、无类名
2、无class关键字
3、无构造
4、有继承,无继承关键字
5、有父类/父接口名
6、有类体
匿名内部类只能使用父类/父接口中的方法
集合
ArrayList:长度可变的对象数组
1、增: add、addAll
2、删: clear、remove
3、改: set()
4、个数: size()
5、取: get()
6、包含: contains
练习:
实现一下学生信息的录入,并且完成筛选
用scanner输入学生的信息,格式: 1,zhangsan,25,man(每个学生输入一行)
输入over退出!
把学生信息存入Student对象,
把student对象,存入ArrayList。
1、判断一下3号同学的信息是否录入!
2、从ArrayList中删除所有姓zhang的学生
作业:
1、把Student和TestStudent完全掌握
2、看匿名内部类和ArrayList
3、代码:写一个MyArrayList(底层Object 一维数组)
add remove clear set get size contains

2010年4月8月 星期四 第十四天 阴有小雨
HashMap
键值对(Object key,Object value) key不能重复,按key取值,元素无放入顺序
1、增:put(Object k,Object v)
2、删:clear/remove
3、个数:size
4、取出:get
5、不知key取出 keySet、get
练习:
用户注册,Scanner输入用户名、密码、email,把信息存入HashMap中,全部存贮完毕后,把信息从HashMap中取出,并且打印出来。

集合(Collection):
集合是对象容器
链表(LinkedList):实现队列!!
特点:增删快,查询慢
单向链表: 数据+下条数据的地址
双向链表:上条地址+数据+下条地址,第一条头为null
泛型:在集合名后<元素类型>
for each是一种迭代器的特殊用法,只能取出元素,不能删除元素
HashSet实现Set接口,有哈希表(实际上是一个HashMap实例)支持
hasNext() 判断是否有下一个元素
next() 移动指针
作业:
1、总结今天的内容HashMap/List/Set/Iterator,要求精通
2、结合ArrayList和HashMap的练习
上午单用户的注册,要求改成可以多次注册的,每个用户注册完毕后,提示是否继续注册,输入Y/y继续,N/n退出。
把输入放入HashMap,泛型格式:
HashMap<String,Object> hm=new .........;
把每个用户的信息(HashMap)放入ArrayList中。
保存完毕以后,用Iterator从ArrayList中取出
HashMap用for each从HashMap中取出用户输入,并逐个打印

2010年4月9号 星期五 第十五天 多云
排序:
1、数组
2、集合:SortedSet(可排序Set)
接口:Comparable自然排序
Comparator 比较器
Map的实现类:
1、HashMap非线程安全,高效,支持null
2、HashTable线程安全,低效,不支持null
3、LinkedHashMap
泛型:
泛型好处:
1、规范参数类型
2、避免强制类型转换
类名<标识>
在类中,标识作为一个类型使用
泛型(2.5.6)
2个位置:
1、类名后
2、方法返回前
5种用法:
1、<E>、
2、<E extends XXX> xx及其xx的子类
3、<?>通配
4、<? extends XXX> xx及其xx的子类
5、<? super XXX> xx及其父类
<E extends xx&接口&接口>
6不能使用:
1、泛型不能new (new G())错误!
2、不能new数组 (new G[])错误!
3、不能是基本类型 <int>错误!!
4、不能用static修饰 static G 错误!!
5、Throwable子类不支持泛型
6、异常处理时,可以抛出,但在catch()中不能使用
catch(G g)错误!
练习:
要求模拟一下bbs的发布。
1、用Scanner输入帖子的标题、内容、作者、帖子发布的时间用Date,可以输入多个帖子,每个帖子输入完毕后,输入N结束,帖子存入ArrayList,写一个帖子类。
2、输入完毕以后,要求实现可以按照发布时间和标题排序并且打印出来。(两个比较器)
借用java.util.Collections中的方法完成List的排序

作业:
1、把集合总结一下,要求代码纯熟。(List/Set/Map/Iterator)
2、设计一个MyStack(栈)类。特点:先进后出FILO
参看一下java.util.Stack类(不能继承List)
要求提供的方法:

链表!!!!

2010年 4月12日 星期一 第十六天 多云转小雨
Exceptions
Java异常机制:
1、执行到引起异常语句时,生成异常对象(记录异常信息),并抛出
2、寻找catch语句,如果找到了执行catch,异常到此为止。
3、如果找不到,继续上抛,直到找到。
4、如果在main()中还未找到,程序中断。
5、异常每抛出一层,结束本层程序。
分类:
1、检测异常(编译时异常):一般无法绝对避免
2、非检测异常(运行时异常)
常见的RuntimeExceptinons
1、java.lang.ArithmeticException 算术异常
2、java.NullPointerException 空指针异常
3、java.lang.ArrayIndexoutofBoundsException 数组下标越界
4、java.lang.ClassCastException 类型转换异常 instanceof
5、java.lang.NumberFormatException 数字格式 String-->int
异常的处理方式:
1、try/catch/finally 捕获
2、throws 抛出 异常未处理,只是保证编译通过
用于抛出异常,但只是为了编译通过,未处理异常,因此 throws只用于检测异常
3、常见的RuntimeExceptinon,用if判断
方法的结束:
1、代码执行完毕
2、return 语句
3、抛出异常的瞬间(未捕获)
throw 用于程序员抛出异常
throws 为了编译通过
throw 抛出异常对象
throws后面跟类,放在方法/构造的{}之前
throw 后面跟对象,是语句
自定义异常:
1、继承Exception或其子类
2、提供两个构造,无参,String做参数
练习:自定义异常,并且使用。
写一个Person类(name和age),在setAge中,如果age不符合要求(0-130),可以抛出自定义的异常(AgeException)。
然后写一个main方法,调用setAge.

2010年4月13日 星期五 第十七天 雨
GUI
图形用户界面:
java.awt.*; 没表格、没图、没拖拽;有字体,按钮位置
javax.swing.*;
Swing常用组件(窗口、按钮、菜单……):
按钮:JButton
文本框:JTextField
菜单条:JMenuBar
菜单:JMenu
菜单项:JMenuItem
标签:JLable
容器(用于存贮组件):
JFrame 窗口(最外层)
JDialog 对话框
JPanel 面板(依附于JFrame或JDialog)
窗口和对话框可以单独存在,面板必须放入窗口或对话框
java.awt.event 事件处理(后台)
组件在容器中的大小和位置由布局管理器决定:开发时设置为null
FlowLayout特点: 默认居中
1、像Word打字
2、从左到右,一行满了,换行
3、保持组件的原始大小
JPanel面板默认为FlowLayout
BorderLayout
1、分成东、西、南、北、中五部分,每部分只能显示一个组件
2、北、南高度不变,西、东宽度不变,中部高度可变
3、组件不保持原始大小,会自动填满整个区域
4、默认情况下,组件放入中部
JFrame/JDialog 默认东部
GridLayout
1、网格状布局(n行,m列)
2、从左到右,从上到下,每格放一个
3、不保持组件的原始大小
CardLayout

一个容器只能提供一种布局,如果需要多个布局,可以使用JPanel
练习:
1、写计算器的界面,上边按钮的文字:
Backs CE C +
7 8 9 -
4 5 6 *
1 2 3 /
0,+/-, . ,=
2、写MSN/QQ的登录界面
第一行是 欢迎登录的标签(JLable)
第二行是 一个标签(email)和一个文本框
第三行是 一个标签(密码)和一个文本框
第四行是 两个按钮(确定和取消)
Event
事件源:事件的发起者
事件对象:事件的描述者
事件监听:事件处理者
awt事件处理:
1、实现接口(ActionListener)
2、重写actionPerformed(ActionEvene ae)方法
3、用addxxListener注册监听
4、监听方法中用到的组件,剪切做属性
练习:两个文本框,一个按钮,点按钮后,交换文本框内容
文本框、标签读写内容方法setText(String)/getText()

2010年4月14日 星期三 第十八天 中雨
菜单:
菜单栏:JMenuBar
菜单:JMenu
菜单项:JMenuItem
Jframe.setJMenuBar 添加菜单栏
JtextArea 多行文本
Timer 每隔一段时间自动调用ActionListener
start() 启动
stop() 停止
Jframe.dispose() 不退出JVM关闭
除了最外层的JFrame外,其他窗口不要setDef........()关闭!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值