java简答题答案文档格式.docx
《java简答题答案文档格式.docx》由会员分享,可在线阅读,更多相关《java简答题答案文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
第二章:
1.Java语言的八种基本数据类型有:
byte字节型,占一个字节。
short短整型,占两个字节。
int整型,占4个字节。
long长整型,占8个字节。
float单精度浮点型,占4个字节。
double双精度浮点型,占8个字节。
char字符型,占两个字节。
boolean型,表示逻辑值,有true和false两个值,分别占一个字节。
2.如果使用“&
”在表达式之间进行连接,那么无论任何情况,“&
”两边都会参与计算。
如果使用“&
&
”进行连接,当“&
”左边的表达式为false时,就不会执行其右边的表达式。
例如:
定义intx=2,y=0;
执行输出表达式booleanb=x<
y&
x/y>
0;
的值时,会发生被0除的异常,因为“&
”右边的表达式x/y>
0的表达式执行了;
而booleanb=x<
是不会出现这种异常的,因为“&
”左边的表达式x<
y为false,右边的表达式x/y>
0就不会被执行。
3.方法重载指的是在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。
调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。
4.char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。
不过,如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充说明:
Unicode编码占用两个字节,所以char类型的变量也是占用两个字节。
5.break语句:
在switch条件语句和循环语句中都可以使用break语句。
当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
continue语句:
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
return语句:
return语句可以用于从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
return返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。
第三章:
1.构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。
而普通方法只有在使用的时候才会被调用。
在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。
2.单例模式可以保证在整个程序运行期间针对该类只存在一个实例对象。
3.Java语言中一个显著的特点就是引入了垃圾回收机制,使得Java程序员在编写程序的时候不再需要考虑内存管理。
垃圾回收可以有效的防止内存泄露,有效地利用可以使用的内存。
垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
4.在Java中共有四种代码块,它们分别是静态代码块、构造代码块、普通代码块和同步代码块。
静态代码块:
在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。
当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。
在程序中,通常会使用静态代码块来对类的成员变量进行初始化。
构造代码块:
直接在类中定义的没有加static关键字的代码块称为构造代码块。
构造代码块在每次创建对象时都会执行。
普通代码块:
在方法或语句中出现的代码块就称为普通代码块。
普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定,即“先出现先执行”。
同步代码块:
Java对于多线程的安全问题提供了专业的解决方式,就是同步代码块。
synchronized(对象)//这个对象可以为任意对象
{
需要被同步的代码
}
对象如同锁,持有锁的线程可以在同步中执行,没持有锁的线程即使获取CPU的执行权,也进不去。
第四章:
1.在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
2.多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
3.在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。
由于接口的特殊性,在定义时需要使用interface关键字。
4.方法重写(Overriding)和方法重载(Overloading)是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在同一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
5.Error表示恢复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出,仅靠修改程序本身是不能处理这样的情况的。
Exception表示程序本身可以处理的错误,在开发Java程序中进行的异常处理,都是针对Exception类及其子类。
在Exception类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常,除了此类,Exception类下所有其他的子类都用于表示编译时异常。
第五章:
1.一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。
newThread(){
publicvoidrun(){}
}.start();
另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。
newThread(newRunnable(){
}).start()
2.调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其他被同步锁挡住了的线程也无法得到执行。
wait()在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行。
当其他线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。
3.相同点:
Lock能完成synchronized所实现的所有功能。
不同点:
总的来说,Lock更加灵活。
Lock有比synchronized更精确的线程予以和更好的性能。
synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。
synchronized修饰方法时表示同一个对象在不同的线程中表现为同步队列,如果实例化不同的对象,那么synchronized就不会出现同步效果了。
4.在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是“正在运行的程序”。
而在进程中还可以有多个执行单元同时执行,这些执行单元可以看作程序执行的一条条线索,被称为线程。
Java运行环境是一个包含了不同的类和程序的单一进程。
线程可以被称为轻量级进程。
线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。
第六章:
1.String类是不可变类,即字符串值一旦初始化后就不可能改变。
StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。
2.Date类用来表示某个特定的瞬间,能够精确到毫秒。
而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。
Calender类基本取代了Date类,该类中定义了一系列用于完成日期和时间字段操作的方法。
Calendar有一个getTime()方法,getTime()返回一个表示Calendar时间值的Date对象,同时Calendar还有一个setTime(Datedate)方法,setTime()方法接收一个Date对象,将Date对象表示的时间值设置给Calendar对象,通过这两个方法就可以完成Date和Calendar对象之间的转换。
3.int是Java中的基本数据类型,Integer是Java为int提供的包装类。
int类型的初始值为0,而Integer的初始值为null。
Java为每个基本类型都提供了对应的包装类,包装类属于引用类型。
基本类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
4.包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型。
第七章:
1.为了使程序能方便的存储和操作数目不固定的一组数据,JDK提供了一套类库,这些类都位于java.util包中,统称为集合。
集合框架中包含3个接口,分别是List、Set、Map。
2.List的特点是元素有序、元素可重复。
List接口的主要实现类有ArrayList和LinkedList。
Set的特点是元素无序、元素不可重复。
Set接口的主要实现类有HashSet和TreeSet。
Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。
Map接口的主要实现类有HashMap和TreeMap。
3.Collection是一个单例集合接口。
它提供了对集合对象进行基本操作的通用方法。
Collections是一个工具类。
它包含各种有关集合操作的方法。
4.Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map接口的一个实现。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
最大的不同是,Hashtable的方法是线程安全的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
5.
(1)提高了Java程序的类型安全,在编译时期解决,避免程序在运行时期发生错误。
(2)消除强制类型转换。
(3)泛型可以替代Object类型的参数和变量的使用,带来性能的大幅提高并增加代码的可读性。
第八章:
1.Java程序通过流来完成输入和输出,流是输入或输出信息的抽象。
流通过Java的输入/输出系统与外设连接进行数据通信。
流是抽象的对象,具体实现代码在java.io包中。
2.字节流的两个基类是InputStream和OutputStream,字符流的两个基类是Reader和Writer,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;
Reader和Writer类是专门处理16位字节的字符流类。
3.管道流分为管道输入流(PipedInputStream)和管道输出流(PipedOutputStream),通常由一个PipedInputStream实例对象
和一个PipedOutputStream实例对象相互连接而实现管道通信,PipedOutputStream向管道写入数据,PipedInputStream从管道中读取PipedOutputStream写入的数据,管道流主要用来完成线程之间的通信。
4.程序运行时,会在内存中创建多个对象,然而程序结束后,这些对象便被当作垃圾回收了。
如果希望永久保存这些对象,则可以将对象转为字节数据写入到硬盘上,这个过程称为对象序列化。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:
FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Objectobj)方法就可以将参数为obj的对象写出(即保存其状态)。
5.把字符串转换成计算机识别的字节序列称为编码,而把字节序列转换为普通人能看懂的明文字符串称为解码。
第九章:
1.
(1)通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写
(2)创建事件源对象和事件监听器对象
(3)调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象
2.AWT是AbstractWindowToolKit(抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。
AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,当我们利用AWT来构建图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。
由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。
为了实现Java语言所宣称的"
一次编译,到处运行"
的概念,AWT不得不通过牺牲功能来实现其平台无关性,也就是说,AWT所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。
由于AWT是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。
Swing是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT所能够提供的所有功能,并且用纯粹的Java代码对AWT的功能进行了大幅度的扩充。
由于在Swing中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。
AWT和Swing之间的基本区别:
AWT是基于本地方法的C/C++程序,其运行速度比较快;
Swing是基于AWT的Java程序,其运行速度比较慢。
对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。
在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。
3.在java.awt包中提供了五种布局管理器,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)和CardLayout(卡片布局管理器)。
4.事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制。
在学习如何使用AWT事件处理机制之前,首先向大家介绍几个比较重要的概念,具体如下所示:
1、事件对象(Event):
封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。
2、事件源(组件):
事件发生的场所,通常就是产生事件的组件。
3、监听器(Listener):
负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器)。
4、事件处理器:
监听器对象对接收的事件对象进行相应处理的方法。