Presentation is loading. Please wait.

Presentation is loading. Please wait.

《JAVA程序设计》 语音答疑 辅导老师:高旻.

Similar presentations


Presentation on theme: "《JAVA程序设计》 语音答疑 辅导老师:高旻."— Presentation transcript:

1 《JAVA程序设计》 语音答疑 辅导老师:高旻

2 一、JAVA程序设计开发工具及实例 Java已经不仅仅是一种编程语言,它同时还是一种开发环境和一种应用环境,因此我们对Java的掌握也不应该仅仅停留在一门语言的层次上,只有系统、完整地理解和应用Java,我们才能更好的驾御和把握它。  Java语言与C++都是一种面向对象的程序语言,但是它比C++更简单,省去了如运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾收集简化了程序设计者的内存管理工作。   JAVA十个特点:简单、面向对象、分布性、鲁棒性、安全性、平台独立性、可移植性、解释执行、多线程、动态性

3 一、JAVA程序设计开发工具及实例 1、Java开发环境的相关概念: JDK主要组成: JDK(Java Development Kit):
Java语言开发包,SUN公司发布,主要有JDK1.0,JDK1.1版。 SDK(Java Software Development Kit): Java软件开发包,SUN公司从JDK1.2开始就改名为SDK1.2,现在版本包括SDK1.3,SDK1.4。如果不作严格区分,可以把SDK和JDK都叫作JDK。 JDK主要组成: 由Java类库,Java语言编译器,Java调试工具,Java解释器,Java运行时环境(Java Runtime Environment), Java Applet浏览器等构成。

4 一、JAVA程序设计开发工具及实例 2、下载并设置软件 JDK可以在很多网站上(如http://Java.sun.com)下载
然后在“导学材料汇编”下载软件Jcreator。 这个软件不用再进Dos用命令行运行了! 而且也无需配置什么路径.....

5 一、JAVA程序设计开发工具及实例

6 一、JAVA程序设计开发工具及实例

7 一、JAVA程序设计开发工具及实例

8 一、JAVA程序设计开发工具及实例

9 一、JAVA程序设计开发工具及实例

10 一、JAVA程序设计开发工具及实例

11 一、JAVA程序设计开发工具及实例 3、JDK常用工具介绍 1) Javac.exe:Java编译器 2)Java.exe:Java解释器
负责将Java源文件(.java)编译为字节码文件(.class) 例javac c:\Java\test\ test1.Java 2)Java.exe:Java解释器 编译后的Java字节代码(.class)无法直接在机器上运行,需要由解释器对其解释执行。 例java c:\java\test\test1

12 一、JAVA程序设计开发工具及实例 4、JDK开发和运行Java程序的基本过程 利用编辑器编写 Java源程序
我们可以采用任何文本编辑工具(如Notepad)编写Java的源程序,也可以采用专门的Java开发工具 利用编译器将源程序编译成类文件 利用javac命令,可以很容易的做到。但如果该过程中编译器指示任何语法错误,则我们需要根据错误提示重新修改源文件,再进行编译,直至产生正确的class文件。 运行 获得的class文件可以在本地或通过网络传给任何其它Java虚拟机执行。

13 Java平台包括两个组件 Java虚拟机(JVM)和Java应用程序接口(Java API) Java虚拟机(JVM)
是在一台在物理计算机上由软件模拟实现的假想计算机,从结构上分析,它由一些抽象的部件组成:包括指令集,寄存器集、堆栈、存储区等。 Java是一种通用的高级语言和功能强大的软件平台。 通过使用功能强大的Java API(Application Program Interface),可以实现各种程序。

14 二、重点运算符 自增运算符”++”和自减运算符”--” 单目运算符,只能用于变量,不能用于表达式,表示使运算数据加1或减1。
有前缀和后缀两种形式,当是前缀形式(即++、--符号出现在变量的左侧)时,对变量实施的运算是”先增值后使用”; 当是后缀形式(即++、--符号出现在变量的右侧)时,对变量实施的运算是”先使用后增值”。 例如:x=5;y=++x ;表示先将x加1(得6) 然后将结果(6)赋给y,所以x,y的值都为6。  x=5; y=x++;表示将x的值(5)先赋给y 然后再将x加1(得6),所以y的值为5,而x的值为6。

