导图社区 java程序语言设计(一)
《Java语言程序设计(1)》介绍了Java语言的基本概念、数据类型、运算和语句,面向对象机制,数组和字符串处理,利用AWT和Swing进行图形用户界面设计的基本方法,图形、图像和多媒体处理基本技术,多线程编程基本技术,输入输出流处理方法,网络和数据库编程技...
编辑于2022-10-11 11:57:31 广东java程序语言设计(一)
第一章 JAVA概述
第一节 JAVA语言简介
一、JAVA预言的起源
二、JAVA语言的特点
1.语法简单,功能强大,安全可靠
2.与平台无关
3.解释编译两种运行方式
4.多线程
5.动态执行兼有丰富的API文档极类库
第二节 JAVA开发环境的安装与设置
一、文件下载
二、软件安装
三、设置环境变量
第三节 JAVA程序示例
一、JAVA程序的两种方式
应用程序(Application)
小应用程序(Applet)
二、JAVA程序
三、编译
Javac:Java编译器,用来将Java程序编译成字节码。 Java字节码文件(扩展名为.class)
四、运行
Java:java解释器,执行已经转换成字节码的Java程序。
五、IDE
第四节 使用JAVA核心API文档
一、面向对象技术
二、OOP
第二章 数据与表达式
第一节 基本语法元素
一、空白、注释及语句
1.空白
2.注释
3.语句、分号和块
二、关键字
三、标识符
必须以字母、下划线_、美元符号$开头。 其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
大小写敏感,且长度无限制,不可以是Java的关键字
四、Java编程风格
第二节 基本数据类型
1.数据类型byte、short、.int和long
2.浮点数类型floa和double
3.字符类型char
4.布尔类型boolean
第三节 表达式
一、操作数
1.常量
2变量的声明及初始化
3.变量作用域
4数学函数
二、运算符
1.算术运算符
2.关系运算符
3.逻辑运算符
4.位运算符
5.其他运算符
6.运算符的优先次序
三、表达式的提升和转换
第三章 流程控制语句
第一节 JAVA程序的结构
一、JAVA包的概念
package语句:包语句,每个文件最多只有一个,且必须放在文件开始的地方。
import语句:引入语句,可以没有,也可以有多个,如果有 import语句的话,必须放在所有类定义的前面。
类定义:每个文件中包含的非public权限的类定义的个数没有限制。
接口定义:每个文件中包含的接口定义个数没有限制。
包的概念包是类的容器, 包的设计人员利用包来划分名字空间,以避免类名冲突。
引入时包与包下边的包用.分隔
二、引入语句
第二节 流程控制
一、赋值语句
二、分支语句
1.if语句
2.switch语句
三、循环语句
1.for语句
2.while语句
3.do语句
四、跳转语句
1.标号
2.break语句
3.continue语句
第三节 简单的输入输出
1.Scanner类
第四节 处理异常
一、异常及其处理机制
·二、异常分类
1.受检异常
2.运行时异常
3.错误
三、异常处理
四、公共异常
1.Arithmetic Exception
2.NullPointerException
3.NegativeArraySizeException
4.ArrayIndexOutofBoundsExcel
五、抛出异常
第四章面 向对象程序设计
第一节 类和对象
一、类的定义
类中含有两部分元素,分别是数据成员变量和成员方法
二、构造方法
1.构造方法概述
构造方法是一类特殊的方法,有特殊的功能。构造方法的名字与类名相同,没有返回值,在创建对象实例时通过new运算符自动调用
2.默认的构造方法
3.构造方法重载
为了便于创建实例,一个类可以有多个具有不同参数列表的构造方法。
4.this引用
第二节 定义方法
一、方法的定义
修饰符
方法名必须是一个合法的标识符
返回类型是方法返回值的类型
二、按值传送
调用方法时,通常会给方法传递一些值。传给方法的值称为实参,方法的参数列表中列出的值称为形参。 Java “按值” 传送实参。
三、重载方法名
允许多个方法使用同一个方法名,这就是方法名的重载(Overload)
规则
调用语句的实参列表必须足够判断要调用的是哪个方法。
方法的返回类型可以相同也可以不同。两个同名方法仅有返回类型不同,而参数列表完全相同,这是不够的, 因为在方法执行前不知道能得到什么类型的返回值,因此也就不能确定要调用哪个方法。重载方法的参数列表必须不同。
第三节 静态成员( static)
一、静态变量
不同对象的静态变量共享同一块内存空间,从属于类
二、静态方法
不依赖于特定对象的行为。调用静态方法时,直接使用类名来引用
第四节 包装类
一、什么是包装类?
Java使用基本数据类型(如 int、double、char和 boolean)及类和对象来表示数据。 当想用处理对象一样的方式来处理基本类型的数据时,必须将基本类型值“包装”为一个对象。
二、每种基本数据类型及其对应的包装类包装类的方法
三、包装类的方法
第五章 数组和字符串
第一节 数组
一、数据声明
数组必须先声明后使用 数组元素可以是基本数据类型,也可以是类类型或接口类型,也还可以是数组。
一维数组定义格式
类型 数组名[ ];
char name[ ]; char [] name;
二、创建数组
静态初始化
int intArray[]={1,2,3,4};
动态初始化
使用new关键字为数组分配空间。 类型 数组名[ ]=new 类型 [数组大小]; 数组名[ 0]=new 类型(初始表);
int intArray[]=new int[5]; intArray[0]='1';
基本数据类型的数组
类型 数据名[ ]=new 类型[数组大小]; 类型 [ ] 数组名=new 类型[数组大小];
三、访问数据元素
数组中的元素个数length是数组类中唯一的数据成员变量 使用new创建时系统自动给length赋值。 下标的范围是0~length-1
四、多维数组
1.多维数组的定义
类型[ ] [ ] 数组名; 类型[ ] 数组名 [ ]; 类型 数组名[ ] [ ]=new 类型[数组第一维大小][数组第二维大小];
int intArray[][];//声明了二维数组intArray int intArray[] []={{11,2},{3,4},{2,0}}; int a[][]=new int[2][3];//声明的2行3列的二维数组
2.多维数组的初始化
3.多维数组的引用
第二节 字符串类型
一、字符串的声明
字符串是连续排列0或多个字符 String和StringBuffer类中封装了许多方法,用来对字符串的操作。 String类用于处理不变字符串,StringBuffer类用于处理可变字符串 Java程序中字符串分为常量和变量两种,字符串常量用双引号括起来。 对于字符串变量,使用之前要显示声明,并进行初始化。
二、字符串的操作
String类的对象实例是不可改变的,一旦创建就确定下来。
String常用方法
String类 和 StringBuffer类中共有的常用方法
length():返回字符串的长度,即字符个数。
charAt( int index):返回字符串中index位置的字符。
subString (int beginlndex):截取当前字符串中从beginlndex开始到末尾的子串。
String类中的常用方法
replace ( char oldChar, char newChar ) :将当前字符串中出现的所有 oldChar转换为newChar。
toLowerCase() :将当前字符串中所有字符转换为小写形式。
toUpperCase() :将当前字符串中所有字符转换为大写形式。
concat( String str):将 str连接在当前字符串的尾部。
startsWith( String prefix):测试 prefix是否是当前字符串的前缀。
trim() :去掉字符串前面及后面的空白。
valueOf( type value):将 type类型的参数value转换为字符串形式。
StringBuffer的常用方法
append (String str):将参数 str表示的字符串添加到当前串的最后。
replace (int start, int end, String str) :使用给定的 str 替换从 start 到 end 之间的子串。
capacity( ) :返回当前的容量。
第三节 Vector
一、概述
Vector是 java.util包提供的一个非常重要的工具类,它类似于数组,可以使用整数下标来访问各个元素,但是比数组的功能更强大。
Vector类包含的成员变量
protected intcapacitylncrement:增量的大小。如果值为0 , 则缓冲区的大小每次倍增。
protected intelementCount :Vector 对象中元素的数量。
protected ObjectelementData[ ] :元素存储的数组缓冲区。
。二、Vector类的方法
1.构造方法
public Vector( ) :构造一个空向量。
public Vector(intinitialCapacity) :以指定的初始存储容量 initialCapacity 构造一个空的向量 Vector。
public Vector(intinitialCapacity, int capacitylncrement) :以指定的初始存储容量 initialCapacity和容量增量capacitylncrement构造一个空的向量 Vector。
例如 :
创建 Vector的实例时,要指明其中保存的元素的类型。
Vector MyVector = new Vector(100, 50); 创建的 MyVector向量序列初始有100个字符串的空间,以后一旦空间用尽则以50为单位递增,使序列中能够容纳的元素个数为150,200……
2.添加方法
addElement(Object obj):将新元素obj添加到序列尾部。
insertElementAt(Object obj,int index) :将指定对象 obj 插入到指定位置 index 处 。
add (int index, Object obj):在向量的指定位置index插入指定的元素obj。
第六章 继承与多态
第一节子类
一、is a 关系
子类对象“is a”父类关系,子类中的任何一个成员也是父类中的成员
is a:一般与特殊关系。 has a:整体与部分关系。
二、extends关键字
用extend关键字实现通过已有类生成新的类,生成的叫子类,已有的叫父类。
修饰符 class 子类名 extends 父类名{ 类体 }
三、Objec类
Object类是Java程序中所有类的直接或间接父类,处在类层次的最高点
常用方法
public final Class getClass():获取当前对象所属的类信息,返回 Class 对象。
public String toString():按字符串对象返回当前对象本身的有关信息。
public boolean equals(Object obj):比较两个对象是否是同一个对象,是则返回true。
四、单重继承
java只支持单继承。 多继承是通过接口实现。 构造方法不能被继承,构造方法只能自己编写或没有的时候系统添加默认的构造方法。
五、对象转型
Java允许使用对象的父类类型的一个变量指向子类对象 子类Manager的实例赋给父类变量e这称为对象转型 (Casting)。
//向上转型 Employee e = new Manager();
注意
对象引用的赋值兼容原则允许把子类的实例赋给父类的引用。但反过来是错误的,不能把父类的实例赋给子类的引用
第二节方法覆盖与多态
一、方法覆盖及其规则
方法覆盖
子类与父类使用的是相同的方法名及参数列表,但可以执行不同的功能。
规则
覆盖方法的允许访问范围不能小于原方法
覆盖方法所抛出的异常不能不原方法多
二、调用父类的构造方法
super使用示例
如果子类已经重写了父类中的方法,但在子类中还想使用父类中被隐藏的方法,可以使用 super关键字。
super()调用必须放在子类构造方法的开头位置
三、多态
静态多态:同一个类中同名方法
动态多态:不同类中同名方法,父类做函数形参,根据实参决定执行哪个类对象的方法,完成不同的功能。
第三节终极类与抽象类
一、终极类
关键字final,它表示终极,既可以修饰一个类,也可以修饰类中的成员变量或成员方法。这个关键字修饰的类或类的成员都是不能改变的。 与之相对应的是关键字abstract, 它可以用于类或方法, 表示抽象。使用 abstract修饰的方法的方法体为空,修饰的类必须被子类继承。 如果—个类被定义为final,则它不能有子类; 如果一个方法被定义为final,则不能被覆盖; 如果一个变量被定义为final,则它的值不能被改变。
终极类格式
final class 终极类名{ 类体 }
二、终极方法
被标记为final的方法将不能被覆盖,从而可以确保被调用的方法是最原始的方法,而不是已被更改的子类中的方法。 被用于优化,从而提高编译运行效率。
三、终极变量
final修饰的变量叫终极变量,终极变量的值不可以改变。
final float PI=3.14f;
四、抽象类
抽象类格式
public abstract class 抽象类名{ 类体 }
抽象方法格式
public abstract 返回值类型 抽象方法名([参数列表]);
第四节接口
一、接口
允许创建者规定一个类的基本形式,包括方法名、参数列表以及返回值类型,但不规定方法体。 因此在接口中所有的方法都是抽象方法,都没有方法体。
作用
接口与抽象类都用来定义多个类的共同属性。
Java允许一个类实现多个接口,从而实现了多重继承的能力,并具有更加清晰的结构。
格式
[接口修饰符] interface 接口名 [extends父接口列表]{ ……//方法原型或静态常量 }
二、接口的实现
一个类可以同时实现多个接口。要实现接口,可以在类的声明中用关键字implements来表示。 接口中的所有抽象方法必须在类或子类中实现。
implements语句的格式
public class 类名 implements 接口名[ , 接口名[ , 接口名] ] { / * 抽象方法及终极静态变量的定义* / }
第七章 输入和输出流
第一节数据流的基本概念
一、输入数据流
概念
输入输出流:只能读不能写的数据流。 输入数据流都是从抽象类InputStream继承。 输入、输出源抽象为流(Stream)。 数据流是指一组有顺序的、有起点和终点的字节集合。
字节流和字符流
字节流:一次读入或读出是8位二进制。 字符流:一次读入或读出是16位二进制。
区别
(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论
只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。
数据操作方法
int read( ):从输入流中读取一个字节的二进制数据。
int read(byte[ ]b):将多个字节读到数组中,填满整个数组。
int read(byte[ ]b,int off,int len):从输入流中读取长度为len的数据,从数组b中下标为off的位置开始放置读入的数据,读毕返回读取的字节数。
void close( ):关闭数据流。当结束对一个数据流的操作时应该将其关闭,同时释放与该数据流相关的资源,因为Java提供系统级的垃圾自动回收功能,所以当一个流对象不再使用时,系统可以自动关闭。但是,为提高程序的安全性和可读性,建议显式关闭输入/输出流。
int available( ):返回目前可以从数据流中读取的字节数(但实际的读操作所读得的字节数可能大于该返回值)。
long skip(long l):跳过数据流中指定数量的字节不读取,返回值表示实际跳过的字节数。
boolean markSupported( ):用于测试数据流是否支持回推操作,当一个数据流支持mark( )和reset( )方法时返回true,否则返回false。
void mark(intmarkarea):用于标记数据流的当前位置,并划出一个缓冲区,其大小至少为指定参数的大小。
void reset( ):将输入流重新定位到对此流最后调用mark方法时的位置。
二、输出数据流
输出数据流:是指只能写不能读的流 java.io包中所有输出数据流大多是从抽象类OutputStream继承而来的
数据操作方法
void write(int i):将字节i写入到数据流中,它只输出所读入参数的最低8位。 该方法是抽象方法,需要在其输出流子类中加以实现,然后才能使用。
void write(byte b[ ]):将数组b[ ]中的全部b.length个字节写入数据流。
void write(byte b[ ],int off,int len):将数组b[ ]中从下标off开始的len个字节写入数据流。元素b[off]是此操作写入的第一个字节,b[0ff+len-1]是此操作写入的最后一个字节。
void close( ):当结束对输出数据流的操作时应该将其关闭。
void flush( ):刷新此输出流并强制写出所有缓冲的输出字节。
第二节基本字节数据流类
一、文件数据流
包括FilelnputStream和FileOutputStream,这两个类用来进行文件的I/O处理,其数据源或数据终点都应当是文件。 通过所提供的方法可以对本机上的文件进行操作,但是不支持方法mark()和reset( )
示例
FilelnputStream fis=new FileInputStream("myFile"); //这样,便把文件myFile作为该数据流的数据源。
二、过滤器数据流
缓冲区数据流
缓冲区数据流有BufferedlnputStream和BufferedOutputStream,它们是在数据流上增加了一个缓冲区,都属于过滤器数据流。 这两个流还提供了对mark( )、reset( )和skip( )等方法的支持。
数据数据流
DatalnputStream和DataOutputStream就是这样的两个过滤器数据流,它们允许通过数据流来读写Java基本类型,包括布尔型(boolean)、浮点型(float)等。
三个文件流的区别
FileInputStream在读取文件的时候,就是一个一个byte地读取,一滴一滴地把水从一个缸复制到另外一个缸
DataInputStream则是在FileInputStream的一个轻量级的包装类,一瓢一瓢地把水从一个缸复制到另外一个缸
BufferInputStream则是自带缓冲区,默认缓冲区大小为8×1024一桶一桶地把水从一个缸复制到另外一个缸。
三、对象流
将对象信息写入文件或从文件读取对象信息。 通过java.io包中的ObjectlnputStream和ObjectOutputStream两个类实现的。
1.写对象数据流
Date d=new Date( );//一个对象d FileOutputStream f=new FileOutputStream("date.ser"); ObjectOutputStream s=new ObjectOutputStream(f);//输出文件 try{ s.writeObject(d);//将对象d写入文件 s.close( );//关闭文件 }catch(IOException e){ e.printStackTrace( ); }
2.读对象数据流
Date d=null; FilelnputStream f=new FilelnputStream("date.ser"); ObjectlnputStream s=new ObjectlnputStream(f); try{ d=(Date)s.readObject();//读取对象d信息 s.close( ); }catch(IOException e){ e.printStackTrace( ); }
注意,方法readObject()把数据流以Object类型返回,返回内容应该在转换为正确的类名之后再执行该类的方法。
四、序列化
1.序列化的概念
概念:将对象的状态信息转换为可以存储或传输的形式的过程,使对象信息长久保存到文件 序列化是一种用来处理对象流的机制
要序列化一个对象,必须与特定的对象输出/输入流联系起来,通过对象输出流将对象状态保存下来,或是将对象保存到文件中,之后再通过对象输入流将对象状态恢复。 该功能是通过java.io包中的ObjectOutputStream和ObjectlnputStream两个类实现的。
2.对象结构表
用关键字transient防止数据被序列化
第三节基本字符流
一、读者和写者
InputStreamReader和OutputStreamWriter类可以用于不同平台间编码方式转换。
构造方法
·InputStreamReader(InputStream in):默认规范。 ·InputStreamReader(InputStream in,String enc):指定规范enc ·OutputStreamWriter(OutputStream out):默认规范。 ·OutputStreamWriter(OutputStream out,String enc):指定规范enc。
读者提供的方法
·void close( ) ·void mark(intreadAheadLimit) ·boolean markSupported( ) ·int read( ) ·int read(char[ ]cbuf) ·int read(char[ ]cbuf, int off, int len) ·boolean ready( ) ·void reset( ) ·long skip(longn)
写者提供的方法
·void close( ) ·void flush( ) ·void write(char[ ] cbuf) ·void write(char[ ] cbuf,int off,int len) ·void write(int c) ·void write(String str) ·void write(String str,int off,int len)
二、缓冲区读者和写者
BufferedlnputStream和BufferedOutputStream,缓冲区字符流。
构造方法
BufferedReader(Reader r)
BufferedWriter(Writer w)
常用方法
readLine():读一行
newLine():写一空白行
第四节文件的处理
一、File类
Java提供了File类,用于处理与文件相关的操作。 File对象可以用来生成与文件(及其所在的路径)或目录结构相关的对象。 不同的系统可能会有不同的目录结构表示法,但使用File类可以达到与系统无关的目的,这里使用的是抽象的路径表示法。 java.io.File类提供了获得文件基本信息及操作文件的一些方法。
与文件名相关的方法
·String getName( ):获取文件名。 ·String getPath( ):获取文件路径。 ·String getAbsolutePath( ):获取文件绝对路径。 ·String getParent( ):获取文件父目录名称。 ·boolean renameTo(File newName):更改文件名,成功返回true,否则返回false。
文件测定方法
·boolean exists( ):文件对象是否存在。 ·boolean canWrite( ):文件对象是否可写。 ·boolean canRead( ):文件对象是否可读。 ·boolean isFile( ):文件对象是否是文件。 ·boolean isDirectory( ):文件对象是否是目录。 ·boolean isAbsolute( ):文件对象是否是绝对路径。
常用文件信息和方法
·long lastModified( ):获取文件最后修改时间。 ·long length( ):获取文件长度。 ·boolean delete( ):删除文件对象指向的文件,成功则返回true,否则返回false。
二、随机访问文件
RandomAccessFile类可以在文件中的任何位置查找或写数据。
1.使用文件名
myRAFile=new RandomAccessFile(String name,String mode);
2.使用文件对象
myRAFile=new RandomAccessFile(File file,String mode);
参数mode决定是以只读方式(“r”)还是以读写方式(“rw”)访问文件。 例如,可以打开一个数据库进行更新:
RandomAccessFile myRAFile; myRAFile=new RandomAccessFile("db/stock.dbf","rw");
移动文件读写指针的方法
对象RandomAccessFile读写信息的方法同数据输入/输出对象的方法相同, 它可以访问DatalnputStream和DataOutputStream类中的所有read( )和write( )方法
·long getFilePointer( ):返回文件指针的当前位置。 ·void seek(longpos):将文件指针置于指定的绝对位置。位置值以从文件开始处的字节偏移量pos来计算,pos为0代表文件的开始。 ·long length( ):返回文件的长度。位置值为length( ),代表文件的结尾。为文件添加信息时可以利用随机访问文件来完成文件输出的添加模式
第八章 图形界面设计
第一节 AWT与Swing
java抽象窗口工作集 Swing组件与AWT组件最大的不同是Swing组件在实现时不包含任何本地代码 组件是构成图形用户界面的基本元素。 按钮(JButton)、文本输入框(JTextField)、标签(JLabel)等都是组件 框架(Frame)、面板(Panel)等组件称为容器(Container)
第二节 容器
一、顶层容器
组件可以分为容器组件和非容器组件 容器组件是指可以包含其他组件的组件,又分为顶层容器和一般用途容器 Swing中提供了4种顶层容器,分别为JFrame、JApplet、JDialog和JWindow。
构造方法
JFrame( ):构造一个初始时不可见、无标题的新框架窗体。 JFrame(String title):创建一个初始时不可见、具有指定标题的新框架窗体。
常用方法
·void setBounds(intx,inty,intwidth,int height):移动并调整框架大小。左上角位置的横纵坐标分别由x和y指定,框架的宽高分别由width和height指定。 ·void setSize(intwidth,int height):设置框架的大小,宽度是width,高度是height。 ·void setBackground(Color bg):使用颜色bg设置框架的背景色。 ·void setVisible(booleanaFlag):设置框架可见或不可见。 ·void pack( ):调整框架的大小,以适合其子组件的首选大小和布局。 ·void setTitle(String title):设置框架的标题为字符串title。 ·Container getContentPane( ):返回此框架窗体的内容窗格对象。 ·void setLayout(LayoutManager manager):设置布局管理器。
JFrame()示例
public static void main(String[] args) throws FileNotFoundException { // 创建一个JFrame实例,带有标题 JFrame frame = new JFrame("JFrameDemo"); // 创建一个JButton实例,按钮带文件 JButton butt = new JButton("点我"); // 将按钮放到JFrame的中央 frame.getContentPane().add(butt, BorderLayout.CENTER); // 将JFrame设置为适当的大小 frame.pack(); // 显示JFrame frame.setVisible(true); // 退出时关闭窗口 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
二、内容窗格
JPanel 是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用
通过顶层容器getContentPane()方法获得其默认的内容窗格
Container contentPane=frame.getContentPane( ); contentPane.add(button,BorderLayout.CENTER);
创建一个新的内容窗格
JPanelcontentPane=new JPanel( );//创建JPanel实例 contentPane.setLayout(new BorderLayout( ));//创建布局管理器 contentPane.add(button,BorderLayout CENTER);//添加组件 frame.setContentPane(contentPane);//添加内容窗格
三、面板
JPanel面板
JPanel面板是一种容器,继承自java.awt.Container类,JPanel面板可以聚集一些组件来布局,但必须依赖于JFrame窗体进行使用
构造方法
·JPanel( ):创建具有FlowLayout布局的新面板。 ·JPanel(LayoutManager layout):创建具有指定布局管理器的新面板。
JScrollPane滚动面板
在一个较小的容器中显示一个较大的内容情况,使用JScrollPane面板,JScrollPane面板是带滚动条的面板,它也是一种容器,只能放置一个组件
构造方法
·JScrollPane( ):创建一个空的JScrollPane,需要时水平和垂直滚动条都可显示。 ·JScrollPane(Component view):创建一个显示指定组件内容的JScrollPane,只要组件的内容超过视图大小,就会显示水平和垂直滚动条。
第三节 标签及按钮
一、标签(JLabel)
最简单的Swing组件 通常用于显示提示性的文本信息或图标,不可被编辑
构造方法
·JLabel( ):创建一个既不显示文本信息又不显示图标的空标签。 ·JLabel(Icon image):创建一个显示图标的标签。 ·JLabel(String text):创建一个显示文本信息的标签。 ·JLabel(Icon image,int horizontal Alignment):创建一个显示图标的标签,水平对齐方式由int型参数horizontalAlignment指定。 ·JLabel(String text,inthorizontalAlignment):创建一个显示文本信息的标签,水平对齐方式由int型参数horizontalAlignment指定。 ·JLabel(String text,Iconicon,inthorizontalAlignment):创建一个同时显示文本信息和图标的标签,水平对齐方式由int型参数horizontalAlignment指定。
//构造一个以右对齐方式显示的标签 JLabel label=new JLabel(“Hello”,JLabel.RIGHT);
其他常用方法
setText(String s):设置标签显示文字; getText():获取标签显示文字; setBackground(Color c):设置标签的背景颜色,默认背景颜色是容器的背景颜色; setForeground(Color c):设置标签上的文字的颜色,默认颜色是黑色。
二、按钮
JButton类的构造方法
·JButton( ):创建一个既没有显示文本又没有图标的按钮。 ·JButton(Icon icon):创建一个没有显示文本但有图标的按钮。 ·JButton(String text):创建一个有显示文本但没有图标的按钮。 ·JButton(String text,Icon icon):创建一个既有显示文本又有图标的按钮。
JButton类的其他常用方法
·public void setMnemonic(int mnemonic):设置当前按钮的键盘助记符(热键)。 ·public void setText(String text):设置按钮的文本。 ·public String getText( ):返回按钮的文本。 ·public void setToolTipText(String text):设置要显示的提示文本。 ·public void addActionListener(ActionListener l):为按钮添加事件侦听程序
三、切换按钮、复选按钮及单选按钮
JToggleButton
JCheckBox
JRadioButton
第四节 布局管理器
FlowLayout(流式布局)
组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列
构造方法
· FlowLayout( ):创建一个默认的FlowLayout布局管理器,居中对齐,默认的水平和垂直间距是5个像素。 · FlowLayout(int align):创建一个新的FlowLayout布局管理器,对齐方式是指定的,默认的水平和垂直间距是5个像素。 · FlowLayout(intalign,inthgap,intvgap):创建一个新的FlowLayout布局管理器,具有指定的对齐方式以及指定的水平和垂直间距。
BorderLayout(边界布局)
容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。
GridLayout(网格布局)
容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。
构造方法
· GridLayout( ):创建一个只有一行的网格,网格的列数根据实际需要而定。 · GridLayout(int rows,int cols):创建具有指定行数和列数的网格布局。 · GridLayout(introws,intcols,inthgap,intvgap):创建具有指定行数和列数,且有指定水平间距和垂直间距的网格布局。
CardLayout(卡片布局)
如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况
BoxLayout(箱式布局)
允许在容器中纵向或者横向防止多个控件
空布局
不使用布局管理器,按照控件自身提供的大小、位置信息放置控件
第五节 事件处理
一、事件处理模型
用户在程序界面所进行的操作称为用户事件。对事件的响应称为事件处理。 事件侦听程序:为了接收并处理某类用户事件,组件必须注册相应的事件处理程序,这种事件处理程序称为事件侦听程序(Listener,也称为侦听器)
public interface ActionListenr extends EventListener{ public void actionPerformed(ActionEvent e);}
二、事件的种类
三、事件适配器
第六节 绘图甚础
一、颜色
Color类
RGB
二、字体
Font(字体,样式,字号)
三、Graphics类的基本功能
四、Graphics2.0绘图
1.图形代态属性
(1) stroke属性
控制线条的宽度、笔形样式、线段连接方式或短划线图案
BasicStroke(float w,int cap, int join)
(2) paint属性
控制填充效果
GradientPaint(float x1,float y1,Color c1,float x2,float y2,Color c2,Boolean cyclic)
(3) transform属性
用来实现常用的图形平移、缩放和斜切等变换操作
创建AffineTransform对象的方法
创建AffineTransform对象的方法
(4) clip属性
用于实现剪裁效果
调用setClip()方法确定剪裁区的Shape
(5) composit属性
设置图形重叠区域的效果
2.Graphics2D的方法
3.Graphics2D的几何图形类
第九章 swing组件
第一节 组合框与列表
1、组合框
JComboBox,是下拉式菜单,两种形式一种不可编辑,一种可编辑。
构造方法
JComboBox( ):创建一个没有任何可选项的默认组合框
JComboBox(Object[] items):根据Object数组创建组合框,Object数组的元素即为组合框中的可选项。
String [] itemList={"one","Two","Three","Four","Five"}; JComboBox jcb=new JComboBox(itemList);//使用数组itemList创建组合框
常用方法
Object getSelectedItem( ):返回当前所选项。
2、列表
列表(JList)是可供用户进行选择的一系列选项。
构造方法
JList( ):构造一个空列表。
JList(Object[] listData):构造一个列表,列表的可选项由对象数组listData指定。
JList(Vector<?>listData):构造一个列表,使其显示指定Vector中的元素。
String [] data={"one","two","three","four"}; JList dataList=new JList(data);
JList中提供了addListSelectionListener(ListSelectionListenerlistener)方法,用于注册对应的事件侦听事件程序 在ListSelectionListener接口中,只包含一个方法:public void valueChanged(ListSelectionEvent e)
第二节 文本组件
1、文本域
一个单行的文本输入框
构造方法
JTextField( ):构造一个空文本域。
JTextField(int columns):构造一个具有指定列数的空文本域,int型参数columns指定文本域的列数。
JTextField(String text):构造一个显示指定初始字符串的文本域,String 型参数text指定要显示的初始字符串。
JTextField(String text,int columns):构造一个具有指定列数并显示指定初始字符串的文本域String 型参数text指定要显示的初始字符串,int型参数columns指定文本域的列数。
JTextField tf=new JTextField("Single Line",30); //创建一个列数为30,初始字符串为“Single Line”的文本域
常用方法
String getText()
2、文本区
是一个多行多列的文本输入框
构造方法
JTextArea( ):构造一个空文本区。
JTextArea(String text):构造一个显示指定初始字符串的文本区,String 型参数text指定要显示的初始字符串。
JTextArea(introws,int columns):构造一个具有指定行数和列数的空文本区,int型参数rows和columns分别指定文本区的行数和列数。
JTextArea(String text,introws,int columns):构造一个具有指定行数和列数并显示指定初始字符串的文本区,String 型参数text指定要显示的初始字符串,int型参数rows和columns指定文本区的行数和列数。
JTextArea ta=new JTextArea(“Initial text”,4,30); //4行、30列,显示初始字符串“Initial text”的文本区
第三节 菜单组件
1、菜单栏及菜单
菜单构造方法
JMenu( ):构造没有文本的新菜单。
JMenu(String s):构造具有指定标签的新菜单,String 型参数s指定了菜单上的文本。
JMenu(String s,boolean b):构造具有指定标签的新菜单,指示该菜单是否可以分离。
菜单项构造方法
JMenuItem( ):创建不带有设置文本或图标的菜单项。
JMenuItem(Icon icon):创建一个只显示图标的菜单项,图标由Icon型参数icon指定。
JMenuItem(String text):创建一个只显示文本的菜单项,文本由String 型参数text指定。
JMenuItem(String text,Icon icon):创建一个同时显示文本和图标的菜单项,文本由String 型参数text指定,图标由Icon型参数icon指定。
JMenuItem(String text,int mnemonic):创建一个显示文本并且有快捷键的菜单项,文本由String 型参数text指定,快捷键由int型参数mnemonic指定。
2、复选菜单项和单选菜单项
复选菜单项构造方法
·JCheckBoxMenuItem( ):创建一个未设置文本或图标、最初也未选定的复选框菜单项。
·JCheckBoxMenuItem(Icon icon):创建一个有图标、最初未被选定的复选框菜单项。
·JCheckBoxMenuItem(String text):创建一个带文本、最初未被选定的复选框菜单项。
·JCheckBoxMenuItem(String text,boolean b):创建具有指定文本和选择状态的复选框菜单项。
·JCheckBoxMenuItem(String text,Icon icon):创建具有指定文本和图标、最初未被选定的复选框菜单项。
·JCheckBoxMenuItem(String text,Iconicon,boolean b):创建具有指定文本、图标和选择状态的复选框菜单项。
单选菜单项构造方法
·JRadioButtonMenuItem( ):创建一个未设置文本或图标的单选按钮菜单项。
JRadioButtonMenuItem(Icon icon):创建一个带图标的单选按钮菜单项。
JRadioButtonMenuItem(Icon icon,boolean selected):创建一个具有指定图标和选择状态的单选按钮菜单项,但无文本。
JRadioButtonMenuItem(String text):创建一个带文本的单选按钮菜单项。
JRadioButtonMenuItem(String text,boolean selected):创建一个具有指定文本和选择状态的单选按钮菜单项。
JRadioButtonMenuItem(String text,Icon icon):创建一个具有指定文本和图标的单选按钮菜单项。
JRadioButtonMenuItem(String text,Iconicon,boolean selected):创建一个具有指定的文本、图标和选择状态的单选按钮菜单项。
第四节 对话框
1、对话框
可临时移动窗口,对话框也属于顶层容器
构造方法
JDialog(Dialog owner):创建一个没有标题但将指定的对话框作为其所有者的无模式对话框。
JDialog( Dialog owner, boolean modal):创建一个没有标题但有指定所有者的对话框,boolean型参数modal指定对话框是有模式或无模式。
JDialog(Dialog owner, String title):创建一个具有指定标题和指定所有者的无模式对话框。
JDialog( Dialog owner, String title, boolean modal):创建一个具有指定标题和指定所有者的对话框,boolean型参数 modal指定对话框是有模式或无模式。
JDialog(Frame owner):创建一个没有标题但将指定的框架作为其所有者的无模式对话框。
JDialog(Frame owner, boolean modal):创建一个没有标题但有指定所有者的对话框,boolean型参数 modal指定对话框是有模式或无模式。
JDialog(Frame owner, String title):创建一个具有指定标题和指定所有者框架的无模式对话框。
JDialog( Frame owner, String title, boolean modal):创建一个具有指定标题和指定所有者框架的对话框,boolean型参数 modal指定对话框是有模式或无模式
第十章 多线程
第一节 线程和多线程
一、线程的既念
进程:在程序要投入运行时,系统从程序入口开始按语句的顺序(包括顺序、分支和循环结构)完成相应指令直至结尾,再从出口退出,整个程序结束。
线程是比进程更小的执行单位,线程是进程的一部分,线程是通过包java.lang中定义的类Thread来实现的,Thread类本身只是线程的虚拟CPU
二、线程的结构
虚拟CPU,封装在java.lang.Thread类中,它控制着整个线程的运行。
执行的代码,传递给Thread类,由Thread类控制按序执行。
处理的数据,传递给Thread类,是在代码执行过程中所要处理的数据。
三、线程的状态
1.新建(New)
2.可运行状态(Runnable)
线程已经启动,处于线程的run()方法之中。 可以运行但没在运行的线程都排在一个队列中,这个队列称为就绪队列。 调用线程的start()方法可使线程处于可运行状态。
3.死亡(Dead)
线程死亡的原因有两个:一是run()方法中最后一个语句执行完毕,二是当线程遇到异常退出时便进入了死亡状态。
4.阻塞(Blocked)
一个正在执行的线程因特殊原因,被暂停执行,就进入阻塞状态。阻塞时线程不能进入就绪队列排队,必须等到引起阻塞的原因消除,才可重新进入队列排队。 引起阻塞的原因很多,不同原因要用不同的方法解除。sleep()和wait()是两个常用的引起阻塞的方法。
5.中断线程
第二节创建线程
一、继承Thread类创建线程
用Thread类的子类创建线程的过程包括以下3步
1)从Thread类派生出一个子类,在类中一定要实现run()。 class Lefthand extends Thread { public void run(){…} //线程体 } 2)然后用该类创建一个对象。如 Lefthand left=new Lefthand( ); 3)用start()方法启动线程。如left.start( );。
举例
编写线程体
创建和启动线程
二、实现Runnable接口创建线程
Runnable是Java中用以实现线程的接口 Runnable接口中只定义了一个方法就是run()方法,也就是线程体。 用Runnable接口实现多线程时,也必须实现run()方法,也需要使用start()启动线程
举例
//Runnable接口创建线程 public class xyz implements Runnable { int i; public void run( ) { while (true) { System.out. println (" Hello " + i++); }}}
三、创建线程的两种方法的使用条件
第三节线程的基本控制
一、线程的启动
start():启动线程对象,让线程从新建状态转为就绪状态。 run():用来定义线程对象被调度之后所执行的操作,用户必须重写run( )方法。 yield():强制终止线程的执行。 isAlive():测试当前线程是否在活动。 sleep(int millsecond):使线程休眠一段时间,时间长短由millsecond决定,单位为ms。 void wait():使线程处于等待状态。
二、线程的调度
线程调度通常是抢占式
Java的线程调度的优先级策略
·优先级高的先执行,优先级低的后执行。 ·每个线程创建时都会被自动分配一个优先级,默认时,继承其父类的优先级。 ·任务紧急的线程,其优先级较高。 ·同优先级的线程按“先进先出”的调度原则。
Thread类有3个与线程优先级有关的静态量
·MAX_PRIORITY:最高优先级,值为10。 ·MIN_PRIORITY:最低优先级,值为1。 ·NORM_PRIORITY:默认优先级,值为5。
Thread类中有关优先级的几个常用方法
·void setPriority(int newPriority):重置线程优先级。 ·int getPriority():获得当前线程的优先级。 ·static void yield( ):暂停当前正在执行的线程,即让当前线程放弃执行权。
三、结束线程
interrupt( )方法中断线程的执行。 Thread类中的静态方法currentThread( )来引用正在运行的线程。 isAlive()来获取一个线程是否还在活动状态的信息。
四、挂起线程
1.sleep()
用于暂时停止一个线程的执行。
2.wait()和notify ()/notifyAll ()
wait()方法导致当前的线程等待, 直到其他线程调用此对象的notify()方法或notifyAll()方法, 才能唤醒线程。
3.join()
将引起现行线程等待,直至join()方法所调用的线程结束。
第四节 线程的互斥
一、互斥问题的提出
栈具有“后进先出”模式
二、对象锁定标志
第五节 线程的同步
一、同步问题的提出
二、解决方法