一、Java开发工具有哪些?JDK的版本?Java的优缺点?
答:
二、AWT和SWING的分别是什么?有何区别?
答:1,AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
2,SWING()Swing 是一个为Java设计的GUI工具包。 Swing 是JAVA基础类
的一部分。 Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。
一句话说明,AWT几乎是重量级组件,SWING几乎是轻量级组件。
轻量组件首次出现在AWT1.1版本中。AWT最初只包括与本地对等组件相关联的重量组件,这些组件在它们自己的本地不透明窗口中绘制。
相反,轻量组件没有本地对等组件,而且在它们的重量容器的窗口中绘制。
由于轻量组件不在本地不透明的窗口中绘制,因此,它们可以有透明的背景。透明的背景使显示的轻量组件可以是非矩形的,虽然所有组件 (重量的或轻量的)都基于一个矩形边框。
Swing组件几乎都是轻量组件,那些顶层容器:窗体、小应用程序、窗口和对话框除外。
因为轻量组件是在其容器的窗口中绘制的,而不是在自己的窗口中绘制的,所以轻量组件最终必须包含在一个重量容器中。因此,Swing的窗体、小应用程序、窗口和对话框都必须是重量组件,以便提供一个可以在其中绘制Swing轻量组件的窗口。
三、绘制动态图像时屏会闪,采用双缓冲,其原理是什么?
这就要涉及到Java Applet中的paint方法的绘图机制了。产生这种现象的主要原因是:
Ø 由于在显示所绘制的图像时,调用了repaint方法。repaint方法被调用时,需要清除整个背景,然后才调用paint方法显示画面。这样,在清除背景和绘制图像的短暂时间间隔内被用户看见的就是闪烁。
Ø 由于paint()方法需要进行复杂的计算,图像中包含着多个图形,不同图形的复杂程度及其所需要的绘制时间不同,因此,图像中的各个像素值不能同时产生,使得图形的生成频率低于显示器的刷新频率,从而造成闪烁。
下面两种方法可以明显地消除或减弱闪烁:
Ø 重载update方法
当AWT接收到Applet重新绘制的请求时,调用Applet的update方法。默认情况下,update方法清除Applet的背景,然后调用paint方法。重载update方法,就可以将以前在paint方法中的绘图代码包含在update方法中,从而避免每次重新绘制时将整个区域清除。
Ø 双缓冲技术
双缓冲技术在很多动画Applet中被采用。主要原理是创建一幅后台图像,将每一帧画入图像,然后调用drawImage方法,将整个后台图像一次画到屏幕上去。这种方法的优点在于大部分绘制是在后台进行的。将后台绘制的图像一次绘制到屏幕上。在创建后台图像前,首先通过调用createImage方法生成合适的后台缓冲区,然后获得在缓冲区的绘图环境(即Graphics类对象)。
综上所述,改善前面我们写的一些Java Applet源程序的思路是:不直接在paint方法中调用各种绘制方法,而是采用重载update方法及双缓冲技术,生成一个图像的缓冲区,获得该缓冲区中的绘图环境后,将该绘图环境读入内存。paint方法不再负责图像的绘制工作,即paint方法不再装入任何的图像绘制代码。我们在paint方法中,直接调用update方法,在内存缓冲区的绘图环境下进行图像的绘制工作,当所有的图像绘制工作完成后,最后将缓冲区的内容一次性地写入Applet并在Applet窗口中直接显示出来。这种方法很巧妙地解决了图像丢失和闪烁的问题。
四、线程之间如何通讯?线程什么时候会出现LOCK饥饿?
五、软件生命周期分为哪几个阶段?各阶段的产出物是什么?
六、UML图分为哪几种?各有什么作用?
七、软件开发模型有哪几种?你在工作中用到哪种?
八、Java多线程如何实现?
答:
二、AWT和SWING的分别是什么?有何区别?
答:1,AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
2,SWING()Swing 是一个为Java设计的GUI工具包。 Swing 是JAVA基础类
的一部分。 Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。
一句话说明,AWT几乎是重量级组件,SWING几乎是轻量级组件。
轻量组件首次出现在AWT1.1版本中。AWT最初只包括与本地对等组件相关联的重量组件,这些组件在它们自己的本地不透明窗口中绘制。
相反,轻量组件没有本地对等组件,而且在它们的重量容器的窗口中绘制。
由于轻量组件不在本地不透明的窗口中绘制,因此,它们可以有透明的背景。透明的背景使显示的轻量组件可以是非矩形的,虽然所有组件 (重量的或轻量的)都基于一个矩形边框。
Swing组件几乎都是轻量组件,那些顶层容器:窗体、小应用程序、窗口和对话框除外。
因为轻量组件是在其容器的窗口中绘制的,而不是在自己的窗口中绘制的,所以轻量组件最终必须包含在一个重量容器中。因此,Swing的窗体、小应用程序、窗口和对话框都必须是重量组件,以便提供一个可以在其中绘制Swing轻量组件的窗口。
三、绘制动态图像时屏会闪,采用双缓冲,其原理是什么?
这就要涉及到Java Applet中的paint方法的绘图机制了。产生这种现象的主要原因是:
Ø 由于在显示所绘制的图像时,调用了repaint方法。repaint方法被调用时,需要清除整个背景,然后才调用paint方法显示画面。这样,在清除背景和绘制图像的短暂时间间隔内被用户看见的就是闪烁。
Ø 由于paint()方法需要进行复杂的计算,图像中包含着多个图形,不同图形的复杂程度及其所需要的绘制时间不同,因此,图像中的各个像素值不能同时产生,使得图形的生成频率低于显示器的刷新频率,从而造成闪烁。
下面两种方法可以明显地消除或减弱闪烁:
Ø 重载update方法
当AWT接收到Applet重新绘制的请求时,调用Applet的update方法。默认情况下,update方法清除Applet的背景,然后调用paint方法。重载update方法,就可以将以前在paint方法中的绘图代码包含在update方法中,从而避免每次重新绘制时将整个区域清除。
Ø 双缓冲技术
双缓冲技术在很多动画Applet中被采用。主要原理是创建一幅后台图像,将每一帧画入图像,然后调用drawImage方法,将整个后台图像一次画到屏幕上去。这种方法的优点在于大部分绘制是在后台进行的。将后台绘制的图像一次绘制到屏幕上。在创建后台图像前,首先通过调用createImage方法生成合适的后台缓冲区,然后获得在缓冲区的绘图环境(即Graphics类对象)。
综上所述,改善前面我们写的一些Java Applet源程序的思路是:不直接在paint方法中调用各种绘制方法,而是采用重载update方法及双缓冲技术,生成一个图像的缓冲区,获得该缓冲区中的绘图环境后,将该绘图环境读入内存。paint方法不再负责图像的绘制工作,即paint方法不再装入任何的图像绘制代码。我们在paint方法中,直接调用update方法,在内存缓冲区的绘图环境下进行图像的绘制工作,当所有的图像绘制工作完成后,最后将缓冲区的内容一次性地写入Applet并在Applet窗口中直接显示出来。这种方法很巧妙地解决了图像丢失和闪烁的问题。
四、线程之间如何通讯?线程什么时候会出现LOCK饥饿?
五、软件生命周期分为哪几个阶段?各阶段的产出物是什么?
六、UML图分为哪几种?各有什么作用?
七、软件开发模型有哪几种?你在工作中用到哪种?
八、Java多线程如何实现?