第一篇:C程序设计教案解析
C程序设计教案
讲课提要
3.例:任意输入三个数,利用前例中的swap函数排序后输出。4.分析下面程序中的swap函数能否成功交换两个变量的值。void main({ int a,b;int *pa,*pb;void swap(int *,int *;scanf(“%d,%d”,&a,&b;void swap(int *p1,int *p2{ int *p;p=p1;
实例:输出数组全部元素 下标法
地址法:通过数组名找出各数组元素地址 指针法 几点说明
对于int a[10],*p=a;是指针变量,指向数组首元素,可以进行p++操作,使指针移向下一个元素。*p进行数组元素引用。
是数组的首地址,相当于指针常量,不能进行a++操作。可以进行
分析 地址和指针的概念 指针变量及其运算 数组的三种遍历方法 用数组名作为函数的实参。数组名作为实参时,表示数据元素的首地址。与 思 考 题,扩充 学生知识 面。目的: 1. 通过实验进一步掌握指针的概念,会定义和使用指针变量; 2. 能正确使用数组的指针和指向数组的指针变量; 3. 能初步使用字符串的指针和指向字符串的指针变量 题目:(请参考教学网站中的实验十二 1. 给出的图片中的程序,能够实现输入 3 个整数,按由小到大的顺序输 出。请仔细阅读,输入,运行并观察结果。体会指针变量的用法。完 成后将文件 c12_1.c 上交到“交作业空间”。2. 将第一题的程序改为:输入 5 个浮点数,按由大到小顺序输出。运行 并观察结果,并将文件命名为 c12_2.c 上交到“交作业空间”。3. 有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最 前面 m 个数,如图所示。完成后运行并验证结果,最后将文件 c12_3.c 上交到“交作业空间”。要求学生 独 立 完 成,实现 本讲教学 目标 实验 题目 6
第二篇:高中程序设计循环教案解析
循环结构程序设计教案 学科:计算机
课题:循环结构程序设计 课型:理论课 授课对象:高二、二班 课时:一课时 授课教师:陈平
一、教学目标:
1、知识目标
理解循环结构的基本思想,通过FOR语句的学习,写出简单的循环程序。
2、能力目标
培养和提高学生逻辑思维能力以及分析问题、解决问题的能力。
3、情感目标
激发学生学习热情,培养学生学习的积极性。
重点:掌握FOR---ENDFOR循环语句的格式、功能和执行过程 难点:FOR---ENDFOR循环语句的具体应用方法 关键点:解决问题的方法和思路,确定循环变量和循环体 教学手段:多媒体 教法:讲授法、讨论法
学法:听课法、练习法
二、教学过程: A.复习提问
1、程序设计中三种最基本的逻辑控制结构是什么?
2、分支结构有几种形式? B.导入新课
首先请同学们看一个图形(5个竖行排列的“*”,想想用以前学过的知识能否实现? 然后再提出问题:如果想画10行、100行、1000行“*”怎样实现?由此引出我们今天要学习的内容——FOR循环语句。
C.讲授新课(一循环结构的概念
循环结构是在给定的条件下反复执行某些相同的操作。被反复执行的操作称为循环体。
(二循环结构的实现方法
Visual FoxPro提供了三种循环语句: FOR…ENDFOR DO WHILE…ENDDO SCAN…ENDSCAN
我们今天讲授的是FOR…ENDFOR语句。
(三FOR…ENDFOR循环
1、语句格式
FOR I=A TO B [STEP C] < 语句序列> [ LOOP ] [ EXIT ] ENDFOR
2、语句功能
根据设定的循环次数,重复执行语句序列。
3、语句执行过程
执行FOR语句时,系统先把初值赋给循环控制变量,然后,判断循环控制变量是否“超过”终值,若超过则结束循环,执行ENDFOR后面的语句;若没超过,则执行循环体内的语句序列。执行到ENDFOR时,控制变量按步长增值,根据循环控制变量和终值的大小,决定是否继续执行循环体。
语句执行过程流程图:(略
★在这里插入学生活动,巧妙设置陷阱,强调语句格式: ①打印1-5这5个数 FOR N=1 TO 5 STEP-1 ? N ENDFOR
[步长应为1] ②打印5-1这5个数 FOR N=5 TO 1 ? N ENDFOR [步长应为-1,不能省略] ③打印1-5这5个数 FOR N=1 TO 5 ? “N” ENDFOR [N加上引号,就是字符串,应把引号去掉] ④打印1-5这5个数 FOR 1 TO 5 ? N ENDFOR [循环变量N必须赋值] ⑤打印1-5这5个数 FOR N=1 TO5 ? N
[FOR与ENDFOR必须成对出现,缺一不可]
4、应用实例
例1 求1—100之间的奇数和。SET TALK OFF CLEAR S=0 FOR N=1 TO 100 STEP 2 S=S+N ENDFOR ? S SET TALK ON 例2 打印一个数据表中的全部字段名。SET TALK OFF CLEAR USE 成绩 M=FCOUNT(FOR N=1 TO M ? FIELDS(N ENDFOR
USE SET TALK ON D.课堂小结(先由学生总结,再由教师补充
1、循环的概念
2、实现循环的三种语句
3、FOR…ENDFOR循环(重点是语句格式
4、FOR循环的应用 E、拓展创新(作业
教师提出问题:今天我们学习了FOR循环,像这样的问题如何解决?(由此引出循环的嵌套
请打印一张九九表,格式如下: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 9*1=9 9*2=18 9*3=27 9*4=36 •••••• 9*9=81 要求:
1、自学有关循环嵌套的知识
2、写出实现上述问题的程序
四、板书设计: §10-2 循环结构程序设计——FOR循环(略
第三篇:java程序设计教案
《Java程序设计》
授 课 人:授课班级:电子商务专业
授
课
教
案
第一章
Java语言简介
教学目的要求
了解Java的基本特点和用途 掌握如何下载Java SDK软件包 了解设置Java程序的开发环境SDK 如何运行Java程序 了解Java的概貌 主要内容
Java语言的发展历程; Java语言的特点; Java语言的开发工具;
Java应用程序和小程序; Java程序的注释方法; 写Java程序的风格规范。
重点内容
Java语言的特点; Java语言的开发工具;
Java应用程序和小程序;
难点内容
无
课时分配
1课时 教学方法
讲授法、演示法、对比法 讲授内容提要
1.1
Java语言的发展简介
1991年Sun Mircosystem 公司成立了一个Green项目开发小组,Jame Gosling 为组长; 设计Java 采用虚拟机代码(Virtual Machine Code),即.class文件,它通过解释器运行 ; 1995年5月Sun Mircosystem 公司对外正式发布Java1.0;
Java2 用途:适用于各种应用开发,尤其是网络应用,网络服务和嵌入式系统。1.2
Java语言的特点 1.简单性 2.面向对象 3.网络适用性 4.健壮性 5.安全性
6.平台无关性 7.可移植性 8.解释型 9.高性能 10.多线程 11.动态性 12.丰富的类库 13.嵌入浏览器运行
1.3
Java类库的概念 1.4
网络浏览器 1.5
Java开发工具
NetBeans: 这个集成环境可以方便地进行程序的编辑、编译、生成和运行。J2sdk :
http:// java.sun.com免费下载;Visual J++ 6.0 / 8.0: VJ++还吸收了VB集成开发环境IDE的特征,是一个强有力的Java程序开发工具。Jcreator
Eclipse(MyEclipse)等
1.6
Java程序的分类 基于控制台的应用程序;
基于浏览器运行的小程序applet。
小程序与应用程序的区别是:小程序必须依赖一个HTML文件和支持Java的网络浏览器。老师演示小程序和applet程序
应用程序举例(程序1-1): public class hello {
public static void main(String args[ ]){
System.out.println(“Hello Java!”);
} }
小程序举例(程序1-2):
import java.awt.Graphics;
// 注意该行的含义 import java.applet.Applet;public class sayhello extends Applet {
public void paint(Graphics g){
g.drawString(“Hello Java!”,35,30);
} }
小程序对应的HTML文件:
1.7
1.8 对Java程序的解释
编写Java程序的风格要求 课堂练习:
请编写一个应用程序输出你自己的学号和姓名 课外练习(作业): 下载并安装J2SDK; 设置系统环境变量 下载并安装MyEclipse 熟悉MyEclipse的开发环境
第2章
数据类型、运算符和表达式
教学目的要求
掌握字符常量和符号表示的常量的概念和应用 掌握整形、浮点型、字符型和布尔型变量的概念和应用 掌握数据的概念 理解参数传递方式
学会逻辑运算符、算术运算符和位运算符的使用方法
主要内容
常量:包括字面常量和符号表示的常量; 变量:整形、浮点型、字符型和布尔型; 数组:Java的数组属于类类型; 参数传递方式;
运算符:包括逻辑运算符、算术运算符和位运算符等;
重点内容
整形、浮点型、字符型和布尔型变量的概念和应用; 符常量和符号表示的常量的概念和应用
难点内容
参数传递方式
课时分配
2课时 教学方法
讲授法、演示法、对比法、实验验证法 讲授内容提要
2.1
常量
整形常量:采用八进制、十进制、十六进制表示,但不能采用二进制表示,和C/C++中的一样。
浮点常量:采用十进制或科学记数法表示。在缺省情况下一个浮点数是double型。布尔常量:true和false,它们不是数,不能进行算术运算。字符常量:与C/C++中的表示类似
。字符串常量:Java中字符串常量是对象。
2.2
变量
变量的命名原则是:以字母(’a’„’z’和 ’A’„’Z’)、下划线(‘_’)和‘$’符号开头的,由字母、数字(’0’„’9’)、下划线和‘$’构成的一个符号序列。
例如,a,_a,NameOfStudent,$10均是合法变量名,而-a和9a是非法变量名。关键字不能用作变量名(见表2-1)注意:Java对变量是区分大小写.2.2.1
整形类型的变量 字节(byte)型,8个位。
短整形(short),占16个位。整形(int),占32个位。
长整形(long int),占64个位。
Java中的整形最值均有符号。例如程序2-1测试最值:
public class Test_Int {
// 程序2-1 测试整形变量的最值
public static void main(String [ ] args){
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
System.out.println(Short.MAX_VALUE);System.out.println(Short.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
} }
注意: byte、short、int、long是原子类型,而Byte、Short、Integer和Long分别是四种原子类型对应的类类型。
2.2.2
字符类型变量
Java字符量的长度为16个位,表示范围是从‘u0000’ 到 ‘uffff’ 即从0 到 65535; Character是char类型对应的类类型 ; 最大值 Character.MAX_VALUE ; 最小值 Character.MIN_VALUE ; 2.2.3
浮点类型变量 分类:float和double。
Float、Double 是对应的类类型 ;
Float.MAX_VALUE、Float.MIN_VALUE是最值。Float.POSITIVE_INFINITY 和
Float.NEGATIVE_INFINITY是正/负无限大。2.2.4
布尔类型变量
boolean变量取值:true和false ;
true和false不能转换成任何数值表示,true不是1,false也不是0。
2.2.5
原子类型变量的生存空间
一个变量的生存空间是由两个大括号决定的 范围。下列写法在C/C++中是正确的,但在Java中是错误的(注意)。{
int x=1;{ int x=0;// 错误 } }
2.3
变量赋值问题
如果类中定义的原子类型变量,未给出初值,那么它们将有缺省值 :byte、short、int 和long变量的缺省值是0;char、float、double和boolean变量的缺省值分别是’u0’、0.0f、0.0d和false。
方法内定义的局部变量,应当对其赋值,否则无法通过编译。例如: // 程序2-4 class Test {
// 定义一个类
int Value;// 类中的变量未赋值,缺省就是0 } public class Test_Var{ public static void main(String [ ] args){
int x=100;
// 必须赋值,否则无法通过编译
Test obj=new Test();// 对象赋值
System.out.println(obj.Value +“
”+x);
} } 2.4
数组
Java数组是系统定义类Array 的子类; 数组的分类同C/C++:一维和多维。
2.4.1
一维数组
定义数组的格式 :int a[ ] ; 或
int[ ] a ;其值是null ;
在定义数组时不能指定大小。a仅是一个引用,代表一个数组名,但没有对应的空间。产生数组空间的方法有两种 :
在定义时直接赋值:int a[ ]={1,2,3};
通过new分配空间: int a[ ]=new int[10];public class Test_Array{
public static void main(String [ ] args){
int a[ ]={1,2,3}, b[ ];
b= a;
for(int i=0;i<3;i++)b[ i ]++;
for(int i=0;i<3;i++)System.out.println(a[i]);
} }
public class Test_Array{
public static void main(String [ ] args){
int a[ ]={1,2,3}, b[ ];
b = new int[6];
System.out.println(“b数组长度 = ” + b.length);
for(int i=0;i System.out.print(b[i]+“ ”); } } 注意:(1)获得数组元素的个数:数组名.length; (2)一个整形数组若仅仅采用new分配空间,而没有对其赋值,那么每个元素的值是0 注意:Java数组名是一个引用,当将一个数组名赋值给另一个数组时,实际上是名字的复制 2.5 Java中的参数传递方式 Java的参数传递的形式有两种:基本类型按值传递,对象类型按引用传递; 通过return语句从方法中返回时,基本类型总是以值的方式返回,而对象总是以引用方式返回。例如程序2-8 : class test{ int x;} public class Test_Paras { static test fun(test o,int y){ o.x=20; } } y=1; return o;public static void main(String [ ] args){ test obj1 , obj2;int Val = 3;obj1=new test();obj1.x=100; obj2=fun(obj1,Val); System.out.println(obj1.x+“ ”+ obj2.x+“ ”+Val); } 2.6 Java的运算符 主要包括: 算术运算符、关系运算符、逻辑运算符、位运算符和三元条件运算符。2.6.1 算术运算符 算术运算符:+、-、*、/、%、++和--,与C/C++基本相同。 %运算符不但可以对整形数据运算,而且可以对浮点型数据运算。例如:3.14 % 2.5的值约等于0.64 ; 隠式数据类型转换: 当整型与浮点型数据进行混合运算时,表达式中的数据类型会进行相应的自动转换,规则为:byte->short->int->long->float->double。 这种转换规则也适应于赋值语句,当赋值符左右两侧变量类型不一致时,只要转换过程中不丢失数据,便进行自动转换。 class number { int x;} public class relationalOperator{ public static void main(String args[ ]){ } number n1,n2; n1=new number(); n2=new number();n1.x=1; n2.x=1;if(n1.x==n2.x) System.out.println(“对象的数据成员x相等!”); if(n1==n2) System.out.println(“n1和n2是一个对象!”);else System.out.println(“n1和n2不是一个对象!”);} 2.6.2 关系运算符 关系运算符不能同其它类型的变量一同 参与运算,例如假设a,b,c是三个整形的变量,那么 a=b==c 是 正确 OR 错误? ; 关系运算符用于对象时,是判别两个引用是否代表同一个对象。而不是判断两个引用所指向的对象是否同属一个类。 2.6.3 逻辑运算符 逻辑运算符有&&、|| 和!,分别是与、或和非。运算结果是true或false; 逻辑运算有求值“短路”现象,例如程序2-11 : public class shortCut { static boolean testOne(int x){ System.out.println(x+“ < ”+1+“ ” +(x<1));return x < 1;} static boolean testTwo(int x){ System.out.println(x+“ < ”+1+“ ” +(x<2));return x < 2; } public static void main(String [ ] args){ } if(testOne(6)&& testTwo(1))System.out.println(“表达式为真”);else System.out.println(“表达式为假”); } 2.6.4 位运算符 位运算符:&、|、^、~、<<、>>,分别称为位与、或、异或、左移、右移; Java引入一个专门用于逻辑右移运算符>>>,它采用了所谓的零扩展技术,不论原值是正或负,一律在高位补0。例如: int a=-2 , b; b=a>>>30;2.6.5 三元条件运算符 语法格式:(exp)?(exp1):(exp2); Java要求:(exp1)与(exp2)必须同类型。2.6.6 “+”运算符 Java对“+”进行了重载,可以将任何类型的对象(包含原子类型)转化为String类型。例如: int x=1;char ch='A';double d=9.8;System.out.println(“Result: ”+x+ch+9.8);课堂练习: 课外练习(作业): P32 3、4、6题。 第3章 控制语句 教学目的要求 了解Java程序的结构,学习使用各种语句结构来控制程序的流程,完成程序的功能任务。 主要内容 Java的分支语句; 循环控制语句; break和continue语句; 带标号的break和continue语句。 重点内容 Java的分支语句; 循环控制语句; break和continue语句; 难点内容 循环控制语句; break和continue语句; 课时分配 3课时 教学方法 讲授法、演示法、对比法、实验验证法 讲授内容提要 3.1 分支语句 if-else语句; switch-case语句。 3.1.1 if 语句 if语句的语法格式 同C/C++; 条件表达式必须是布尔类型,例如: 下面的写法在C/C++中是合法的,但在Java中却是非法的 : int i=10;if(i) ...程序3-1描述了用applet从文本框获取数据,然后将比较的结果显示出来。 // 程序 3-1 import java.awt.*;import java.applet.*; public class compareNumbers extends Applet{ Label lab1,lab2;TextField input1,input2; int num1,num2;public void init(){ lab1=new Label(“输入第1个整数”); input1=new TextField(10); lab2=new Label(“输入第2个整数”);input2=new TextField(10); add(lab1); add(input1);add(lab2);add(input2);} public boolean action(Event e , Object o){ } if(e.target==input1 || e.target==input2){ num1=Integer.parseInt(input1.getText()); num2=Integer.parseInt(input2.getText()); if(num1 switch 语句 switch语句的语法结构 同C/C++; switch后面的表达式类型必须是字符类型或整形 ; case后面的常量不能重复 ; 程序3-3采用小程序实现将学生的百分制成绩转换为优、良,中、及格和不通过五个等级: // 程序3-3 import java.awt.*;import java.applet.*; public class scoreConvert extends Applet{ Label prompt; TextField input;int Excellent,Good,Middle,Pass,Failure;public void init(){ prompt=new Label(“输入成绩”); } public void paint(Graphics g){ g.drawString(“各等级的人数:”,25,40);g.drawString(“优秀 : ”+Excellent,25,55);g.drawString(“良好 : ”+Good,25,70);g.drawString(“中等 : ”+Middle,25,85);g.drawString(“及格 : ”+Pass,25,100);g.drawString(“不通过: ”+Failure,25,115);input=new TextField(2);add(prompt);add(input);} public boolean action(Event e , Object o){ int score=Integer.parseInt(input.getText()); showStatus(“"); input.setText(”“); switch(score/10){ case 10: case 9: Excellent++; break;case 8: Good++; break;case 7: Middle++; break;case 6: Pass++; break;case 5: case 4: case 3: case 2: case 1: case 0: Failure++; break;default: showStatus(”输入有误,重新输入!“); } repaint(); return true;} } 程序3-3需要注意的地方 在action()方法中调用的repaint()方法,是一个系统方法,它具有自动调用paint()方法的能力,从而实现对网页的刷新。3.2 循环控制语句 Java中的循环控制语句有三种,分别是:while,do-while和for语句;循环体内的语句会反复执行,直到控制布尔表达式的值变为false为止。3.2.1 while语句 while语句格式: while(Boolean-Expression) StatementS 程序示例3-4 略 3.2.2 do-while语句 do-while语句的语法格式如下: do{ Statement }while(Boolean-Expression); 程序3-5 如下: // 产生一个大于0.9的随机数为止 public class GenerateDoubleNumbers { public static void main(String args[ ]){ } double d;do{ d=Math.random();System.out.println(d); }while(d<0.9);} 3.2.3 for语句 for语句语法格式如下: for(ForInitopt;Boolean-Expression;ForUpdateopt) Statement // 程序3-6输出一个*三角形 public class printGraphics extends Applet{ public void paint(Graphics g){ int xpos,ypos=0; for(int row=6;row>=1;row--){ xpos=25;ypos+=15; } for(int column=1;column<=row;column++){ } g.drawString(”*“,xpos,ypos);xpos+=7; } } 3.3 break语句和continue语句 3.3.1 不带标号的break语句和continue语句 break语句可以跳出包含它的最内层的循环,不再执行剩余的语句; continue语句停止执行当前的循环,回到循环处,开始执行下一轮的循环。这些特性和C/C++的功能一样。for(int i=1;i<10;i++) { if(i%3==0) continue; else System.out.println(”i = “+i); } for(int i=1;i<10;i++) { if(i%3==0) break; else System.out.println(”i = “+i); } 课堂练习: 1、仔细分析下面程序,写出程序的最终运行结果。public class s_switch { public static void main(String args[]) { int ch=8; int r=10; switch(ch-1){ case 7: r=r+3; case 8: r=r+5; case 9: r=r+6;break; default:; } System.out.println(”r=“+r); } } 2、随机产生26个英文字母a~z,直到大于u为止。用while和for语句实现。 课外练习(作业): P44 1—4 第4章 Java的类 教学目的要求 理解面向对象编程的基本概念 了解类的封装方法 如何创建类和对象 了解成员变量和成员方法的特性 学习使用OOP方式进行程序设计 深刻理解类的继承性和多态性 主要内容 类的定义和使用; 方法的定义和使用; 实例变量和局部变量; 构造方法; 方法的覆盖和重载; 关键字this的用法; 继承的概念和应用; 组合与继承; 抽象方法和抽象类; 对象类型转换; 访问权限限制符:public、private、protected。 重点内容 类的定义和使用; 方法的定义和使用; 构造方法; 方法的覆盖和重载; 关键字this的用法; 继承的概念和应用; 组合与继承; 抽象方法和抽象类; 对象类型转换; 难点内容 构造方法; 方法的覆盖和重载; 继承的概念和应用; 组合与继承; 抽象方法和抽象类 课时分配 8课时 教学方法 讲授法、演示法、对比法、实验验证法、学生讨论法 讲授内容提要 4.1 类与对象 在Java程序中,除原子类型的变量以外都是对象,连Java程序本身也不例外。 类是面向对象程序设计的基础,OO始终是围绕着对象的封装性、继承性和多态性展开讨论的。 4.1.1 类与对象的区别 类是一个抽象的概念,对象是一个具体的概念。 类是在一组对象的基础上,通过抽象和概括获得的一个概念。 对象是由数据和方法紧密结合的一个封装体,具有信息隐藏的能力。 对象可以通过方法(函数)与其它对象进行通信,但并不知道这些方法的实现细节。4.1.2 Java和C编程思想的区别 C是结构化的编程语言,以函数为编程单元,程序员把注意力集中在编写函数上。Java是面向对象的编程语言,以类为编程单元,程序员的精力集中在对类的设计上。 对象将实例变量(instance variable)和对数据的操作(即方法)约束在一起,类似一个独立的程序,易于扩充,易于维护,代码可复用。 4.1.3 如何定义类 类是对象的模板,它定义了对象的结构和操作数据的方法。public class Sayhello extends Applet { public void paint(Graphics g){ int xPos=35; int yPos=30; g.drawString(”Hello Java!“,xPos,yPos); } } 定义类的通用格式如下: class className extends superClassName{ type instance-vairbale1;return-type methodName1(parameter-list){ method-body;} } public class Hello { public static void main(String args[ ]){ System.out.println(”Hello Java!“); } } 系统类Object是整个类层次结构中的根。 如果我们要定义Object的子类,可以不指明extends Object,默认情况下一个类就是Object类的子类。 类内定义的变量称为实例变量,函数称为方法; Java将类的定义和类的实现放在一起,便于系统维护。例如: class point { // Object类的子类 int x , y; void init(int a, int b){ int i=0; x=a; y=b; } } 4.1.4 对象和引用 对象是客观存在的变量,对象的引用就是对象的名字,例如:Point p1;创建对象:p1=new Point(); 一个对象可以有多个别名; p2=p1;将一个变量设置为null,表明该变量不代表任何对象 : p1 = null; 每个对象都有自己的变量,改变一个对象的实例变量并不影响到另外一个对象。例如: class Point { // 程序4-1 int x , y; void init(int a, int b){ x=a; y=b; } } public class TwoPoint{ public static void main(String [ ]args){ Point p1= new Point(), p2= new Point(); p1.x=10;p2.x=30;p1.y=20;p2.y=40;System.out.println(”x = “+ p1.x +” y= “+p1.y);System.out.println(”x = “+ p2.x +” y= “+p2.y); } } 4.2 方法 方法是一个功能模块,类似C中的函数; 方法和实例变量都必须定义在类内,方法是类的功能接口 ; 定义方法的原则:方法应当只执行单一的任务,并且方法名能有效地表达该任务; 方法的返回值类型、方法名和参数表共同称之为方法的特征。调用方法的格式:引用.方法名(参数表);例如: Point p1=new point(),p2=new point();Point p3=p2;p1.init(10,20);//仅对p1对象的x和y进行赋值 p2.init(30,40);//仅对p2对象的x和y进行赋值 对象是客观存在的变量,对象的引用就是对象的名字,例如:point p1;创建对象:p1=new point(); 一个对象可以有多个别名; p2=p1;将一个变量设置为null,表明该变量不代表任何对象 : p1 = null; 每个对象都有自己的变量,改变一个对象的实例变量并不影响到另外一个对象。 4.3 实例变量和局部变量 class Loc { // 程序4-2 int x=1;// 实例变量 void printLocVar(){ int x=25;// 局部变量 } System.out.println(”n x is :“+x); ++x; System.out.println(” x is :“+x); void printInstanceVar(){ System.out.println(”n x is :“+x); x*=10; System.out.println(x is :”+x);} } public class TestInstanceVar { // 程序的主类 public static void main(String args[ ]){ System.out.println(“ x is :”+x); obj.printLocVar(); obj.printInstanceVar(); System.out.println(“ x is :”+x); loc obj=new Loc(); int x=5; // 局部变量 x } } 4.3 实例变量和局部变量 Java中的变量分为两种:类内定义的实例变量,方法中定义的局部变量。 在同一个作用域内,不允许定义两个同名的局部变量。 局部变量可以掩盖实例变量。 实例变量属于对象,它描述了对象的属性,随着对象的存在而存在; 局部变量是随着方法的调用而存在,一旦方法调用结束,局部变量也就消亡了。4.4 构造方法 构造方法的功能是在创建对象时初始化对象的实例变量; 讨论:构造方法的特点: 无返回值,无void 方法名与类名相同 仅在创建对象时调用 class point { // 程序4-3 } public class createPoint { public static void main(String args[ ]){ point p= new point(10,20); System.out.println(p.x +“ ”+p.y);} int x, y;point(int a, int b){ } x=a;y=b; } 如果类中没有定义构造方法,编译器会自动创建一个缺省的、不带参数的构造方法。构造方法是在对象创建之后,new操作完成前被调用的。 4.5 方法重载 方法重载是在一个类中定义二个或多个同名的方法,但方法的参数个数或类型不完全相同;例如: class point { int x, y;point(int a, int b){ x=a;y=b;} point(){ x=-1;y=-1;} point(double a, int b){ x=(double)a;y=b;} } 方法重载的一个误区:是靠返回值区别重载,即定义多个方法,它们的名称和形参类型完全相同,但返回值不同,这是不允许的; 4.6 关键字this this指代对象,是对当前对象的一个引用。例如: class IntVector { // 程序4-6 int v[ ]; boolean equals(IntVector other){ if(this == other)return true; return false;} } class testIntVector { public static void main(String args[ ]){ IntVector t1=new IntVector(),t3=new IntVector(),t2=t1; System.out.println(t1.equals(t2)); System.out.println(t3.equals(t2)); } } Java中的级连调用,仍是指代当前对象的this。例如:// 程序4-7 import java.awt.*;import java.applet.*; class time{ private int hour, min, sec; time(){ setHour(0);setMin(0); setSec(0);} time setHour(int h){ hour=((h>=0 && h<24)? h: 0);return this;} time setMin(int m){ min=((m>=0 && m<60)? m: 0); return this;} time setSec(int s){ sec=((s>=0 && s<60)? s: 0); return this;} String tostring(){ return hour+“:”+min+“:”+sec;} public class timeToString extends Applet{ private time t; public void init(){ } t=new time();} public void paint(Graphics g){ t.setHour(18).setMin(30).setSec(20); } g.drawString(“ time:”+t.tostring(),25,45);} 在构造方法内部使用this,它用于指代另外一个构造方法,但不能指代非构造方法。例如: class point { } 4.7 继承 继承是软件重用的一种形式,可以提高系统的性能; 继承语法: class className extends superClassName{ 各实例变量和方法的定义 } 例如: class point{ int x, y; point(int x, int y){ this.x=x;this.y=y;} point(){ this.x=0; this.y=0;} } class circle extends point{ int radius; circle(int r, int x, int y){ radius=r; this.x=x; this.y=y; } } Java不支持多继承,但支持多接口; 子类的对象也是其超类的对象,反之未必; 继承具有传递性: B继承于A,C又继承于B,则C也继承了A中的实例变量和方法。 关键字super 构造方法是一种特殊的方法,子类不能继承超类的构造方法,但子类构造方法可以通过super调用超类的构造方法。int x, y;point(){ this(-1,-1);} point(int a, int b){ x=a;y=b;} 当创建子类对象时,首先执行超类构造方法,然后执行子类的构造方法。例如: class point{ // 程序4-8 int x, y; point(int x, int y){ } } class circle extends point{ int radius; circle(int r, int x, int y){ super(x, y); radius=r; System.out.println(“子类构造函数被调用!”); this.x=x;this.y=y; System.out.println(“父类构造函数被调用!”); } } public class testInherence { public static void main(String args[ ]){ circle c1; c1=new circle(1,1,1); } } 再次讨论构造方法 若父类没有定义构造方法,那么对父类数据的初始化将采用系统缺省的构造方法;例如: class point{ int x, y; } class circle extends point{ int radius; circle(int r, int x, int y){ this.x=x; this.y=y; radius=r; } } 若父类定义有缺省构造方法,那么子类可根据自己的需要设置自己的构造方法。例如: class point{ int x, y; point(){ this(0,0); } point(int x, int y){ this.x=x;this.y=y; } } class circle extends point{ // 注意子类的构造函数 int radius; circle(int r, int x, int y){ radius=r;} } 若父类定义的构造方法都是有参的,那么子类构造方法必须通过super调用父类构造方法,class point{ private int x, y; point(int x, int y){ this.x=x; this.y=y; } } class circle extends point{ int radius; circle(int r, int x, int y){ super(x, y); radius=r; } } 4.8 方法的覆盖 方法的覆盖发生在父类和子类之间,若子类中定义的某个方法的特征,与父类中定义的某个方法的特征完全一样,那么就说子类中的这个方法覆盖了父类对应的那个方法。 4.8.1 覆盖与重载的区别 重载可以出现在一个类中,也可以出现在父类与子类的继承关系中,并且重载方法的特征一定不完全相同。 覆盖特点:子类中的方法特征与父类定义的对应方法的特征完全一样。例如: // 程序4-9 class point{ int x, y; point(){ this(0,0);} point(int x, int y){ this.x=x;this.y=y; } double area(){ return 0;} } class circle extends point{ int radius; circle(int r, int x, int y){super(x, y); radius=r; } double area(){ return Math.PI*radius*radius;} } public class testOverWrite { public static void main(String args[ ]){ } circle c1; c1=new circle(1,1,1); System.out.println(c1.area());} 4.8.2 方法的动态调用 Java的所有对象运行时都有一个类型标识(RTTI:Run-Time Type Identification),该标识记录了每个对象所属于的类。Java用此标识在运行时选择正确的方法。例如: // 程序4-11 class point{ int x, y; point(){ this(0,0);} point(int x, int y){ this.x=x;this.y=y; } double area(){ return 0;} } class circle extends point{ int radius; circle(int r, int x, int y){ super(x, y); radius=r;} double area(){ // 覆盖了父类的area方法 return Math.PI*radius*radius; } } public class dynamicalCall { public static void main(String args[ ]){ point p[ ]={new point(2,2), new circle(1,1,1)}; for(int i=0;i System.out.print(“类名: ”+ } p[i].getClass().getName());System.out.print(“父类:”+ p[i].getClass().getSuperclass());System.out.println(“ 面积: ”+ } p[i].area());} 子类对象调用方法时: (1)子类检查是否具有同名和同参数类型的方法,若有则调用该方法,否则继续执行。 (2)到父类中寻找同名和同参数类型的方法,若有则调用该方法。若找不到,将产生编译错误。 对象决定自己到底该调用哪个方法,取决于该对象在继承链中的位置。 4.9 多态性不适合继承链中的实例变量 引用.方法:根据多态性调用; 引用.实例变量:根据引用的类型调用。即:多态性仅仅适用于方法的调用,而不适合实例变量。例如: class Base{ // 程序4-12 int x=1;void print(){ System.out.println(“当前类为 ”+ } this.getClass().getName());System.out.println(“对象的x= ”+this.x); } class Derived extends Base{ } int x=2;void print(){ System.out.println(“当前类为 ”+ } this.getClass().getName());System.out.println(“对象的x= ”+this.x); public class confusions{ public static void main(String [ ] args){ Base obj=new Derived(); } } obj.print();System.out.println(“对象的x= ”+obj.x); 4.10 finalize Java的垃圾回收器具有自动回收垃圾的能力。 垃圾回收器是一个优先级比较低的线程,在系统空闲时运行。 在对象被回收之前,有时需要执行一些特殊的操作,例如保存文件、清除屏幕等,这时就要用Java的finalize方法。例如: class point{ // 程序4-13 int x, y; point(int a, int b){ } x=a;y=b;System.out.println(“point constructor:”+getString()); public void finalize(){ // 注意该方法 System.out.println(“point finalizer:”+getString()); } String getString(){ return “x=”+x+“ y=”+y; } } class circle extends point{ int radius; circle(int r, int a, int b){ super(a,b);radius=r;System.out.println(“circle constructor:”+getString()); } public void finalize(){ System.out.println(“circle finalizer:”+getString()); } String getString(){ return super.getString()+“ radius=”+radius; } } public class testFinalize { public static void main(String args[ ]){ point c1,c2;c1=new circle(1,1,1);c2=new circle(2,2,2);c1=null;c2=null;System.gc(); } } 4.11 static static修饰变量(与C中的不同); static修饰方法(与C中的不同); 4.11.1 static变量 static变量是指这样的成员变量:不管在程序运行中生成多少个该类的对象,它们都共享该变量。 即使没有创建对象,该变量仍然存在。因此,static变量又称为类变量。定义格式为:static type variableName; static变量和一般的实例变量不同,在构造方法中不能对它进行初始化。例如: class point{ // 程序4-14 static int count;int x, y;static{ // 静态初始化块 } } count=0;System.out.println(“static variable is initialized!”); point(int a, int b){ count++;x=a; y=b; System.out.println(“Call point constructor!”);} public class testStaticVariable { public static void main(String args[ ]){ point c1=new point(0,0); System.out.println(“There are ”+ } 4.11.2 static方法 (可举例说明Math类的PI和sqrt等,为什么要用静态变量。)static方法是类中的成员方法,它属于整个类,即使不创建任何对象,也可使用静态方法。调用静态方法格式:类名.方法名(参数); 在子类中不能覆盖父类中定义的静态方法。 静态方法中只能出现静态变量和其它静态方法。并且还不能使用this和super。例如: class point{ // 程序4-15 static int count; int x, y; static{ count=0;System.out.println(“static variable is initialized!”); // 定义静态变量 } point.count +“ points”); } point(int a, int b){ count++;x=a;y=b; System.out.println(“Call point constructor!”); } static int getCount(){ // 静态方法 return count; } } public class testStaticMethod { public static void main(String args[ ]){ } point c1=new point(0,0);point c2=new point(1,1); System.out.println(“There are ”+ point.getCount()+“ points”);} 4.12 关键字final 在实例变量、局部变量和方法的形参定义之前加上final,那么这个变量值只能被引用,而不能修改。 final修饰的局部变量和实例变量必须给出初值,因为它修饰的变量代表一个常量。例如: class Base{ // 程序4-16 final int x=1; // 形式1:修饰实例变量 } public class finalVariables{ public static void main(String [ ] args){ final int var=100;// 形式3:修饰局部变量 } Base obj=new Base(); obj.print(var);void print(final int y){ // 形式2:修饰参数 // y=0; // 错误 } System.out.println(x+y); } 在方法定义前加上final,该方法就不能被子类覆盖,成为终极方法 ; 包含终极方法的类仍然可以被子类继承,子类虽然不能覆盖父类中的终极方法,但可以重载该方法。例如: class Base{ final int x=1; } class Derived extends Base { void print(){ // 重载了父类中的print方法 } System.out.println(x);final void print(int y){ } // 父类中的final方法 System.out.println(x+y);} 4.12.3 final类 在一个类定义前加上final,意味着这个类就不能被其它类继承,成为终极类。 系统类基本上都是final类,如String类。 将class定义为final是为了杜绝继承,类中的方法自然都变成了终极方法。例如: final class Base{ // 声明为final类 final int x=1; void print(final int y){ System.out.println(x+y); } } // 错误:不能继承final 修饰的Base类 class Derived extends Base { } 4.13 组合与继承 面向对象中的软件重用表现为两种形式:继承和对象组合。 设计这类程序的关键是构造方法:子类构造方法调用父类构造、成员对象的初始化。class date{ // 程序4-17 int year, mon,day; date(int y, int m, int d){ year=y; mon=(m>0 && m<13)?m:1;day=checkday(d); } int checkday(int d){ int daydisp[ ]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(d>0 && d<=daydisp[mon]) return d; if(mon==2 && d==29 &&(year%400==0 || year%4==0&& year%100!=0)) return d;return 1; } String tostring(){ return year+“/”+mon+“/”+day;} } class employee{ // 雇员类 long id;date birthday; 例如: employee(long no, int year, int mon, int day){ id=no; // 设置组合对象 } String tostring(){ return id+“ , ”+birthday.tostring();} birthday=new date(year,mon,day);} class manager extends employee { // 经理类 double basePay; String tostring(){ return basePay+“ , ”+super.tostring();} } public class compositionAndInherence { } public static void main(String [ ] args){ manager boss; } boss=new manager(1001,1971,11,5);System.out.println(boss.tostring()); manager(long no, int y, int m, int d){ super(no,y,m,d); // 调用父类构造函数 } basePay=1000; 4.14 抽象类和抽象方法 抽象方法:仅有方法特征,但没有代码; 抽象类:包含抽象方法的类。 抽象类的作用:提供一种适当的超类,子类通过继承实现父类中的抽象方法。 抽象类不能用final修饰。 抽象类体现了多态性,通过继承可以从抽象类派生出具有相似操作的子类。例如: abstract instrument abstract void play()继承 wind void play()继承 继承 stringed void play()percussion void play()继承 继承 woodwind void play()brass void play() // 程序4-18 abstract class instrument{ abstract void play();} // wind不是抽象类 class wind extends instrument{ void play(){ System.out.println(“wind play!”);} } // percussion也不是抽象类 class percussion extends instrument{ void play(){ System.out.println(“percussion play!”);} } // stringed也不是抽象类 class stringed extends instrument{ void play(){ System.out.println(“stringed play!”);} } class woodWind extends wind{ // 覆盖父类中的play方法 void play(){System.out.println(“woodWind play!”);} } class brass extends wind{ // 覆盖了父类中的play方法 void play(){ System.out.println(“brass play!”);} } public class music { static void tuneAll(instrument e[ ]){ } for(int i=0;i e[i].play(); // 抽象方法 public static void main(String [ ] args){ instrument orchestra[ ] = new instrument[5];int i=0; orchestra[i++]=new wind();orchestra[i++]=new percussion();orchestra[i++]=new stringed();orchestra[i++]=new woodWind();orchestra[i++]=new brass();tuneAll(orchestra); } } 程序运行结果: wind play!percussion play!stringed play!woodWind play!brass play! 4.15 对象的类型转换 4.15.1 向上类型转换 从子类向父类转换,在继承图中是向上移动,通常称为向上类型转换。 类型向上转换是安全的,因为这是从特殊类型到通用类型的转换。 进行向上类型转换时,出现的唯一问题是可能丢失子类中定义的方法和变量。例如: // 程序4-19 class point{ int x, y; point(int x, int y){ this.x=x;this.y=y;} int getX(){ return x;} } class circle extends point{ int radius;circle(int r, int x, int y){ super(x, y);radius=r;} double area(){ return Math.PI*radius*radius; } } public class testUpCasting { } public static void main(String [ ] args){ circle c=new circle(1,1,1);point p=c;// 注意:p和c的类型不同 } System.out.println(p.getX());4.15.2 向下类型转换 从父类向子类转换,在继承图中是向下移动,称为向下类型转换。 类型向下转换是不安全的,因为这是从一般类型到特殊类型的转换。例如: public static void main(String [ ] args){ } 4.16 访问权限限制 Java提供的访问权限修饰符有四个,即public、private、protected和友元; 修饰符要置于每个类成员(实例变量和成员方法)的定义之前,且仅能控制它所修饰的那个成员。 4.16.1 友员 缺省修饰符的情况就是友员。友员修饰符意味着同一个目录(包)中的所有类都可以访问这种类型的成员。 friendly不属于Java关键字,是C++的一个关键字。 例如: public class Base{ // 该类位于Base.java文件中 int friend_data=1;// 友员数据成员 } // 该类位于Derived.java文件中 public class Derived extends Base{ Base p=new Base(); // 访问Base类中的friend_data } 4.16.2 public 成员 不管两个类是否位于同一个目录中,一个类总可以访问另一个类的public成员。 public还可以用于修饰主类,文件名必须与主类名一致。除此之外,其它3个修饰符都不能用于修饰类,只能修饰成员。例如: public class Base{ public int friend_data=1;// public成员 } void dataUse(){ System.out.println(“data=”+p.friend_data); } point p=new point(1,1);circle c;c=p; //注意:此处编译时出错 c=(circle)p;//注意:此处运行时出错 System.out.println(c.area()); public class Derived extends Base{ public Base p=new Base(); public void dataUse(){ } 4.16.3 private成员 private成员的特性:除了其所在类能够访问该成员以外,其它类都不能访问它。 在多人合作开发一个系统的过程中,private可以让你自由使用自己定义的成员,无须担心与其他人写的类相冲突。例如: // 程序4-20 class Base{ private Base(){ } public class testPrivate { public static void main(String args[ ]){ // Base p=new Base(); // 编译有错 } } Base p = Base.makeBase();} // 注意 } System.out.println(“data=”+p.friend_data);} static Base makeBase(){ return new Base(); 4.16.4 protected成员 protected与继承有关,这种类型的成员可以被子类访问。 同一个包内的非子类,也可以访问这种类型的成员。即:protected天生就具有友元权限,例如: // 程序4-21 class Base{ // 该类位于Base.java文件中 int friend_data=1; // 友元成员 public int public_data=2; // public成员 private int private_data=3;// private成员 protected int protected_data=4;// protected成员 } class Derived extends Base{ // Derived.java文件 Base a=new Base();void dataUse(){ } System.out.println(a.friend_data);System.out.println(a.public_data);// System.out.println(a.private_data);System.out.println(a.protected_data);} // 将主类存放在testData.java文件中 public class testData { public static void main(String args[ ]){ } Derived d=new Derived();d.dataUse(); } 访问权限总结 课堂练习: 1、定义一个Student类: 该类的功能有:可以保存、修改和获取学生的姓名、学号等。可以设置学生的英语成绩、数学成绩、Java成绩,并能计算平均分、最高分和最低分。 2、以下代码定义了一个类,请指出其中三条不合法的代码行(行号参见注释)。 class Test22{ //1 //7 } static float fac1(boolean f){ return f?u:v;} //8 float fac2(boolean f){ return f?u:v;} //9 float u; //2 static float v; //3 static void setUV(boolean f){ //4 u=fac1(f); //5 v=fac2(!f); //6 } 课外练习(作业): P87 1、3、4、6 第5章 接口和包 教学目的要求 掌握接口的定义和使用 了解接口与抽象类的异同点 掌握包的定义和使用 主要内容 接口的定义和使用 包的定义和使用 重点内容 接口的定义和使用 包的定义和使用 难点内容 无 1课时 课时分配 教学方法 讲授法、演示法 讲授内容提要 5.1 接口 引入接口的原因:在程序设计中经常遇到这样一个问题:有些类互不相关,但却具有相似的方法。并且这些方法在各个类中的实现互不相同。我们不能为这些类定义一个共同的父类,但又希望在程序中体现出它们共同的接口。 5.1.1 接口的定义和应用 接口是一系列常量和空方法的集合,它提供了多个类共同的方法,但不限制每个类如何实现这些方法。 Java允许一个类同时实现多个接口,相当于实现多继承的功能。声明一个接口的语法格式: [public] interface interfaceName [extends super-interface-List]{ type ConstantName=value; type MethodName(Parameter lists);} 例如: interface Sortable{ // 定义一个接口 int Compare(Sortable s);} 接口中不能声明任何变量和构造方法。 如果一个类实现多个接口,应该在接口名之间用逗号隔开。 当一个类实现接口时,必须实现接口中给出的空方法,若实现接口的类是一个抽象类,可以把实现接口的任务交给子类去实现。例如: // 程序5-1 interface Sortable{ // 定义一个接口 int Compare(Sortable s);} class Sort{ // 定义一个排序类,仅有一个静态的方法 public static void SelectSort(Sortable a[ ]){ int i, j, k;Sortable temp; for(i=0;i // 选择排序 k=i; for(j=i+1;j if(a[k].Compare(a[j])<0)k=j; temp=a[i];a[i]=a[k];a[k]=temp;} } } class Student implements Sortable{ // 定义一个学生类 private int score; Student(int x){score=x;} // 实现接口Sortable中的方法 public int Compare(Sortable s){ Student st=(Student)s; // 类型强制转换 return score-st.score;} public String toString(){ return “score=”+score;} } class Rectangle implements Sortable{ // 矩形类也实现了接口 } public class interfaceTest { public static void main(String args[ ]){ Student stud[ ]=new Student[20];int i;private int length,width; Rectangle(int x,int y){ length=x;width=y;} int area(){return length*width;} public int Compare(Sortable s){ // 实现接口 } public String toString(){ return “area=”+area();} Rectangle rec=(Rectangle)s; // 类型强制转换 return area()-rec.area(); for(i=0;i stud[i]=new Student((int)(Math.random()*100));Sort.SelectSort(stud); // 排序 for(i=0;i System.out.println(stud[i].toString());Rectangle R[ ]=new Rectangle[10];for(i=0;i R[i]=newRectangle((int)(Math.random()*10),(int)(Math.random()*10));Sort.SelectSort(R); // 排序 for(i=0;i System.out.println(R[i].toString()); } } 接口中定义的变量实际上是常量,必须给出它们的初始值,实现接口的类可以自由引用这些常量。例如: // 程序5-2的部分 interface constant { int int int int EXCELLENT=5; GOOD=4; PASS=3; FAIL=2;} 在类中实现接口中方法时,方法的特征必须和接口中声明的方法特征保持一致; 实现方法时必须在方法前加上public; 若一个类没有对接口中的方法具体实现,那么必须将该类声明为abstract类。例如: interface inter { // 接口 } void methodA(); abstract class Derived1 implements inter { // 此处不需要写出methodA()的原型 } class Derived2 extends Derived1{ public void methodA(){ // 实现方法 } } System.out.println(“Hi,methodA”);5.1.2 接口和抽象类的异同点 接口和抽象类的相同点: (1)都有空的方法,都必须在子类中实现这些方法。 (2)都不能用new关键字来创建这两种类型的对象。 (3)都可以具有继承关系。 (4)接口和类一样可以具有public属性。接口和抽象类的不同点: (1)在抽象类中,空的方法必须加abstract关键字,而在接口中不需要。 (2)在抽象类中,除空的方法外,可以定义实例变量和非空的方法,而在接口中,只能定义常量和空的方法。 (3)接口允许多继承,类仅支持单继承。 5.2 包 在Java中可以将自己写的类,按一定的方法归属于不同的子目录中(包)。 在缺省情况下,Java将所有的类归属一个缺省包中。在不同的包中可以有同名的类存在。 Java中的包与C++中的名字空间相似。 5.2.1 package语句 package语句告诉编译器当前类属于哪个包。如果没有package语句,类就存放在无名的缺省包中(即当前目录中)。 引进包的概念主要是为了名字冲突。 格式: package pkgl[.pkg2[.pkg3]]; 5.2.2 import语句 import语句位于package语句之后,类的定义之前;格式:import package1[.package2].(class-name | *); 采用*号不影响程序的运行性能,但会影响编译速度。指明具体类比引入整个包更为合理。5.2.3 包应用举例 package Base; // 将该类存放在d:myjavaBase包中 public class Base { int friend_data=1;// 友元成员 public int public_data=2;// public成员 private int private_data=3;// private成员 protected int protected_data=4;// protected成员 } package Derived; // 将Base类存放在Derived包中 import Base.*; // 需要使用Base包中的类 public class Derived extends Base{ Base a=new Base(); // 为了让testData类能调用该方法,修改为public // 不能访问 public void dataUse(){ // System.out.println(a.friend_data); System.out.println(a.public_data); // System.out.println(a.private_data); // 不能访问 // System.out.println(a.protected_data);// 不能访问 } } // testData.java文件的内容如下: import Derived.*; //需要使用Derived包中的类 // 该类位于工作目录,不需要package语句 public class testData { public static void main(String args[ ]){ } } Derived d=new Derived(); d.dataUse(); 课堂练习: 课外练习(作业): P108 3~6 第6章 字符串处理 教学目的要求 掌握字符串的分类; 掌握内容不可改变的字符串类String; 掌握字符串常量; 掌握内容可以改变的字符串类StringBuffer; 掌握字符串应用。 主要内容 字符串的分类; 内容不可改变的字符串类String; 字符串常量; 内容可以改变的字符串类StringBuffer; 字符串应用。 重点内容 掌握内容不可改变的字符串类String; 掌握内容可以改变的字符串类StringBuffer; 掌握字符串应用。 难点内容 String和StringBuffer的区别和联系 课时分配 2课时 教学方法 讲授法、演示法、对比法、实验验证法 讲授内容提要 6.1 字符串的分类 java.lang包中定义了 String和StringBuffer两个类; 在运行中值不会改变的字符串,用String类存储;值会改变的字符串用StringBuffer类来存储。 两个类都有final修饰,这样可以优化字符串的操作。 6.2 String类 String类的定义原型 : public final class java.lang.String extends java.lang.Object { … } 6.2.1 字符串常量 字符串常量属于String类型;相同的字符串常量属于同一个对象,占用同一块空间,例如: // 程序6-1 public class TestConstString{ public static void main(String args[ ]){ } } String str1=“Hello”, str2=“Hello”; System.out.println(str1==str2);System.out.println(“Java”==“Java”);6.2.2 创建String类对象 用new运算符,并调用构造函数创建这种类型的对象,常见构造函数如下: 1.public String()采用该构造函数创建一个不含字符的空对象。例如: String str =new String(); 2.public String(char value[ ]) 将字符数组的内容转换为字符串,并赋予新建的对象。例如: char a[ ]={'J','a','v','a'};String str=new String(a);3.public String(char value[ ], int offset, int count) 例如:char a[ ]={'J','a','v','a'}; String str=new String(a,1,2); // 字符串str的内容是“av” 4.public String(String value) 采用value对象的值构造一个新的string对象。 例如: String str1=“Java”;String str2=new String(“Java”); System.out.println(str2); System.out.println(str1==str2); 5.public String(StringBuffer Buffer)注意采用字符串常量初始化一个String引用的问题。例如: String str = “abc”;相当于: char data[ ] = {'a', 'b', 'c'};String str = new String(data);应用举例,注意程序6-2的输出结果: public class TestString{ // 程序6-2 public static void main(String args[ ]){ String s1=“Java”, s2=“Java”;String s3=new String(s1); System.out.println(“ s1==s2 is ”+(s1==s2));System.out.println(“ s1==s3 is ”+(s1==s3));s1=“ABC”;s2=“DEFG”;System.out.println(“ s1==s2 is ”+(s1==s2));s1=s2; System.out.println(“ s1==s2 is ”+(s1==s2));} } 6.2.3 String类常用方法 1.public int length(): 求串长。例如: String str=“Java” ; System.out.println(str.length());2.public char charAt(int index) 提取指定位置上的字符。 3.public int compareTo(String anotherString) 对字符串内容按字典序进行大小比较。例如: public class SortStringArrary{ // 程序6-3 public static void main(String args[ ]){ String str,s[ ]={“Computer”,“CHINA”,“world”,“U.S.A”}; int i,j,k; System.out.print(“排序之前:”);for(i=0;i System.out.print(“t”+s[i]);for(i=0;i for(k=i,j=i+1;j if(s[k].compareTo(s[j])>0) k=j; str=s[i]; s[i]=s[k]; s[k]=str;// 注意该行的含义 } System.out.print(“n排序之后:”);for(i=0;i System.out.print(“t”+s[i]); } } 4.char[ ] toCharArray() 将String对象转换到一个字符数组中,例如: String s=“Hello,Java!”; char a[ ]; a=s.toCharArray(); for(int i=6;i System.out.print(a[i]);5.public boolean equals(String anString) 比较两个字符串对象的内容是否相等。 6.public boolean equalsIgnoreCase(String anotherString) 以忽略大小写方式,比较两个字符串对象的内容是否相等。 注意:equals()方法与“==” 之间的区别。例如: public class ConfuseQuestion{ // 程序6-5 public static void main(String args[ ]){ String s1=“java”; String s2=new String(s1); String s3=s2; } } System.out.println(s1.equals(s2));System.out.println(s2.equals(s3));System.out.println(s2==s3);System.out.println(s2.equals(s3));7.public int indexOf(int ch / String str) 在字符串中搜索字符或子串,返回字符或子串在String对象中从左边起首次出现的位置。如果没有出现,返回-1。 8.public String substring(int begin, int end) 提取string对象中从begin开始,到end-1结束的子串,返回提取的子串。 9.public String concat(String str)将str对象接到调用对象的后面,返回新串。例如: String s1=“Hello ” , s2=“Java” , s3;s3=s1.concat(s2); System.out.println(s3);注意:如果参数str为空(null),则concat方法不创建新串,而仅仅返回当前串,10.public String replace(char oldChar, char newChar) 将String对象中所有的oldChar字符替换为newChar,返回替换后的新串。例如: String path=“d:/myjava/documents”; System.out.println(path.replace('/' , '')); public String toString() 返回当前字符串对象本身。 12.public static String valueOf(各种类型 f) 将各种数据类型转换成一个相应的字符串表示,该方法是一个static方法。 程序6-6演示了valueOf()方法的应用。 程序6-7自学。 public class TestValueOf{ // 程序6-6 public static void main(String args[ ]){ char a[ ]={'A','B','C','D','E','F'}; int i=123456;float f=3.14159f;boolean b=true;Object o=null;System.out.println(String.valueOf(a));System.out.println(String.valueOf(a,2,3));System.out.println(String.valueOf(i));System.out.println(String.valueOf(f));System.out.println(String.valueOf(b)); System.out.println(String.valueOf(o));} } 6.2.4 Java应用程序的命令行参数 应用程序可以通过main方法的String数组,访问由解释器传递的命令行参数。例如: public class ShowMainArguments{ //程序6-8 public static void main(String args[ ]){ for(int i = 0;i < args.length;i++) System.out.println(args[ i ]); } } 6.3 StringBuffer类 StringBuffer类对象是一个内容可以改变的字符串。可以减少由于少量字符的插人而引起的空间分配问题。 StringBuffer类的原型: public final class java.lang.StringBuffer extends java.lang.Object { … } StringBuffer类对象有一块缓冲区,字符串被存放在缓冲区中,缓冲区的大小可以随程序的需要进行调整。缓冲区的大小称为对象的容量。 当修改对象的内容时,只要StringBuffer对象包含的字符个数没有超出容量,就不会分配新的空间,而直接在原空间内进行修改。若字符的个数超出了容量,该对象会自动调整其容量,从而适应新的存储。 6.3.1 创建StringBuffer类对象 StringBuffer类的构造函数有三种方式: 1.public StringBuffer()创建一个内容为空的StringBuffer对象,容量为16。 例如:StringBuffer s=new StringBuffer();2.public StringBuffer(int length)初始内容为空,容量为length指定的大小。注意:length应大于等于0,不能为负数,否则会产生异常。例如: StringBuffer s2=new StringBuffer(2);3.public StringBuffer(String str) 初始内容和参数str的内容相同,容量为参数str的长度加上16。例如: String s1=“Java”; StringBuffer s2=new StringBuffer(s1);则s2的容量是20,内容是“Java”。 6.3.2 StringBuffer类常用方法 1.public int length() 返回字符串的长度 2.public int capacity() 返回缓冲区大小 3.public void setLength(int newLength) 指定对象的长度,将对象的内容进行裁减。如果参数小于对象的长度,则将对象截断;如果参数大于等于对象的长度,则填充空字符('u0')扩充新增加的部分。 4.public void ensureCapacity(int NewCapacity) 设定对象的缓冲区的大小,若参数 小于对象的容量,则新的设置将不起作用,也就是说容量只能扩大而不能缩小。 程序6-9演示了这几个方法的具体应用。 public class TestCapacity{ // 程序6-9 public static void main(String args[ ]){ String s=“Java”; StringBuffer str=new StringBuffer(s);System.out.println(“Length=”+str.length());System.out.println(“Capacity=”+str.capacity());str.setLength(8); // 设置长度为8 str.ensureCapacity(80);// 设置容量为80 System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity()); str.setLength(3); str.ensureCapacity(20);System.out.println(“nstr= ”+str);System.out.println(“Length = ”+str.length());System.out.println(“capacity = ”+str.capacity()); } } 5.public void setCharAt(int index, char ch) 将参数index指定位置上的字符,设置成参数ch 指定的字符。例如: StringBuffer str=new StringBuffer(“Hello,Java”); str.setCharAt(3,'L'); 则str的内容变成了“HelLo,Java” 6.public StringBuffer append(多种数据类型) 将其它类型的数据添加到StringBuffer对象的尾部,返回修改后的StringBuffer对象。 例如:StringBuffer s1,s2=new StringBuffer(); s1=s2;// s1和s2代表同一个对象 s2.append(3.14).append(' ').append(“Java”); System.out.println(s1==s2); // 输出true System.out.println(s1); // 输出3.14 Java 7.public String toString() 该方法把StringBuffer对象的内容复制到一个新的String类对象中,返回这个新的String类对象。例如程序6-10。 public class BufferToString{ // 程序6-10 public static void main(String args[ ]){ String s1;StringBuffer s2=new StringBuffer(“Hello ”);s1=s2.append(“Java!”).toString();System.out.println(“s1=”+s1+“"+”s2=“+s2); } } 8.public StringBuffer insert(int offset, 多种类型 b)该方法是将一个其它类型的对象b插入到offset指定的位置。例如: StringBuffer str=new StringBuffer(” Java!“); // 将字符串”Hello“插入到下标为0的位置 str.insert(0,”Hello“); System.out.println(”str= “+str);输出结果为: str= Hello Java! 6.4 略 应用举例 课堂练习: 无 课外练习(作业): P119 2、3、4 第7章 异常处理 教学目的要求 了解异常的层次结构; 掌握异常处理语句; 了解自定义异常; 了解异常处理中常用的调试方法。主要内容 异常的层次结构; 异常处理语句; 自定义异常; 异常处理中常用的调试方法。 重点内容 异常处理语句; 难点内容 无 课时分配 1课时 教学方法 讲授法、演示法、对比法、实验验证法 讲授内容提要 7.1 异常的层次结构 Throwable是异常类的根节点,定义在java.lang包,它的子类也定义在该包中; Error代表系统错误类,由系统直接处理; Exception类及其子类是在程序中可捕捉到的异常。见图7.1 Throwable Error achineError … AW TError LinkageError VirtualM RuntimeException ArithmeticException ArrayIndexO utO fBoundsException … Interrupted Exception AWTException IOException Exception FileNotFoundException… EOFException 1.java.lang.ArithmeticException 0作除数(包括模),将产生这类异常。例如:int x=0 , y; y=100/x; 2.java.lang.ArrayIndexOutOfBoundsException 例如:int a[ ]=new int[10]; a[10]=0; 3.java.lang.ArrayStoreException 例如:int a[ ]=new int[10]; boolean b[ ]=new boolean[10]; System.arraycopy(a,0,b,3,6);//有异常 4.java.lang.ClassCastException 例如: Object obj=new Object(); int a[ ]=(int[ ])(obj); 5.java.lang.IndexOutOfBoundsException 例如:char ch=”ABC“.charAt(99); 注意: 2 是5的子类。 6.java.lang.NegativeArraySizeException 例如: int a[ ]=new int[-10]; 7.java.lang.NullPointerException 例如:int a[ ]=null; System.out.print(a.length);7.2 异常处理语句 缺省的异常处理的情况,例如: public class DefaultException{ // 程序7-1 public static void main(String args[ ]){ int a,b=0; a=2/b; // 此处有异常 System.out.println(“a=”+a);// 不运行此行 } } 异常处理语句有try、catch、finally、throw和throws。异常处理的形式为: try{ 程序执行体 }catch(异常类型1 异常对象1){ 异常处理程序体1 }catch(异常类型2 异常对象2){ 异常处理程序体2 }finally { 异常处理结束前的执行程序体 } 7.2.1 try和catch语句 try语句指明可能产生异常的代码段;catch语句在try语句之后,用于捕捉异常,一个try语句可以有多个catch语句与之匹配。异常处理以后,程序从try语句代码段后继续执行。例如:程序7-2。public class TryCatchTest{ // 程序7-2 public static void main(String args[ ]){ int a=99,b=0,c; try{ System.out.println(”产生异常之前“);c=a/b; // 该行有异常 System.out.println(”产生异常之后“);}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”处理下标越界异常“);}catch(ArithmeticException e){ System.out.println(”处理算术异常“);} System.out.println(”异常处理结束“); } } 注意:用catch语句捕捉异常时,若找不到相匹配的catch语句,将执行缺省的异常处理。例如: int a=99,b=0,c; try{ c=a/b;//产生的异常和捕捉的异常类型不一致 }catch(ArrayIndexOutOfBoundsException e){ System.out.println(”处理异常“); } 注意:当有多个catch语句时,系统依照先后顺序逐个检查。例如: try{ c=a/b; }catch(ArithmeticException e){ System.out.println(”Divided by zero“);}catch(RuntimeException e){ System.out.println(”Divided by zero“);} 7.2.2 finally语句 无论是否产生异常,finally语句指明的代码一定被执行。例如: public class testFinally{ // 程序7-3 public static void main(String args[ ]){ int a,b=0; for(int i=0;i<=3;i++){ System.out.println(”Test No: “+(i+1));try{ switch(i){ } case 0: a=3/b; break;case 1: int c[ ]=new int[10]; c[10]=0; break;case 2: char ch=”ABC“.charAt(99); break;case 3: return;}catch(ArithmeticException e){ System.out.println(“零作除数!”); }catch(ArrayIndexOutOfBoundsException e){ System.out.println(”数组下标越界!“);}catch(IndexOutOfBoundsException e){ System.out.println(”下标越界!“);}finally{ System.out.println(”在finally块中!“); } } 7.2.3 throw语句 throw语句用于指出当前行有异常,当程序执行到throw语句时,流程就转到相匹配的异常处理语句,所在的方法也不再返回值。 throw语句可以将异常对象提交给调用者,以进行再次处理。例如:程序7-4。public class ThrowException{ // 程序7-4 public static void Test(){ try{ int c[ ]=new int[10];c[10]=0;}catch(ArrayIndexOutOfBoundsException e){ System.out.println(”t 数组下标越界!“); } } throw e; // 异常抛出点 //System.out.println(“t产生异常后!”); 该行无法通过编译 } } public static void main(String args[ ]){ try{ Test();}catch(IndexOutOfBoundsException e){ System.out.println(”t 下标越界!“);}finally{ System.out.println(”t 在finally块中!“);} } } 7.2.4 throws语句 throws语句指明方法中可能要产生的异常类型,由调用者进行异常处理。例如: import java.io.*; // 程序7-6 public class testThrows { public static String readString()throws IOException{ int ch;String r=”“;boolean done=false; while(!done){ ch=System.in.read(); } if(ch<0 || ch==0xd) done=true;else r = r +(char)ch; return r; } public static void main(String args[ ]){ String str; try{ str=readString();}catch(IOException e){ System.out.println(”产生了输出/输出异常“); return;} System.out.println(”整数是:"+Integer.parseInt(str)); } } 建议:在多人合作写程序时,一个方法中产生的异常,最好在该方法中进行处理,不要将异常传播给其他人处理。 7.3 自定义异常类 通过继承Exception类或它的子类,实现自定义异常类; 对于自定义异常,必须采用throw语句抛出异常,这种类型的异常不会自行产生。总体上分为两步: 第1步:定义异常类。例如: class userException extends Exception{ int n=0; // 计数器 我的《最强大脑》 ——初识程序设计 一、教材分析 本节课的教学内容是初中8年级信息技术教材第9章《程序设计》第1节的内容。本节课所涉及的内容都是程序设计语言中的基本要素,虽然概念性的知识较多,但是本课的学习将为后续内容的学习打下基础,并且掌握程序的基础知识也是学好程序设计的关键。本课准备结合“乘方计算器”程序实例来让学生了解程序设计的一般过程,理解“对象”“事件”等概念。 二、学情分析 本节课虽然是第9章《程序设计》第1节的内容。学生在此之前没有接触过程序设计,因此如果让学生直接编写程序有一定的难度,因此本节课主要是让学生从建立程序界面、设置对象属性开始,体验用VB编写程序的完整步骤。第1节概念性的内容较多,学生第一次接触VB,学习任务不宜过难,还是以激发学生学习兴趣为主,初步体会如何用程序实现算法,并且通过完成学习任务的经验理解“对象”“事件”等概念的含义。 三、教学目标: 1、知识与技能 1)理解程序的含义。 2)了解VB窗口的组成,掌握建立程序界面、设置对象属性的基本方法。 3)掌握编写程序的一般过程 4)理解“对象”“属性”和“事件”的含义。 2、过程与方法 1)通过“乘方计算器”程序的模仿,让学生体验VB编写程序的完整步骤。 2)通过对“乘方计算器”程序的分析,让学生体验用程序实现算法。 3、情感态度与价值观 通过“乘方计算器”程序的演示,激发学生学习程序设计的兴趣。 4、行为与创新 逐步养成良好的程序设计习惯 四、教学过程 1、导入 (教师播放周玮参加《最强大脑》的视频) 师:视频中的主人公名叫周玮,患有先天性智力障碍,但是他对数字有着极强的敏感度,能够用大脑对任何自然数进行高次乘方或者开方运算,被称为“中国雨人”。 师:同学们想一想如果让你们算出一组数据的乘方,同学们能不能算的出来 生: 师:那么这个时候计算机能帮助我们做什么呢?曾经当我们需要统计数据的时候我们可以使用电子表格软件,当我们需要修饰文字的时候我们可以使用word,当我们需要修饰图片的时候我们可以使用美图秀秀或者PS软件,但是要解决计算乘方的问题,我们还没有一个专门的软件,这个时候我们就需要学习程序设计,自己制作一个软件,老师在课前制作了一些小软件,我们一起来看一下(教师演示乘方 解方程组 画图还有贪吃蛇软件) 那么如何设计程序呢? 今天老师就以乘方计算器为例子就和同学们一起学习《初识程序设计》 2、认识程序 师:在认识程序之前,我们先来认识程序这个概念,我相信程序这个名词,对于我们同学们来说既熟悉又陌生,熟悉的是我们经常会用到这个词语,陌生的是很少有同学准确的能够说出它的意思。其实程序就在我们身边,同学们早晨起床、刷牙、洗脸吃早饭上学,晚上回来打开书包,拿出作业,写作业,最后将作业放回书包中,这些分步骤按顺序解决一个问题就是程序,课本上程序的概念是执行一些有序的指令完成一项具体的工作,这些有序的指令就是程序,所谓程序设计就是将解决一个问题的过程,分步骤的设计出来。那么所谓的计算机程序实际上就是让计算机按照步骤解决一个问题 3认识VB 师:计算机设计程序的软件有很多,我们今天主要学习的是VB,我们打开开始菜单,点击VB,选择标准exe程序,打开VB程序,这个就是VB的界面,上面的为菜单,左侧的工具箱,中间的区域为窗体,窗体的作用就是用来设计我们程序的操作界面的,当程序的操作界面中需要一些控件时我们可以从左侧的工具箱中选中相应的工具,在窗体中拖动出来,拖动出来的控件我们就不能称之为控件了,它有一个专门的名称叫做“对象”常用的对象有三种lable(标签对象)text(文本框对象)和command(按钮对象),现在同学们将学件中VB文件打开,打开VB文件的时候,同学们请注意我们先打开后缀名为frm的文件,然后点击窗体文件夹加载窗体,打开文件后同学们将窗体区域和我们刚刚操作的乘方计算器的操作界面比较是不是有点类似啊,只不过这个窗体缺少一个command按钮对象还有就是有的对象上的文字不一样,缺少按钮对象我们可以点击工具箱中的command控件,然后在窗体中拖动出来,那么如何改变对象显示的样子呢,这里我们要介绍到第二个概念属性,对象大小,颜色,显示的文字以及显示文字的字体都是属于属性,那么对象的属性在哪里修改呢,在界面的右侧有一个属性窗口,这里是控制对象的属性,比如说我要改变这个对象的属性,我先选中这个对象,然后在属性窗口中找到这个对象的名称,注意名称就代表这个对象,然后打开学件网页中的属性表格按照表格中的要求修改,好的,现在同学们,你们根据老师演示的方法,将窗体改成我们需要的样子。修改的时候思考这样一个问题,caption font 和text属性分别有什么样的作用。 布置任务一:根据表格改变属性 4、输入代码 师:是不是界面设计好了,我们这个程序就能用了呢?(教师演示测试程序)生: 师:我们还需要在程序中输入相对应的指令,这些指令就是告诉计算机该怎么做,我们称这些指令为代码。 我们先来分析一下这个程序:第一步我们得随机给出一个底数,第二步随机给出一个指数,构成一个完整的幂,第三步指数是几,就用多少个底数相乘,第四步算出答案,四个步骤相对应的就是4剧代码,第一句,a=text1.text,text1是指文本框1,text指的是文本框1的text属性,text属性用来表示文本框中所输入的数字,那么第一句话我们可以翻译成用字母a表示文本框1中所输入的数字,用字母b表示文本框2中所输入的数字,字母c等于a的b次方,计算幂,最后文本框3中所得输出的数字就是c,现在我们把这段代码输入程序后台(教师演示进入后台程序,有的同学刚刚设置属性时不小心在后台有代码,我们可以将其全部删掉。)生:出现错误 师:为什么出现错误?因为老师在输入数字之后还有一个动作才能够得到答案,也就是说这个动作触发了程序执行这段代码,那么这个触发程序执行的动作我们称之为事件,所以我们编写代码的的时候单纯的程序代码还不够,我们还需要选择对象和事件,对象时谁这个计算按钮,计算按钮的名称是什么command1在通用中选择comand1 事件是单击那么选择单击click,默认的就是click,然后将代码复制到这两行代码之间。然后我们再来试运行程序,就可以完成了,如果运行的没有问题,就可以结束运行,保存程序(教师演示保存程序)生: 师:最后老师还要提醒同学们,触发程序运行的动作叫做事件,但是对象不仅仅只有click这一个事件,我们还可以选择其他事件,比如说。。 5、总结 今天这节课老师和同学们一起理解了程序的含义,认识了VB软件并尝试编写了一个小程序,那么这个程序是不是就完美了呢?如果在我的数值过大的话,它还能算出正常的结果吗?那么这又是什么原音造成的呢?下节课我们继续学习解决这个问题。 Java程序设计 第一讲 绪论 一、安装netbean系统 二、hello world 典型程序结构中各部分的说明: /* * To change this template, choose Tools | Templates * and open the template in the editor.*/ package test1; //@author Jie public class Test1 { public static void main(String[] args){ System.out.println(“Hello World!”); } } 1、注释语句 2、类定义的包:package 3、public class Test1,定义类,类名称是Test1,属性为public 4、public static void main(String[] args),main函数 5、main函数的函数体{ System.out.println(“Hello World!”); } 三、Java程序设计语言的基本内容: 数据类型 运算符&表达式 3 程序控制语句 4 数组 5 类 6 对象 7 继承 8 接口 9 包 APPLET 11 异常处理 12 线程 13 字符串 14 GUI 15 输入输出系统 我们的课堂教学内容:时间17周,包括17次课堂教学,17次实验室上机。 四、几个案例: 1、计算根号2; 2、显示1-100 3、从1加到100 4、打印一个“*”组成的10*10的矩形 5、求N!,递归算法 6、GUI的例子,在GUI界面下输入和显示(this.jLabel1.setText(this.jTextField1.getText());) 7、演示几个复杂一点例子 五、Java语言中保留的关键字: Java语言一共使用了48个保留关键字,他们主要可以 分为如下几类。 1.访问控制 private , protected , public.2.类、方法和变量修饰符 abstract , class , extends , final , implements , interface, native(用于与其他语言的接口), new , static strictfp:java 语言采用固定的位数来存储浮点型数据,但是有些处理器使用更高位的浮点寄存器,这些寄存器增加了中间过程的计算精度。例如double类型数据jvm采用64为存储,二有些处理器使用80位的浮点寄存器来保存中间数据。例如:double w = x*y/z;很多处理器计算x*y后将中间结果存储在80位的寄存器中,再除以z并将结果截断为64位;但是这个结果可能会与始终在64位机器上计算的结果不一致,如果将所有的中间结果都截断,可能会导致溢出,而截断操作同样需要时间,计算速度比较慢。 因此JVM默认允许中间结果精度扩展。但是在使用关键字strictfp标记的方法,必须使用严格的浮点计算。使用strictfp标记的类中所有的方法都必须严格按照浮点计算。 synchronized:多线程同步访问控制 transient:transient 关键字表示在Serializable 的时候不保存该值 volatile:Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 3.程序控制语句 break, continue, return, do, while, if, else, for, instanceof, switch, case,default, 4.错误处理 catch 捕获, finally 最后, throw 投试, throws 投试, try 尝试 5.包相关 import 输入, package 包.6.基本类型 boolean 布尔型, byte 字节型, char 字符型, double 双精度, float 浮点, int 整型, long 长整型, short 短整型 7.变量引用 super 特殊, this 这个, void 无值 除了这48个关键字以外,还有3个语法保留字: null 空, true 真, false 假.六、如何学习一门程序设计语言 1、理解什么是程序设计语言 2、练习、练习、再练习 第二讲 数据类型、运算符与表达式 一、Java语言中的数据类型 数据类型 大小 范围 默认值 byte(字节) -12832768 0 int(整型) -2147483648-2147483648 0 long(长整型) -***7808-***7808 0 float(浮点型) 32-3.40292347E+38-3.40292347E+38 0.0f double(双精度) -1.797693***E+308-1.797693***E+308 0.0d char(字符型) „ u0000-+=!~ +(一元)-(一元) 左右 * / % 右左 +(二元)-(二元) 右左 << >> >>> 右左 < > <= >= instanceof 右左 = =!= 右左 & 右左 ^ 右左 | 右左 && 右左 || 右左 ?: 左右 = *= /= %= += -= <<= >>= >>>= &= ^= |= 左右 三、实验课任务 1、熟悉netbeans的工作环境,自己编写HELLO WORLD程序 2、输入并运行测试,至少10个不同运算符号组合的算术表达式 3、输入并运行测试,至少5个不同运算符号组合的逻辑表达式 4、联系字符串对象的基本用法:声明赋值对象,显示对象,两个字符串连接,截取子串等 第三讲 输入输出 一、介绍数据流的概念 1、流的基本概念 2、字节流 字节是8比特,等价于0-255范围的十进制数。字节是计算机中最基本的编码单位。如字符型是2个字节,浮点型是4个字节。 字符流的顶层包括inputstream和outputstream两个抽象类。可以通过fileinoutstream和fileoutputstream两个子类对文件进行输入和输出。通过datainputstream和dataoutputstream两个子类处理整数、浮点数等数据。 3、字符流 字符流是特殊的字节流,专门用于处理字符数据,目前的字符集通常是unicode,16比特,一个字符是两个字节。 顶层有两个抽象类:reader和writer,有两个最主要的方法:read(),write() 4、预定义流 标准输入流:in 标准输出流:out 出错流:err 举例: 输出一串字符,在显示器上显示出来 二、文件字节流 1、文件字节流的输入输出 常用方法: read(),write(ch)案例1:在显示器上显示文本文件的内容。案例2:复制文件 2、文件字节流的随机访问 常用方法: 1、读数据方法:readInt()readBoolean()readLine() 2、写数据方法:wirteChar()writerDouble() 3、指针控制方法: long getFilePointer();void seek(long pos);int skipBytes(int n)案例:建立一个可读写随机访问文件,写入10个浮点数,然后关闭该文件。再次以读写方式打开该文件,修改其中第3个数据,然后关闭该文件。再次以只读方式打开盖文件,显示文件内容,然后关闭该文件。 三、过滤流 过滤流是对输入输出流提供了一种包装。我们主要介绍一组: DataInputStream DataOutputStream 案例:从键盘输入一些同学的信息,将信息保存到文件中。 四、字符流 五、File类 六、对象的串行化 第四讲 程序控制语句 第五讲 综合练习第六讲 数组 第七讲 函数、函数调用、递归函数 第八讲 综合练习第九讲 类和对象 第十讲 继承、接口和包与异常处理 第十一讲 综合练习第十二讲APPLET、GUI 第十三讲 线程 第十四讲 综合练习 第十五讲 字符串及信息处理的应用 第十七讲 综合练习第四篇:初识程序设计教案
第五篇:Java程序设计教案