“技能百练”预备知识
单词和缩写
OOP(Object-oriented Programing)
object data method class extends interface prototype packge
public private protected static final native
abstract this super
1.1 面向对象(Object)
名称 |
说明 |
举例 |
对象 object |
类中的实例, 对象的源代码 把数据、变量、操作和方法 封装在一起。 |
小车是汽车类中的实例。 class myclass
myobject=new
myclass(int x); |
类 class |
定义对象的状态和行为的模板, Java 语言中的程序模块。 |
java 语言 awt 工具包中的 Graphics 图形类。 |
1.1.1 什么是面向对象
构成 | 行为 | |
物体 | 属性 | 方式 |
汽车 | 发动机、车轮 | 发动、行驶 |
对象 | 数据 | 方法 |
1.2 Java 语言中的类
1.2.1 class 类
1.类的声明格式
[类修饰符] class 新类名 [extends 超类名] [implement 接口名]
2.类修饰符
public 公有成员,可以被任何对象使用或扩展。
protected 保护成员,仅能被该类及其派生类访问。
private 私有成员,仅能被该类的其他成员访问。
abstract 未完成的类,只是声明方法,而不实现方法。
final 终类,完整的,不能有子类。
3.超类
扩展超类:得取该类的副本,可在副本上添加其他功能。
[示例 1.3]
abstract class myClass1 //定义抽象类
{
abstract void method1(); //定义抽象方法
}
class myClass2 extends myClass1{
public void method1(){
......;
}
}
1. 封装
1)封装(encapsulation)是把类的数据、变量、操作和方法
封装在类体中,使之与外界分隔开。
2)外界访问类对象:
通过类中公共的数据方法访问私有的数据和方法。
1.2.2 子类
1. 类的继承
1)类的继承(extends)
新的类继承原有类的基本特性。
2)新的类:子类、派生类。
3)原有类:父类、超类(superclass)、基类。
2. Java 语言在运行时的多态性(P85)
1)类的多态性(polymophism)
一个名称有多种功能,或者相同的接口有多种实现方法。
2)类的多态性的实现
通过方法的重载(overloading)、复盖(overriding)
和接口来实现。
3)方法的重载
多个方法具有相同的名称,但各个方法的参数表不同,
即参数的类型和参数的数量不同。
例如,求一个数的立方(cube)
int cube (int i);
float cube (float a);
double cube (double d);
调用时系统自选方法。
例如,cube(5),cube(3.2f),cube(6.7)。
4)复盖:子类中的方法复盖父类中同名的方法。
5)接口:特殊的类,只有方法的原型,
方法的实现在其子类中具体定义。
1.2.5 定义构造函数
构造函数:为类提供初始化的方法。
[示例 1.10]
class point{
int x,y; // 声明变量
point(){ //构造函数
x=0;
y=0;
}
point(int newx,int newy){ // point 方法的重载
x=newx;
y=newy;
}
}
1.3 创建、使用对象
1.3.1 声明和创建对象
创建对象语法格式:
类名 对象名; //声明对象
对象名=new 类名(); //创建对象
[示例 1.12]
class myClass1{
myClass myObject;
myObject=new myClass(int x,int y); // 分配空间,实例化
}
1.3.2 对象的初始化
若类成员未赋值,则系统赋予固定的初始值。
数值变量:0
布尔变量:false
未初始化的引用:null
[示例 5.18]
Point p1=new Point(); //初始化为 x=0,y=0
Point p2=new Point(5,10); //初始化为 x=5,y=10
1.3.3 对象的使用
运算符“.”可以访问变量和调用方法。
[示例 1.19]
class Point { // 声明 Point 类
int x,y;
String name="a point";
Point(int x,int y, String name){ // 定义方法
this.x=x; // 用运算符“.”访问变量
this.y=y;
this.name=name;
}
}
// Point 类的应用
public class AccessVariable{ //声明 AccessVariable 类
Point p=new Point(); //生成类 Point 的对象 p
p.x=10; //用 p.x,p.y 来访问 x,y
p.y=10;
tx=new point().x; //用 new 生成对象的引用后直接访问
}
1.4 类和对象
类是定义对象的状态和行为的模板,对象是类的实例。
1.5 Java 语言中的方法
1.5.1 方法的定义
方法:可以被调用的代码,传递固定数量的参数,
类似 C 语言的函数。
方法声明格式:
方法修饰符 结果类型 方法名([参数列表]){方法体}throws子句
[示例 1.24]
class point{
int i;
float x,y;
void add_x+y(){ // 定义 x+y 的方法
for(i=1;i<10;i++)x=x+y;
......;
}
}
1.5.2 构造方法
[示例 1.27]
class point{
int x,y;
point(){
x=0;
y=0;
}
point(int x,int y){
this.x=x;
this.y=y;
}
}
1.5.3 finalize 方法
finalize 方法终结扫尾,释放系统资源。
1.6 this 和 super 变量
this 变量:当前的对象。
super 变量:引用超类(父类)中的对象。
1.static方法:类方法(class method),
Math 类中含有数学计算方法:指数、对数、三角函数。
2.向方法传递信息
public static long max(long a,long b){
return (a>=b) ? a : b;
}
例:
class Circle {
int x,y,radius; //成员变量x,y
public Circle(int x,int y,int radius) //构造器参数x,y
{
this.x=x; //赋值给当前对象的变量x
this.y=y;
this.radius=radius;
}
}
3.main方法
main方法:程序执行的起点。
定义格式:public static void main(String args[]){方法体}
类的原型(prototype),接口规划出类的共同行为,
具体类实现特殊功能。
包(package):由一组类和接口的程序段组成。
2.2 Java 包
包:类似 C++ 语言中的类库,用途相近功能不同的类和接口的集合。
相当子目录,包与文件系统的目录对应,用圆点(.)指明目录的层次。
例如:java.awt.Graphics
2.2.1 java 核心包
API(Application Programming Interface)
(1)java.lang 基本包:支持基本对象和数值类型。
(2)java.io 输入输出包:用于管理文件输入输出流。
(3)java.util 工具包:提供工具类。
(4)java.net 网络包:支持网络编程。
2.2.1 java 语言提供的其他包
(1)java.awt 抽象窗口工具包:
用于管理窗口、对话框、按钮、菜单、滚动条等。
(2)java.applet 小程序包:用于创建 Java 小程序。
(3)javax.swing 新图形界面库:新的图形界面类库。
2.2.3 构造 Java 包
package 包的名称;
2.2.4 引入包中的类和接口
例如:
import java.awt.color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.*;
导入整个包,浏览器必须从网上下载包中的所有类文件,用时间多。
2.4 Java 语言标准应用程序框架
* 应用程序(Application):
在 Java 虚拟机上运行,受限制少,要有程序入口 Main()。
* Java 小程序(Applet Application -let):
在 IE 浏览器上运行,受限制多,不要程序入口 Main()。
2.4.1 Java Application 应用程序框架
Java 应用程序:myApplication.java
package mypackage;
import somepackage.*;
public class myApplication{
public static void main(String args[]){
...;
}
}
* String args[]:传递给 main() 方法的参数,
参数 args 是类 String 的数组。
2.4.2 Applet 小程序框架
* Applet 小程序运行过程
init( ) |
——— |
start( ) |
———— |
stop( ) |
——— |
destory( ) |
———— |
(1)加载含 Applet 的页面;
(2)嵌入了 Java 虚拟机的浏览器调用 init()方法初始化 Applet;
(3)调用 paint() 或 start() 方法绘制或启动程序;
(4)离开页面时,浏览器调用 stop() 方法停止小程序的运行;
(5)若关闭浏览器停止 Applet 运行,
浏览器调用 destory() 方法终止小程序。
* HTML 文件嵌入 Applet 小程序(P123)
<BODY>
<APPLET
CODEBASE="." // 路径
CODE ="ZXB.class" // 正弦波类文件
......
<PARAM NAME="Width" VALUE="400" // 宽的参数
</APPLET>
</BODY>
单词和缩写
GUI(Graphic User Interface)
Components Containers Layouts
Frame Panel Button Label event
DSN(Data Sequence Number)
3.1 GUI 图形用户界面
* 图形用户界面基本元件(组件)
应用程序框架(Frame) 面板(Panel)
按钮(Button) 标签(Label)
画板(Canvas) 滚动条(Scrollbar)
列表框(List) 文本域(Text Field)
文本区(Text Area) 菜单(Menu)
* 控制组件的基本使用
激活组件(action) 禁用组件(disable)
启用组件(enable) 处理事件(handleEvent)
隐藏组件(hide) 当前坐标(location)
单击鼠标(mouseDown) 拖动鼠标(mouseDrag)
移动组件(move) 重置组件(repaint)
重置尺寸(resize) 组件背景色(setBackground)
设置字型(setFont) 组件前景色(setForeground)
显示组件(show)
3.1.1 应用程序框架
1.应用程序(Application):
框架(Frame):带标题的顶层窗口。
Frame 类构造方法:
Frame(String title) // 给定窗口标题
显示框架窗口:使用 Frame 类的父类 Windows 类中的show()方法。
[实例 3.1]
import java.awt.*;
public class myFrame extends Frame{
// 创建继承 Frame 的窗口类
public myFrame(){ // 定义方法
.............
}
public static void main(String[] args){
myFrame mF = new myFrame(); // 实例化一个窗口
mF.setSize(777,555);
mF.show();
}
}
2.在 VJ++6.0 环境中创建源程序:
Applications 应用程序:编译生成 .exe 文件,
运行时有独立的窗口,使用 Form1 模板中的关闭窗口方法。(P178)
public boolean handleEvent(Event e){
switch(e.id){
case Event.WINDOW_DESTROY:System.exit(0);return true;
default:return false;
}
}
例如:正弦波 F:\JAVA\jv_zxb.java
File--New project--Applications 文件夹的
Windows Application—工程名jv_zxb,路径F:\JAVA—打开—
Project Explorer 窗口:Form1.java 改 jv_zxb.java—
打开jv_zxb.java—编辑源程序—Build菜单—Build—
指定主类 'Form1' 未发现;
debug 菜单—Start winthout debugging --launch 启动卡—
选取自定义选项 costom—编译生成类文件(.class)—
调试 Debug--Start--生成 .exe 文件。
3.1.2 面板
1.面板(Panel):构成 Java 小程序(Applet)主窗口。
2.Java 小程序实例 zxb.htm 代码 zxb_dm.htm
3.在 VJ++6.0 环境中创建 Applet 小程序
Applet 小程序:编译生成 .class 文件,插入网页中,
浏览时包含在浏览器窗口中。
例如:正弦波 F:\JAVA\zxb.java
File--New project--Web Page 文件夹的 Applet on HTML—
工程名zxb.java,路径F:\JAVA—打开—
Project Explorer 窗口:Applet1.java 改 zxb.java—
打开zxb.java—编辑源程序—Build菜单—Build—
编译生成类文件(.class)—调试Debug--Start--
浏览器窗口Page1.htm—查看—源文件—Applet1.class改zxb.class。
3.2 事件的处理
事件(event)处理
事件源(source)和事件监听(listeners)之间的交互。
3.2.3 典型组件事件处理
5.菜单事件
[实例 3.7] 菜单事件应用程序
实现菜单退出事件:
定义退出子菜单项—监听菜单事件—调用处理程序—处理菜单事件。
Java 菜单 jvcd.exe,代码 jvcd_dm.htm
MenuItem MenuFileExit = new MenuItem(); // 定义退出子菜单项
MenuFileExit.addActionListener
(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){ //监听菜单事件
MenuFileExit_actionPerformed(e); //调用处理程序
}
});
void MenuFileExit_actionPerformed(ActionEvent e){
System.exit(0); //处理菜单事件
}
习题 3
3.3 编写 Windows 应用程序框架,
包括文件(打开)、编辑(复制)等菜单项。
3.4 编写文件(退出)的菜单事件应用程序,包括定义菜单项,
监听菜单事件,调用处理菜单事件的程序,处理菜单事件。
单词和缩写
init start stop destory Font Bold Italic String CodeBase
Code Width Height Pixel
4.1 Java 标准类和类中方法的调用
4.1.3 数学运算(Math)类
数学类引用格式:
Math.method(variable);
数学运算(Math)类的定义:
public final class java.lang.Math extends java.lang.Object{
......
public static double cos(double a);
public static double sin(double a);
}
4.1.4 图形(Graphics)处理类
图形(Graphics)处理类的定义:
public abstract class java.awt.graphics extends java.lang.Object{
public abstract boolean drawImage(Image img,int x,int y,
Color bgcolor,ImageObserver observer); // 显示图像
public abstract viod drawLine(int x1,int y1,int x2,int y2);//画线
public abstract viod setColor(Color c); //设置当前颜色
public abstract viod setFont(Font font); //设置当前字体
[示例 4.4] 在图形对象中绘制字符串
public viod paint(Graphics g){
g.drawString("Hello World!",5,5);
}
1.绘制线、矩形、椭圆
2.复制图形
copyArea(int x,int y,int width,int height,int dx,int dy);
3.清除图形
clearRect( int x,int y,int width,int height);
clearRect( 0,0,size().width,size().height); // 清除显示区
[实例 4.2] Java 矩形圆形 jvjy.exe jvjy_dm.htm
[实例 4.3] 函数计算 hsjs.exe hsjs_dm.htm
4.3 Java 语言 Applet 小程序
小程序指定宽高:size().width,size().height);适合页中调整。
应用程序指定宽高:像素点 800*600。
[实例 4.4] 正弦波 zxb.htm
* 在 HTML 中使用 Applet
<Applet
CodeBase=codebaseURL //设置路径
Code=AppletFileName //指定 包名.类名.class
Alt=AlternateText //转显提示文本
Width=pixels Height=pixels //宽高的像素点
>
</Applet>
习题 4
4.4 编写实现绘图功能的 Applet 小程序,
动态演示水平/垂直的正弦波、多叶曲线。
编写实现绘图功能的 Application 应用程序,
动态演示水平/垂直的正弦波、多叶曲线。
补充题 使用 Java 语言的图形功能设计各种图形程序。
1)多色多叶曲线 dsdyqx.htm、换笔增叶 hbzy.htm
变色3叶曲线(bs3yqx.java):红绿蓝 ss3yqxtx
动态3色3叶曲线(dt3s3yqx.java):红绿蓝
三色3叶曲线(ss3yqx.java):红绿蓝
四色4叶曲线(ss4yqx.java):红绿蓝黄
五色5叶曲线(ws5yqx.java):红绿蓝黄青
2)多叶曲线设计考虑因素
线宽、花叶颜色、各叶片色、背景色、叶数、位置、显示速度
r,g,b:背景颜色 画笔颜色
x,y:水平移动图形 x=0--639 垂直移动图形 y=0--479
r1,r2:水平方向半径 r1=0--320 垂直方向半径 r2=0--240
i,j:心形曲线叶片 i=1--24 心形曲线弧度 j=0--2*PI
3)正弦波设计考虑因素
线宽、颜色、分段颜色、背景色、波峰数、显示速度
画图方向:向左画、向右画、向上画、向下画、同时向右和向下画
位置:水平、垂直多条正弦波
5.2 图形和图像处理
5.2.1 设置图形颜色
[实例 5.2] 变色彩条
5.2.2 绘制图形实例
[实例 5.3] 画图工具
5.2.3 图像文件显示
[实例 5.4] 彩条图像
5.3 动画制作
5.3.2 动态显示图像
时钟针转一周360°,时钟针每秒转过的角度:
秒针 6(度/秒),分针 0.1(度/秒),时针 1/120(度/秒)。