




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程介绍选修课(2.5学分)课程目的: 了解并掌握java编程技术 理解面向对象程序设计的思路和方法 掌握网络编程的基本技术 考核方式: 出勤 + 平时作业 30% 试卷成绩 70%1Java语言概述语言概述Java环境Java源程序编译字节码文件Java虚拟机执行LinuxWindowsMac3Java2 家族 在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用。J2SE (Standard) J2SE 包含那些构成Java语言核心的类。 比如:数据库连接、接口定义、输入/输出、网络编程 J2EE (Enterprise) J2EE 包含J2
2、SE 中的类,并且还包含用于开发企业级应用的类。 比如:EJB、servlet、JSP、XML、事务控制 J2ME (Micro) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。 比如:呼机、智能卡、手机、PDA、机顶盒 4Java语言的核心机制 Java语言包含三种核心机制: Java 虚拟机 垃圾收集机制 代码安全检测5Java 虚拟机(JVM) 在一台计算机上由软件或硬件模拟的计算机。在一台计算机上由软件或硬件模拟的计算机。JavaJava虚拟机虚拟机读取并处理经编译过的平台无关的字节码读取并处理经编译过的平台无关的字节码classclass文件。文件。 JavaJav
3、a编译器针对编译器针对JavaJava虚拟机产生虚拟机产生classclass文件,因此是独立文件,因此是独立于平台的。于平台的。JavaJava解释器负责将解释器负责将JavaJava虚拟机的代码在特定的虚拟机的代码在特定的平台上运行。运行原理如图。平台上运行。运行原理如图。6垃圾收集机制(Garbage collection) 在C/C+ 等语言中,由程序员负责回收无用内存。 Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。 并在JVM的空闲时,检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预
4、。 无析构函数。System.gc7代码安全性检测(Code Security) Java执行代码的时候,由JVM对运行的代码进行安全性检测,当进行一些非法操作的时候,比如修改一些系统设置的时候,JVM会发出警告。8Java有那些特性? 面向对象封装性、多态性、继承性、动态链接 操作平台无关性严格的语言定义:“没有依据机器的不同而不同” 或“由编译器决定”等字眼,最后的目标码都是一致的,初值都是确定的9Java程序的几种类型Application “Java应用”是可以独立运行的Java程序。 以main()方法作为程序入口 由Java解释器加载执行。10Applet 没有main()方法作为
5、程序入口,不能独立运行 由浏览器或appletviewer加载执行。Client 机Server 机Browser网页字节码11Servlet/JSP 是Java技术对CGI 编程的解决方案。 是运行于Web server上的、作为来自于Web browser 或其他HTTP client端的请求 和 在HTTP server上的数据库及其他应用程序之间的中间层程序。12J2SDK的主要功能java/bin的目录下包含义下主要文件:uJavac.exe: Java编译器, 用来将java程序编译成 BytecodeuJava.exe: Java编译器,执行已经转换成Bytecode的 java
6、应用程序.uJavadoc.exe:文档生成器,创建HTML文件ujdb: Java调试器, 用来调试java程序ujavap: 反编译,将类文件还原回方法和变量.uAppletviewer.exe : Java解释器, 用来解释已经转换成Bytecode的java小应用程序.13知识点Java程序3种类型JDK常用命令 Java虚拟机14Java 编程基础变量和数据类型类和对象重载方法和重写方法15基本数据类型Java 共有八种基本数据类型:- 四种整数类型四种整数类型( (bytebyte、shortshort、intint、long)long)- 两种浮点数类型两种浮点数类型( (flo
7、atfloat、double)double)- 一种字符类型一种字符类型( (char)char)- 一种布尔类型一种布尔类型( (boolean)boolean)16Java 中的数组数组用来使用同一个变量名存储同样的类型的一组变量Java 中的数组是这样申明的 语法语法: : Datatype name_of_array ; 例子例子( (ArrayProblem.javaArrayProblem.java):):int array_1 ;int array_2 ; 17数组属于复杂数据类型由类型相同的元素组成的有顺序的数据集合数组是固定的不能扩展可以存储基本数据类型或对象通过数组名和下标
8、可以访问各元素18该包中包含的类是Java编程语言设计的基础其中比较重要的类包括:-ObjectObject-封装类封装类类体系结构的根类体系结构的根 封装基本数据类型,为基封装基本数据类型,为基本数据类型建立对象表达本数据类型建立对象表达式式 19java.util java.util 包括了Java 语言中的一些低级的实用工具,比如:处理时间的Date 类、处理变长数组的 Vector 类、实现栈的 Stack 类和实现杂凑表的HashTable类等,使用它们开发者可以更方便、快捷地编程。20知识点概要 Java是严格区分大小写、完全面向对象的语言,类是程序的基本单位。 一个应用程序可以由
9、多个源程序文件组成,扩展名为.java。 Java中的三种注释 一个文件中可定义若干个类,但最多只能定义一个public访问修饰的类,称该类为主类。 在主类中定义main()方法 21知识点标识符的命名规则 标识符的合法符号包括:字母、数字、下划线_及美元符号$。字母为大写或小写的英文字母,数字为09; 标识符的首字母必须为字母、下划线或美元符号,即数字不允许为标识符的首字母; 标识符区分大小写; 标识符不允许与关键字相同,但允许关键字作为标识符的一部分; 标识符应遵循命名规范,如:类名的首字母大写、属性与方法名的首字母小写。 22知识点常量和变量、数据类型数组 数组是具有相同类型的数据的集合
10、,数组元素的类型可以使基本数据类型,也可以使类或接口; 使用数组名和下标可以唯一确定数组中的每个元素,数组下标的索引号从0开始,故最后一个元素的索引号应是(数组长度-1); 数组必须先经过声明和初始化后才能使用。使用new关键字动态初始化数组;字符串类、Math类及其常用方法 数据类型转换 表达式中涉及不同类型的数据时,需要进行数据类型转换。类型转换包括:自动类型转换和强制类型转换 23控制结构选择if-elseif-elseswitchswitch循环while while do-while do-while forforJava 支持下列支持下列控制结构:选控制结构:选择、循环、跳择、循环
11、、跳转转 跳转跳转 break continue 24知识点控制结构 控制结构包括:顺序结构、选择分支结构、循环结构、跳转结构。 选择分支结构:if-else、switch-case、 循环结构:while、do-while、for 跳转结构:break、continue25类和对象类和对象目标掌握如何创建类和构造对象掌握方法的重载和覆盖了解类的继承了解包概念27Java 中的类Java 中的一切都是对象。所有的对象都来自类,类是用户自己定义的或是系统内置的 。类是对象的抽象结构,对象是类的物理实现。当类建立完毕后,就可以用来建立实例或对象。28类的声明和newString s = new S
12、tring(“a string”);String s 是什么意思?a strings一个字符串类的对象被创建对象被初始化为 “a string”,内存空间被分配一个能够指向字符串对象的引用(变量)被创建变量s指向内容为“a string”的字符串对象29类的继承重载与重写方法有两种类型的方法:重载方法和重写方法 重载方法是那些位于同一类中、同名但具有不同参数列表的方法。Overloading.java 重写方法是那些既存在于超类中又存在于子类中的方法。OverrideDemo.java30类的继承 super 与 this“super”关键字用于指示父类对象“this”关键字用于指示当前对象。
13、31方法的参数值传递(值拷贝):基本类型参数地址传递(引用传递):抽象数据类型(引用类型)32基本类型的值传递3.143.14AB0 x2F0 x2FAB引用类型的地址传递33包在Java中,包主要有以下用途 : 包允许将类组合成较小的单元包允许将类组合成较小的单元 有助于避免命名冲突有助于避免命名冲突 包允许在更广的范围内保护类、数据和方法包允许在更广的范围内保护类、数据和方法 包可以是类、接口和子包的集合34构造函数构造函数名称与类名称相同(普通函数可以名字相同,不会构造,有返回类型,有参数)构造函数没有返回类型其任务是在创建对象时初始化其内部状态class Fruit boolean s
14、eedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) seedLess = seed; seasonal = season; price = p; 35重载构造函数Java 为每一个类自动提供缺省构造函数缺省构造函数将成员变量的值初始化为缺省值一旦创建了自己的构造函数,缺省的构造函数将不复存在。重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。 public class constructOverload int x; constructOverload()
15、x=0; System.out.println(不带参数的构造函数不带参数的构造函数); constructOverload(int x) this.x=x; System.out.println(带一个参数的构造函数带一个参数的构造函数); 36extends关键字extends关键字用于继承类。声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name /类体 没有没有extendsextends,默认父类为默认父类为ObjectObject 只能有一个父类,即单继承只能有一个父类,即单继承 子类继承父类的全部成员子类继承父
16、类的全部成员注意注意37this关键字public class PassTest int x; PassTest(int x) this.x=x; public void passingValue() System.out.println(“x 等于等于 +x); public static void main(String args) PassTest test = new PassTest(10); test.passingValue(); v关键字关键字 this 与对象关联与对象关联v它用于指示当前对象它用于指示当前对象指明此对象的变指明此对象的变量量 x x 应赋值为应赋值为通过构造
17、函数传通过构造函数传递的自变量递的自变量 x x 的值。的值。 38super关键字super关键字用来解决如何直接访问或初始化从父类继承来的属性。super有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类成员。 它用在对象的构造函数中,将构造细节通过继承链往上传递。super()必须是在子类构造函数中的第一个执行语句。39类型转换执行自动类型转换需要两个条件: 接受转换的两种类型是兼容的接受转换的两种类型是兼容的( (所有数字类型所有数字类型) )子子-父父 目的类型数的范围比源类型的大目的类型数的范围比源类型的大( (从从intint到到float)float)强制类型转
18、换语句的通用格式如下: (目标类型)valueUndergraduate s1 = new Undergraduate(); Graduate s2=new Graduate();Graduate s3=new Graduate();Student x;x=s1;if (x instanceof Graduate) s3= (Graduate)x; 注意:从父类到子类注意:从父类到子类的转换,建议在转换的转换,建议在转换前判断父类是否指向前判断父类是否指向子类的对象子类的对象40知识点类的定义 类是面向对象编程的基本要素。由类来定义对象的成员变量(又称为属性)和成员方法,并由类创建实例对象。
19、类的定义包括:类首的声明 和类体的定义 两部分组成。 类体的定义包括:属性声明 、成员方法定义和构造方法定义构造方法 构造方法是类用来创建对象、初始化类的属性的一种特殊方法,有别于类的成员方法; 构造方法的特殊性; 构造方法通过new关键字在创建对象时由系统自动调用,不允许用户直接调用; 构造方法与类同名、无返回值、无void、一般定义为public访问类型,可以重载和继承。 对象初始化; 继承; 方法重载;41知识点对象的创建 对象是类的具体事例。由类创建对象的过程称为实例化类或类的实例化,即为对象分配内存空间并初始化对象; 创建对象包括:声明对象引用变量、建立对象实体、初始化。对象创建成功
20、,就可通过对象引用变量来使用 对象初始化;继承; 方法重载;42类的高级特性类的高级特性关键字关键字目标及知识点掌握类的静态成员掌握final关键字用法 掌握抽象类的定义和用法(函数可以写具体,但不能构造对象)掌握接口的定义和用法掌握高级访问控制 44类的静态成员类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。 类的静态成员可以与类的名称一起使用,而无需创建类的对象。 静态变量或方法也称为类的变量或方法。类加载:如果类的静态成员已经初始化,就不会进行类加载;在运行的时候需赋值再构造就会引起类加载45静态方法与静态方法相关的几个要点: 类的静态方法只能访问其他的静态成员类的静态方法只
21、能访问其他的静态成员 静态方法没有静态方法没有thisthis 非静态方法不能覆盖静态方法(可重载非静态方法不能覆盖静态方法(可重载 传递参数不同)传递参数不同)class StaticFun static int i = 10; int j; static void setValue(int x) j=x;/出错出错 System.out.println( + i); 不能访问非静态变量不能访问非静态变量j,可以访问静态变量可以访问静态变量iclass StaticTest static void test() class Staticex extends StaticTest void t
22、est() /出错出错 46静态块如果需要通过计算来初始化静态变量,可以声明一个静态块。静态块仅在该类被加载时执行一次。只能初始化类的静态数据成员。 class TryInitialization static int values = new int10; /静态数组成员静态数组成员 static for(int i=0; ivalues.length; i+) valuesi = (int)(100.0*Math.random(); 47final 关键字final 修饰符可应用于类、方法和变量。final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。 48
23、抽象类 2-1定义抽象类的目的是提供可由其子类共享的一般形式。子类可以根据自身需要扩展抽象类。 抽象类不能实例化。抽象方法没有函数体。 abstract void display();抽象方法必须在子类中给出具体实现。(子类也有可能是抽象类,实体子类时给出具体实现)49抽象类2-2在以下情况下,某个类将成为抽象类: 当一个类的一个或多个方法为抽象方法时。当一个类的一个或多个方法为抽象方法时。 当该类为一个抽象类的子类,并且没有为所有抽当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。象方法提供实现细节或方法主体时。 当一个类实现一个接口,并且没有为所有抽象方当一个类实现
24、一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。法提供实现细节或方法主体时。50接口纯抽象类public interface InterfaceName extends BaseInterfaces 在interface中所有的方法都是public的,即使你没有声明它是public的. 在interface中所有的数据成员都是public static final的,即使你没有声明。51实现interface实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。所有实现interface中的方法必须被声明为public. Interfa
25、ce可以从多个interface得到继承,但是不能继承类. Interface Vampire extends DangerousMonster, Lethal void drinkBlood();52接口Java 程序中,类一次只能继承一个类但可以实现多个接口。接口不能有任何具体的方法。接口也可用来定义可由类使用的一组常量。53interface 接口的多继承不同的类可以实现(implement)同一个接口,同一个类可以实现多个接口,在implements子句中用逗号分隔。 class A implements B,C,D Abstract or Concrete Base Classint
26、erface 1interface 2interface nBase Class Functionsinterface 1.interface 2interface n.54高级访问控制访问修饰符为:- public- protected- private如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限。55高级访问控制总结访问控制private成员缺省的成员protected成员public成员同一类中成员同一包中其他类不同包中子类 不同包中非子类 56内部类在类中定义的类称为内部类。内部类之外的类称为外部类。 内部类可以访问其外部类的所有变量和方法,并能够以和外部类的其他
27、非静态成员相同的方式直接引用它们。 内部类完全在其包围类的范围之内。外部类可以通过创建内部类的实例来访问内部类的方法和属性。匿名内部类只存在一次57对象的容纳对象的容纳数组(array)集合(collection) Set List Map59数 组所有容纳方式的基础比其它的容纳方式有更高的效率60Arrays为数组提供一系列静态方法。 equals(xx,xx) 相同类型的两个数组,值是否相同。如果数组元素为对象,那么将调用对象的equals()方法来判断是否相同。 sort(xx ) 按照升序排列数组,如果数组元素为对象,那么将调用对象的compareTo()来得到结果。 fill(xx,
28、value) 为当前所有数组元素赋参数2的值。 binarySearch (xx,value)在数组xx找寻值为value的元素,并且返回元素索引值。 asList( Object a ) 为数组生成一个List对象。61数组的特点优势: 效率高 可以容纳主类型数据缺点 不够灵活长度确定类型确定62集合Collection 对象的集合 对于重复没有特殊规定Set 无序的collection 不许重复List 有序collection 允许重复Map 多列的collection 值与键的成对存储63Iterator遍历对象的方式(对象)所有collection都有Iterator属性,可以通过i
29、terator() 获得。Iterator本身只提供向下搜索功能(next()),扩展的ListIterator提供向上搜索(previous()。Example-HamsterMaze64Collections为集合提供一系列静态方法比Arrays所提供的方法更加全面 max() replace() reverse() copy()65for-each循环static void printAll(Collection c)/对于数组或集合c中每一个元素ef o r ( O b j e c t e : c ) System.out.println(e); 66泛型(Generics)泛型为ja
30、va提供了类型安全. 类似于C+中的模板泛型的声明 class 名称 class ArrayList /E是其中的泛型,是任何对象或接口(除基本数据类型外)泛型的主要的用途和使用场合:涉及到暂存数据和读取数据的基本结构类及数组,字典对象时,都建议使用泛型67GUI编程编程目标了解 AWT 包及其组件掌握如何创建 GUI 程序掌握 AWT 组件的基本用法掌握如何使用布局管理器构造复杂的布局69抽象窗口工具包图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。AWT提供用于创建生动而高效的GUI的各种组件
31、。70容器 可以存放组件的区域,可以存放组件的区域,可在容器上进行可在容器上进行绘制和着色绘制和着色 java.awt包中的包中的Container类可直接或间接类可直接或间接派生出两个常用容器:派生出两个常用容器:框架(框架(Frame类)类)和面板(和面板(Panel类)。类)。 框架是一个带有边框的独立的窗口。框架是一个带有边框的独立的窗口。 面板是包含在窗口中的一个不带边框的面板是包含在窗口中的一个不带边框的区域。区域。 71容器 框架 框架是独立于框架是独立于Applet和浏览器的一个窗口。和浏览器的一个窗口。 可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建: Fra
32、me(): :创建一个不含标题的标准窗口创建一个不含标题的标准窗口 Frame(String Title): : 创建一个含有标题的窗口,创建一个含有标题的窗口,这个标题是由参数这个标题是由参数title指定的。指定的。 当一个当一个Frame窗口被创建以后,需要调用窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用方法来设置窗口的大小,并调用setVisible()来显示窗口。来显示窗口。72AWT组件 组件指可以放置在用户界面上的任何东西组件指可以放置在用户界面上的任何东西, ,可以将组件设置为可见或重新调整其大小。可以将组件设置为可见或重新调整其大小。 AWT支持的组
33、件:标签、文本域、文本区、支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。按钮、复选框、选择框等。 高级组件包括滚动条、滚动窗格和对话框。高级组件包括滚动条、滚动窗格和对话框。 向窗口加入一个组件:首先生成所需组件的向窗口加入一个组件:首先生成所需组件的实例,然后调用实例,然后调用add()方法,此方法是在方法,此方法是在Container类中定义的。类中定义的。73布局管理器 用户界面上的组件可以按不同方式排列。用户界面上的组件可以按不同方式排列。 Java使用布局管理器来管理这些排列方式使用布局管理器来管理这些排列方式。 每当需要重新调整屏幕大小或重新绘制屏每当需要重新调整屏幕大
34、小或重新绘制屏幕上任一项目时,就要用到布局管理器。幕上任一项目时,就要用到布局管理器。 AWT提供一组用来进行布局管理的类,称提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现为布局管理器或布局。所有布局都实现 LayoutManager接口。接口。74FlowLayout 是 Applet 和 面板的缺省布局管理器。组件从左上角到右下角进行排列。BorderLayout 按北、南、东、西、中的不同区域划分将组件排列于容器中。 GridLayout 将组件按行和列排列。所有组件大小相同。GridBagLayout 能将组件放置在最精确的位置。各组件的大小可以不同。CardLay
35、out可存储几个不同的布局管理器 75GUIAWT 事件模型目标事件控制的要点AWT 事件结构基本事件控制使用多个监听器匿名类7778总结2-1事件是描述事件源状态变化的对象。用户与GUI组件交互就会生成事件。事件源是一个生成(或触发)事件的对象。当这个对象的内部状态改变时,事件就会发生。 在Java事件处理中,所有的事件都派生自类EventObject。此类是在 java.util包中定义。79总结2-2java.awt.event 包中有四个语义事件:ActionEvent、AdjustmentEvent、ItemEvent、TextEvent。 在发生事件时,事件源将调用监听器定义的相应
36、方法。适配器类包括所有方法,但不包含功能。80GUI编程编程Swing回顾抽象窗口工具包(AWT)是一组类,用来创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。两种常用容器类:框架(Frame类)和面板(Panel类)AWT支持下列类型的组件:标签、文本域、文本区、按钮、复选框、列表框等。布局管理器类提供控制 GUI 组件物理布局的一种方式。82目标 3大图形控件体系大图形控件体系-AWT,SWT,Swing 描述描述 Swing 的结构的结构 使用使用 Swing GUI 的容器的容器 使用使用 Swing 文本组件文本组件 使用使用 Swing 中用于选择性输入的常用组件中用于选择性
37、输入的常用组件 使用使用 Swing 菜单菜单 83AWTAbstract Windows Toolkit 最原始的 Java GUI 工具包。 Java 技术的每个版本上都成为了一种标准配置 AWT只拥有所有平台上都存在的组件的公有集合。所以你在AWT中无法获取如表或树等高级组件,因为它们在某些平台上不支持。AWT的组件特征同样遵循这一原则。它只提高平台上公有的特征。例如AWT按钮不能附着图片,因为在Motif平台上,按钮是不支持图片的。 84SWTSWT(Standard Widget Toolkit )它提供一个各个平台上包含的组件的并集。思路是如果一个组件在某个平台上包含,那么SWT就
38、会包装它并用java代码和JNI来调用它。如果一个组件在某一平台上不存在,它就模拟组件。一个SWT Composite类似于AWT的Canvas。以这种方式,SWT提供了较AWT更为丰富的组件集。 在组件特征方面,SWT类似于AWT。在之后的版本中,许多缺失的特征采用模拟的方式补全。但仍有许多特征无法采用纯粹的模拟实现。SWT将组件的控制交给本地操作系统。它难以扩展。只有例如图形装饰等特征可以借助模拟绘制来自定义实现。所以严格意义上将,SWT组件的组件集和特征因其难于扩展而不如Swing来得丰富。 85SwingJava1.2引入称为Swing的新的GUI组件库。 Swing包括javax.s
39、wing包及其子包。Swing有一个与平台无关的实现,而且具有一个艺术状态的属性集。尽管Swing独立于AWT,但它是依照基本的 AWT类实现的。86AWT,SWT,Swing比较AWT,SWT因为直接使用本地组件,使其在性能上有非常大的优势Swing为纯java开发,在特征表现上有优势如果你只开发用于某一特性平台(当然,只能是主流平台),SWT就有优势了,它可以集成这些平台的特有的功能 87Swing 应用程序的容器层次设计 GUI 时,都有用于放置可视化组件的主窗口。Container 对象可用于将组件组合在一起。容器中的组件根据特定布局排列。Swing 中的容器有两类: - 顶级容器 -
40、 中间容器 88顶级容器JFrame:用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带 GUI 的应用程序通常至少使用一个框架窗口。JDialog:用于对话框的类。JApplet:用于使用 Swing 组件的 Java Applet 的类。89中间容器JPanel:最灵活、最常用的中间容器。JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按钮)。90Swing的Look and FeelSwin
41、g 提供了三种“外观和感觉”。Windows系统;Motif X Window系统(UNIX下)Metal(Swing的新的交平台)。 通过Look and Feel机制,我们可以使程序的设计者任意转换程序的人机界面来对应不同的操作系统平台。91总结 2-1Java 基本类是作为 AWT 的扩展而开发的Swing 是 JFC 下的一组类,提供轻量级可视化组件,可用于创建美观的 GUI Swing 中的容器有两类:顶级容器、中间容器通过 Swing标签既可以显示文本,也可以显示图像92总结 2-2JTextComponent是Swing文本组件的根类Swing中用于选择性输入的常用组件有:JCh
42、eckBox、JRadioButton、JList、JComboBox 菜单是 GUI 中非常有用的一部分93异常处理异常处理异常的概念异常的分类捕获异常声明异常抛出异常创造自己的异常总结95所有异常类型都是所有异常类型都是内置类内置类Throwable的的子类子类用于用于Java运行时系运行时系统统来显示与运行时系来显示与运行时系统本身有关的错误统本身有关的错误用于用户程用于用户程序可能捕获序可能捕获的异常,也的异常,也是用来创建是用来创建用户异常类用户异常类型子类的类。型子类的类。ErrorError类对象由类对象由JavaJava虚拟机生成并抛出;虚拟机生成并抛出;ExceptionEx
43、ception类对象由应用程序处理或抛出。类对象由应用程序处理或抛出。96异常的分类异常是一个对象,它继承自Throwable类,所有的Throwable类的子孙类所产生的对象都是例外. Error:由Java虚拟机生成并抛出,Java程序不做处理. RuntimeException(被0除等系统错误,数组下标超范围):由系统检测, 用户的Java 程序可不做处理,系统将它们交给缺省的异常处理程序. Exception(程序中的问题,可预知的): Java编译器要求Java程序必须捕获或声明所有的非运行时异常 throw:用户自己产生异常97vError类继承了Throwable 类 。v运行
44、时系统将 Error类用于不指望程序能从其恢复过来的灾难性故障 。98vRun-timeException不需要 throwvRun-timeException不需要声明v如果一个Run-timeException被系统抛出但没有被捕获,会导致程序终止,并调用printStackTrace(),打印出异常位置。99异常将沿调用链一直前进,直到被捕获捕获或程序结束退出。程序退出点Exceptions100声明异常一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫声明异常.当你override父类的某个方法时,你的方法声明的异常类型不能超出父类方法声明的异常类型
45、。在产生异常的方法名后面加上要抛出(throws)的异常的列表returnType methodName(parameterlist) returnType methodName(parameterlist) throwsthrows exceptionList exceptionList101线程线程主要内容线程的概念Java中建立线程的三种方法线程的调度线程的基本控制线程的互斥与同步103多任务处理 进程是指一种进程是指一种“自包容自包容”的运行程序,有的运行程序,有自己的地址空间自己的地址空间;线程是进程内部单一的线程是进程内部单一的一个顺序控制流一个顺序控制流 基于进程的特点是允许计算
46、机同时运行两基于进程的特点是允许计算机同时运行两个或更多的程序。个或更多的程序。 基于线程的多任务处理环境中,线程是最基于线程的多任务处理环境中,线程是最小的处理单位。小的处理单位。104主线程 在在Java程序启动时,一个线程立刻运行,程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。该线程通常称为程序的主线程。 主线程的重要性体现在两个方面:主线程的重要性体现在两个方面: 它是产生其他子线程的线程。它是产生其他子线程的线程。 通常它必须最后完成执行,因为它执行各种通常它必须最后完成执行,因为它执行各种关闭动作。关闭动作。105 声明一个声明一个 Thread 类的子类,并类的子类,
47、并覆盖覆盖 run() 方法。方法。 class mythread extends Thread public void run( ) /* 覆盖覆盖该方法该方法* */ / 启动线程启动线程public static void main(String arg) mythread mt=new mythread(); mt.start();创建线程 3-1 声明一个实现声明一个实现 Runnable 接口的类,并实现接口的类,并实现 run() 方方法。法。 class myRunnable implements Runnable public void run( ) /* 实现该方法实现该方
48、法*/ 启动线程启动线程public static void main(String arg) Thread t=new Thread(new myRunnable(); t.start();创建线程 3-2 要触发一个新线程,使用要触发一个新线程,使用 start() 方法,如:方法,如:Mythread t = new Mythread();/extendst.start();Thread t = new Thread (new MyRunnable();/implementst.start(); 在调用在调用 start() 方法时,将创建一个新的控方法时,将创建一个新的控制线程,接着它
49、将调用制线程,接着它将调用 run() 方法。方法。 run() 方法中的代码定义执行线程所需的功方法中的代码定义执行线程所需的功能。能。 启动线程2-1class MyThread1 extends Thread public static void main(String args) Thread t= Thread.currentThread(); System.out.println(主线程是主线程是: : +t); MyThread1 ex = new MyThread1(); ex.start(); public void run() System.out.println(子线程是
50、:子线程是:+this); 或者使用或者使用implements Runnable 创建线程示例创建线程 3-31.5之后Java新增了Callable接口。提供了一个call方法可以作为线程的执行体,它比run方法更加强大: call()方法可以有返回值 call()方法可以抛出异常class myCallable implements Callable class myCallable implements Callable public public StringString call( ) throws Exception/ call( ) throws Exception/* * 实
51、现该实现该方法方法* */ / 要触发一个新线程,使用要触发一个新线程,使用 start() 方法,如:方法,如:FutureTask ft=new FutureTask(new MyCallable();Thread t = new Thread (ft);/implements Callablet.start();String result=ft.get(); FutureTask实现了实现了Runnable接口,可以直接使用接口,可以直接使用Thread(Runnable r)来进行创建来进行创建或或 使用线程池来进行创建使用线程池来进行创建启动线程2-2线程的结束v当一个线程执行完所有
52、语句后就自动终止,调用线程的stop()方法,也可以强制终止线程。v如果希望线程正常终止,可采用标记来使线程中的run()方法退出。112Daemon threads守护线程是为其它线程提供服务的线程守护线程一般应该是一个独立的线程,它的run()方法是一个无限循环.守护线程与其它线程的区别是,如果守护线程是唯一运行着的线程,程序会自动退出守护线程的设置方法 isDaemon( )isDaemon( ) setDaemon( )setDaemon( )例:Daemons.java113线程同步 有时两个或多个线程可能会试图同时访有时两个或多个线程可能会试图同时访问一个资源问一个资源 例如,一个
53、线程可能尝试从一个文件中读例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修取数据,而另一个线程则尝试在同一文件中修改数据改数据 在此情况下,数据可能会变得不一致在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源为了确保在任何时间点一个共享的资源只被一个线程使用,使用了只被一个线程使用,使用了“同步同步”114如何在 Java 中获得同步同步基于“监视器”这一概念。“监视器”是用作互斥锁的对象。在给定时刻,只有一个线程可以拥有监视器。Java中所有的对象都拥有自己的监视器两种方式实现同步:使用同步方法使用同步方法synchronized void m
54、ethodA() 使用同步块使用同步块synchronized(object) /要同步的语句要同步的语句115wait-notify 机制 2-1 为避免轮流检测,为避免轮流检测,Java提供了一个精心设提供了一个精心设计的线程间通信机制,使用计的线程间通信机制,使用wait()、notify()和和notifyAll()方法方法 。 这些方法是作为这些方法是作为 Object 类中的类中的 final 方法实方法实现的。现的。 这三个方法仅在这三个方法仅在 synchronized 方法中才能方法中才能被调用。被调用。116wait-notify 机制 2-2 wait()方法告知被调用的
55、线程退出监视器并方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的进入等待状态,直到其他线程进入相同的监视器并调用监视器并调用 notify( ) 方法。方法。 notify( ) 方法通知同一对象上第一个调用方法通知同一对象上第一个调用 wait( )线程。线程。 notifyAll() 方法通知调用方法通知调用 wait() 的所有线程,的所有线程,具有最高优先级的线程将先运行。具有最高优先级的线程将先运行。117线程方法与锁vsleep(milliseconds)不释放互斥锁vsuspend()不释放互斥锁suspend( ) resume( )vwait() 释放互斥
56、锁wait( ) notify( )或或 notifyAll( )Object类的方法类的方法118线程优先级某一时刻只有一个线程在执行,调度策略为固定优先级调度。级别相同时,由操作系统按时间片来分配。自私的线程:有很高的优先权的线程,不主动睡眠或让出处理器控制权。119IO主要内容Java的基本输入输出原始流 链接流字节流字符流对象的序列化121什么是数据流 ?文件文件程序程序终端终端文件文件程序程序网络端点网络端点数据流数据流起点起点终点终点 网络端点网络端点文件文件,字符串字符串存储区存储区数据流是指所有的数据通信通道数据流是指所有的数据通信通道在在java中有关流的操作使用中有关流的操
57、作使用java.io.*122System类管理标准输入输出流和错误流 System.in:从标准输入获取输入(通常是键盘) System.out:把输出送到缺省的显示(通常是显示器) System.err:把错误信息送到缺省的显示每当main方法被执行时,就自动生成上述三个对象 System.in属于BufferedInputStream类型 System.out属于PrintStream类型 System.err属于PrintStream类型123Java I/O库的设计原则两种流原始流:原始流处理器接收一个Byte数组对象、String对象或文件对象,并声称一个InputSteam类型的
58、流对象例如:ByteArrayInputStream, FileInputStream, PipedInputStream, StringBufferInputStream。链接流(装饰流): 可以接收另一个(同种类)流对象作为流源,并对其进行功能扩展。同样类型的流用做链接流类的流源。 例如:FilterInputStream下的BufferedInputStream, DataInputStream, LineNumberInputStream, PushbackInputStream。 ObjectInputStream和SequenceInputStream124流处理器分类流处理器所处
59、理的流必定都有流源。流源分成两大类: 数组、String、File等,叫原始流源 用于链接流类的流源,叫链接流源Java 语言的I/O库是对各种常见的流源、流汇、以及处理过程的抽象化Java 语言的I/O库是由一些基本的原始流处理器和围绕它们的装饰流处理器所组成的125字节输入流继承结构链接流处理器:就是可以接收另一个流对象作为流源,并对之进行功能扩展的流类InputStream类型的链接流处理器包括以下7个,都接收另一个InputStream对象作为流源 FilterInputStream:过滤输入流,它将另一个输入流作为流源。它有4个子类:BufferedInputStream:用来从硬盘
60、将数据读入到一个内存缓冲区中,并从该缓冲区提供数据DataInputStream:提供基于多字节的读取方法,可以读取基本数据类型的数据LineNumberInputStream:提供带有行计数功能的过滤输入流PushbackInputStream:提供特殊功能,可以将已经读取的字节“推回”到输入流中 ObjectInputStream:可以将使用ObjectOutputStream串行化的基本数据类型和对象重新并行化 SequenceInputStream:可将两个已有的输入流连接起来形成一个输入流126字节输入流继承结构原始流处理器可以被链接流处理器所装饰:一方面,链接流对象接收一个原始流对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届河北省石家庄市普通高中化学高二上期中监测试题含解析
- 多语宝宝:如何高效利用黄金期
- 香格里拉酒店面试题及答案
- 颜料绘画测试题及答案
- java数据结构面试题及答案顺序表
- 家电公司降级降职管理办法
- 家电公司生产设备管理细则
- 小学数学六年级上册-期末口算题专项突破练习(含答案)北师大版
- 2022年河北省唐山一中(唐山市)高三下学期二模考试英语试题
- 室内物业绿化管理方案(3篇)
- 兰花花叙事曲二胡曲谱
- 调解协议书电子版5篇(可下载)
- 材料性能学(第2版)付华课件1-弹性变形
- GB/T 4909.4-2009裸电线试验方法第4部分:扭转试验
- PDCA质量持续改进案例一:降低ICU非计划拔管发生率
- 2023年烟台蓝天投资开发集团有限公司招聘笔试题库及答案解析
- 企业标准编写模板
- 初中道德与法治 九年级(维护祖国统一)初中道德与法治九年级作业设计样例
- 幼儿园绘本故事:《骄傲的大公鸡》 课件
- 江西省赣州市于都县2022-2023学年九年级化学第一学期期中监测试题含解析
- 新冠核酸检测实验室PCR管八联管滤芯吸头等耗材质检和储存程序
评论
0/150
提交评论