15 JAVA程序 class test{ public static void main(String args[]) { int j=5;
int I=1; do if (I>--j) I++; }while(I<5); System.out.println("i="+I+ “j="+j); }

16 例 class test { public static void main(String args[]) { int i=1;
int j=i++; if (i==++j || i++ == j ) { i+=j; System.out.println(i); } 答案: 4

17 例 class test{ public static void main(String args[]){ int x=2,j=0;
switch(x){ case 1: j++; break; case 2: j++; case 3: j++; break; case 4: j++; default: j++; } System.out.println(j); 答案:2

18 条件运算符“ ?:” 三元运算符,它的一般形式为: 表达式1 ? 表达式2: 表达式3
其中表达式1的值为布尔型,如果该值为true,则执行表达式2,否则执行表达式3,而且表达式2和表达式3需要返回相同的数据类型,且该类型不能是空(void) 例result= (condition==0 ? 0 :1); 该例中,如果condition==0为真,则result=0,否则result=1

19 三、面向对象的基本思想 类和对象 对象可以是现实世界中的任何事物,包括可见和不可见的实体,如人、动物、桌椅、规则、事务等。
类是对具有相同基本特征对象的一种抽象。 如现实世界中的各种小车、卡车、客车等 ,可以抽象出“汽车”这一个类 。 一个类可以生成多个不同的对象,具有不同的属性值。 类是一个抽象的概念,而对象是一个具体的实体。

20 定义一个类圆 对象具有属性和行为。与之相对应,类在定义时,需要声明类的变量(数据)和方法。 class Circle {
  String color;       //颜色   int length;         //半径   Void expand() {}     //方法:放大   Void reduce() {}     //方法:缩小 } Circle c1=new Circle()   //生成类Circle的实例c1 对象具有属性和行为。与之相对应,类在定义时,需要声明类的变量(数据)和方法。

21 传递消息 单个对象完成的功能十分有限,实际系统中通常需要多个对象配合才能完成一个复杂的功能。那么对象之间如何通讯呢?所有这一切都只能通过传递消息来实现。 一般发送的消息包含三个部分: 接受消息的对象 接受消息的对象应执行的方法 方法所需要的参数

22 继承性 继承性是指一个新的类继承原有类的基本特征,并可增加新的特性。
原有的类称为父类或基类,新的类称为子类或派生类。由父类生成子类的过程称为类的派生。在子类中,不仅包含父类的数据和方法,还可增加新的数据和方法。 Java中只支持单继承。

23 封装 封装是一种信息隐蔽技术,它将类的基本成员(数据和方法)封装在类体中,使用者只能看到被封装对象界面上的信息,而对象内部对使用者是隐藏的。
将这种思想借鉴到类的实现中,将类的数据与方法封装起来。如将数据说明为私有的,它的实现细节由开发者进行,使用者无须了解也不能访问这些数据。同时将一些方法说明为公共的,这些方法不仅可以操作对象内的数据,而且作为使用者访问的界面(接口),用户可以通过它操纵内部的数据。

24 多态性 多态性是指一个名称对应有多种不同的功能,或者相同的接口有多种实现方法。Java中,类的多态性主要通过方法的重载,覆盖和接口来实现
1)方法重载是指多个方法具有相同的名称,但每个方法的参数表不同 ,即参数类型和参数数量不同。 例如,定义一个求和的方法,它有三种不同类型的参数: int Add(int i,int j) float Add(float i,float j) double Add(double i,double j) 系统调用Add方法时,系统根据实际参数的类型和数量等自动调用相应的方法,如Add(1,2),Add(1.2f,3.4f),Add(1.2,3.4)。

25 多态性 2)方法覆盖是指在类的继承过程中,子类与父类的方法不仅名称相同,而且参数也完全相同,但方法体(方法的具体实现)不同。这时子类中的方法覆盖了父类中同名的方法。 例:对public float test(int a) {…}方法的重载方法应返回( ) A) void B) int C) float D) 任何类型 例:在某个类A中存在一个方法:void Get(int x),以下能作为这个方法的重载的声明的是(  )。  A void Get(float x)    B int Get(int y) C double Get(int y)    D void get(int x,int y)

26 习题 以下由do-while语句构成的循环执行的次数是( B )。 int k = 0;
do { ++k; }while ( k < 1 ); A 一次也不执行 B 执行1次 C 无限次 D 有语法错,不能执行 提示: 参考课本P26-27 do-while语句执行的特征是:先循环,后判断。与while语句相区别,它的循环体至少会被执行一次,因为执行过程中,它将循环条件的判断放在了循环体的后边。

27 习题 下列语句执行后,a的值是( D )。 int a=13; a%=a/5; 提示: 参考课本P17
A B 13 C D 1 提示: 参考课本P17 a%=a/5相当于a=a%(a/5) =13%(13/5) %:取余。

28 习题 下列类头定义中,错误的是( B )。 A class x B public x extends y { .... } { .... }
{ .... } { .... } C public class x extends y D class x extends y implements y1 提示: 参考课本P40 6.1.1类声明 在类的声明中必须含有关键字class

29 习题 设 i,j 为类 x 中定义的 double 型变量名,下列 x 类的构造函数中不正确的是( A )。
A double x(double k ){ i=k; return i; } B x(double m, double n ){ i=m; j=n; } C x( ){i=0;j=0 } D x(double k ){ i=k; } 提示: 参考课本P46 6.1.6构造方法 构造方法具有和类相同的名称,而且不返回任何返数据类型。

30 习题 以下程序boolean a=false; boolean b=true; boolean c=(a&&b)&&(!b); int result=c==false?1:2;执行完后,c与result的值是( A ): A c=false;result=1; B c=true;result=2; C c=true;result=1; D c=false;result=2; 提示: 1、boolean c=(a&&b)&&(!b); a为false, b为true, 所以(a&&b)为false; b为true,所以!b为false c=(a&&b)&&(!b) 所以c为false 2、result=c==false?1:2 c为false,所以c==false为真,所以c==false?1:2的结果为1 所以result的结果为1

31 习题 有一函数(写一程序,给定 x 值,输出 y 值): x (x<1) y= 3x-2 (1≤x<10) 4x (x≥10 )
程序:public class p3_3{ public static void main(String[]args) { int x=17; if(x<1) System.out.println("y="+x); else if(x<10) System.out.println("y="+(3*x-2)); else System.out.println("y="+(4*x)); } }

32 四、线程等难点 1、线程的概念 一般把正在运行中的一个程序,称为进程。线程和这个进程很相像。从概念上讲,一个线程是一个程序内部的顺序控制流。
虽然线程和进程都是顺序执行的指令序列,但是又有很多不同点: 进程:每个进程都由独立的代码和数据空间,进程切换的开销大。 线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器 (PC),线程切换的开销小。 多进程:在操作系统中,能同时运行多个任务 (程序)。 多线程:在同一应用程序中,有多个顺序流同时执行。

33 线 程 2、JAVA中的线程 很多程序语言都需要外部的软件包来实现多线程,而Java则内在支持多线程,它的所有类都是在多线程的思想下定义的。
每个线程都是通过特定对象的run()方法来完成操作的。方法run()成为线程体。通常run()方法是一个循环。

34 线 程 3、线程的状态 在一个线程的生命周期中,它总是处于某一个状态中。线程的状态表示了线程正在进行的活动以及线程能完成的任务。
线程的状态分为:创建态,可运行态,不可运行态,死亡状态等4种状态

35 线 程 A.创建态( new Thread ) 当新生成一个线程时,生成的线程就处于创建态。
例如,我们定义一个类MyThreadClass继承Java.io.Thread  Thread t = new MyThreadClass() 线程没有启动,属于创建态,仅仅是空的线程对象,系统没有为它分配资源。 处于这一状态,只能启动和终止线程,即调用start()或者stop()方法,调用其他方法都会失败,引起非法状态处理( IllegalThreadStateException)。 例:线程一旦被创建就处于可运行状态。(错)

36 线 程 B.可运行态(Runnable) 当执行t.start()后,产生了运行这个线程所需的系统资源,安排其运行,并调用线程体run()方法,这样使线程处于可运行态。 需要说明的是,可运行态并不是运行中(running)状态,因为,也许线程并未实际运行。由于很多计算机都是单处理器的,同一时刻运行所有的处于可运行态的线程是不可能的,Java的运行时系统必须实现调度来保证这些线程共享处理器。 当一个线程正在运行时,它是处于可运行态的。

37 线 程 C.不可运行态(Not Runnable) 出现下面四种情况时,线程就处于不可运行态。 1、调用了sleep()方法
2、调用了suspend()方法。 3、为等候一个条件变量,线程调用wait()方法。 4、I/O发生线程阻塞。 例如: 调用 t. sleep(1000)后,线程休止1秒,1秒后,线程t又处于可运行态。

38 线 程 D.死亡状态( Dead ) 死亡状态就是线程的消亡状态,可以有两种方法实现:自然撤销,被停止(stop)。
自然撤销是线程的 run() 方法正常退出。 线程体run()方法中有一个循环语句,10次循环完毕后,run()方法执行完毕,线程自然终止。 调用 stop ()终止线程,如下面的程序 t.start ()  // t是一个线程    //省略了一些语句 t.stop (); //调用stop()终止线程 stop()是一种强制终止方式,它不会保存和程序运行有关的信息,在复杂程序中一般不建议使用

39 线 程 E.非法状态处理 isAlive()方法 对于任何状态,如果调用的方法和状态不符,都会引起非法状态处理。
比如:线程刚创建后,只能调用 start ()或者 stop ()方法,如果调用其它方法就会引起非法状态处理。 isAlive()方法 在类Thread中提供了方法isAlive(),如果线程已经启动,但是未终止,返回true,反之,返回 false,表示该线程未启动,或者已终止。 如果isAlive()方法返回true,不能区分是可运行态(runnable)还是不可运行态(not runnable)。

40 线 程 4、构造线程体有两种方式: 定义一个线程类,它继承Thread类,并重写其中的run()方法。直接生成这个类的对象就可以构造一个线程。 提供一个实现接口 Runnable的类作为线程的目标对象。在构造线程对象时,通过方法 Thread(Runnable target,String name)把目标对象传给这个线程实例。 例:如何构造一个线程(两种方法)(多次考察)?

41 线 程 5、基本的线程控制(终止、暂停和恢复) a、终止线程
线程终止后,其生命周期就结束了,也就是进入了死亡状态,终止后的线程不能再被调度执行。在下面的一些情况下,线程进入终止态。   1、线程执行完线程体run()方法后,自然终止。 在前面的例子中,线程都是执行完run()方法后自然终止的,可以参考例11.1的程序。   2、通过调用线程的实例方法stop()后,终止线程。

42 线 程 例:下列哪种情况无法使当前线程停止执行( ) A. 线程执行过程中的异常被抛出发生 B. 线程执行了sleep()方法. C. 产生了一个新线程 D. 具有更高优先级的线程准备就绪

43 线 程 b、线程的暂停和恢复 1、sleep()方法 2、suspend()和resume() 3、join()方法

44 线 程 例 关于线程的下列说法正确的是(D )  A. 线程只能通过继承类Thread创建。 B. 执行suspend方法将使线程停止并不能被重新start。 C. 线程与进程实际是同一个概念。 D. 线程的终止可以通过两种方式实现:自然撤销或被停止。 A、有两种方法构造线程体 B、执行suspend方法将使线程挂起,可以用resume方法恢复线程的执行。 C、虽然线程和进程都是顺序执行的指令序列,但线程和进程不同。

45 Java Applet Applet就是用Java编写的一段代码,可以在浏览器中运行。   与Application 的主要区别是执行方式不同,Application从main()方法开始执行,而Applet 在浏览器中运行,比较复杂 Applet在浏览器中运行,必须创建一个html文件,把Applet嵌入到html中,在浏览器中给出html文件的URL地址即可。 例.什么是Applet,如何运行一个Applet

46 Java Applet Applet是一个AWT组件,具有一般AWT组件图形绘制功能。这些方法是由Component类提供的。主要的方法有:paint(),update(),repaint()方法。 详细说明见下页 Java有其自己的AWT绘图系统控制何时和怎样进行绘画。 当repaint()方法被调用时,AWT调用成员的update()方法,update()调用paint()。 AWT有时可以直接调用paint()方法。比如被其它窗口覆盖。

47 Java Applet 例:进行AWT绘制时,需要程序员重写repaint()方法(错)
2、update( )   用于更新图形,先清除背景、前景,再调用paint() 3、repaint( )   用于重绘图形,在组件外形发生变化,即大小改变或位置移动时,repaint( )方法立即被系统自动调用。有几种不同的重载形式,可以实现局部重绘,延时重绘等。 例:进行AWT绘制时,需要程序员重写repaint()方法(错)

48 Java Applet 例 paint()方法使用 ( ) 作为起输入参数。  A.  Graphics         B.  Graphics2D   C.    String              D.  Color  Graphics可以支持两种绘图,一种是基本的,如画线,画矩形,另一类是画图像,主要用于动画制作。

49 Java Applet 例题:Applet中方法init(),start(),stop()和destroy()的作用? (多次被考到)
Init()方法在applet被首次载入时执行,作用是在applet被执行前执行一些必要的初始化操作。 Start()方法是applet的主体,由系统调用,其作用是执行或启动必要的任务或线程。 Stop()方法的作用是停止applet中一些耗费系统资源任务的执行。 Destroy()方法用于清除无用的applet,释放相关的资源。

50 五、作业简答题 简答题之-简述Java具有可移植性的原因?
Java虚拟机(JVM)是在一台在物理计算机上由软件模拟实现的假想计算机,从结构上分析,它由一些抽象的部件组成:包括指令集,寄存器集、堆栈、存储区等。指令集采用与平台无关的字节码形式,寄存器集包括计数器、堆栈指针等,堆栈用于存放传递的参数和运行结果等,存储区则存放字节码。对不同的硬件平台Java虚拟机提供了不同的编译代码规范,该规范可以屏蔽机器硬件的差异,使Java软件独立于操作平台。

51 简答题之-简述Java中方法重载和方法重写的区别?
方法重载是指多个方法具有相同的名称,但每个方法的参数表不同 ,即参数类型和参数数量不同。方法覆盖是指在类的继承过程中,子类与父类的方法不仅名称相同,而且参数也完全相同,但方法体(方法的具体实现)不同。这时子类中的方法覆盖了父类中同名的方法。 (方法重写又称方法覆盖)

52 简答题之-说明Java Application与Java Applet有何区别?
(1)运行方式不同。Java Application是完整的程序,可以独立运行;Java Applet程序不能单独运行,它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行。 (2)运行工具不同。Java Application程序被编译以后,用普通的Java解释器就可以使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才能执行。 (3)程序结构不同。每个Java Application程序必定含有一个并且只有一个main方法,程序执行时,首先寻找main方法,并以此为入口点开始运行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立运行的原因。尽管Applet没有含main方法的主类,但Applet一定有一个从 java.applet.Applet派生的类,它是由Java系统提供的。 (4)受到的限制不同。Java Application程序可以设计成能进行各种操作的程序,包括读/写文件的操作,但是 Java Applet 对站点的磁盘文件既不能进行读操作,也不能进行写 操作。然而,由于 Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功能,不但可以显示文本信息,而且还可以有各种图片效果和动态图形效果,从而使页面显得生动美丽;另外,Applet使Web页面增加了按钮等功能,从而增加了交互性。

53 简答题之-关键字this和super在成员方法中的主要作用是什么?
如果对重载构造方法,如果需要,可以用super调用父类的构造方法,用this调用当前对象的构造方法。

54 简述Java的异常处理机制? Java的异常处理机制分为两部分:抛弃异常(throw)和捕获异常(catch)。
抛弃异常在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。这个对象可能是由正在运行的方法生成,也可能由Java虚拟机生成,其中包含一些信息指明异常事件的类型,以及当异常发生时程序的运行状态等。生成的异常对象传递给Java运行时系统(Java Runtime System),这一异常对象的产生和提交过程称为抛弃(throw)异常。 捕获异常 Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。寻找的对象从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后运行时系统把当前异常对象交给这个方法进行处理。这一过程称为捕获(catch)异常。

55 简答题之-String类与StringBuffer类的主要区别是什么?
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。如频繁的修改字符串值,可以使用StringBuffer

56 简答题之-什么是静态方法和静态变量,他们同普通的成员方法和变量有什么区别?
静态变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。 静态方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联。

57 使用socket进行通讯的基本步骤是什么?
无论一个socket通信的功能多么齐全、程序多么复杂,其基本步骤都是一样的,都包括以下四个基本的步骤: 1、创建socket 首先创建ServerSocket,在客户端创建Socket后,连接服务器,在服务器端创建一个和它对应的一个Socket。 2、打开连接到socket的输入/出流在客户端和服务器端分别用Socket创建输入流和输出流,把客户端的输入流和服务器的输出流连接起来,客户端的输出流和服务器端的输入流连接起来。 3、按照一定的协议对socket进行读/写操作每个程序都可能不同。 4、关闭socket 使用Socket的close()方法。

58 简述Applet中方法paint(),update(),repaint()方法的关系?
paint()方法中进行绘图具体操作,但是Component类只提供了paint()方法的架子,并未实现任何操作,即实际上只进行了空操作,而没有在组件中绘制具体图案。update()方法用于更新图形,它首先清除背景,然后设置前景,再调用paint()方法完成组件中的具体绘图。 repaint()方法主要用于重绘图形。在组件发生变化,即大小改变或位置移动时,repaint()方法立即被系统自动调用。它调用update()方法以实现对组件的更新。repaint()方法有几种重载的方法,分别调用不同的repaint()方法,可实现对组件的局部进行重绘、延时重绘。

59 什么是线程,Java中线程由哪几部分组成?
线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制;但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小的多,正因如此,线程被称为轻负荷进程(light-weight process)。一个进程中可以包含多个线程。 线程的模型是由CPU、程序代码和数据封装体组成的集合 1、虚拟的 CPU(Virtual CPU),封装在Java.lang.Thread类中。 2、CPU所执行的代码(Code),传递给Thread类。 3、CPU所处理的数据(Data),传递给Thread类。

60 使用缓冲区输出流有什么作用? BufferedOutputStream这两个类实现了带缓冲的过滤流,由于提供了缓冲机制,把任意的输入流或者输出流“捆绑”到缓冲流上会获得性能的提高。 在初始化BufferedOuputSream时,除了要指定所连接的输出流外,还可以指定缓冲区的大小。缺省使用32字节大小的缓冲区。通常程序中指定的缓冲区大小应是内存页或磁盘块等的整数倍,最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间、机器的配置等。一般可选8192字节或者较小的缓冲区以提高性能。 在使用BufferedOutputStream进行输出时,数据首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。

61 讨论时间 欢迎大家共同讨论问题!


Download ppt "《JAVA程序设计》 语音答疑 辅导老师:高旻."

Similar presentations


Ads by Google