java题库1.docx
- 文档编号:10791414
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:27
- 大小:33.24KB
java题库1.docx
《java题库1.docx》由会员分享,可在线阅读,更多相关《java题库1.docx(27页珍藏版)》请在冰豆网上搜索。
java题库1
1.什么是Java虚拟机?
为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。
Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。
Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。
它同时也包含了执行applet需要的浏览器插件。
Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:
JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
3.”static”关键字是什么意思?
Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。
当类被Java虚拟机载入的时候,会对static变量进行初始化。
如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java支持的数据类型有哪些?
什么是自动拆装箱?
Java语言支持的8中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。
比如:
把int转化成Integer,double转化成double,等等。
反之就是自动拆箱。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。
与此相对,方法覆盖是说子类重新定义了父类的方法。
方法覆盖必须有相同的方法名,参数列表和返回类型。
覆盖者可能不会限制它所覆盖的方法的访问。
7.Java中,什么是构造函数?
什么是构造函数重载?
什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。
每一个类都有构造函数。
在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。
可以为一个类创建多个构造函数。
每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8.Java支持多继承么?
不支持,Java不支持多继承。
每个类都只能继承一个类,但是可以实现多个接口。
9.接口和抽象类的区别是什么?
Java提供和支持创建抽象类和接口。
它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。
而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。
但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。
抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。
抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。
抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
10、谈谈final,finally,finalize的区别。
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
11、AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或完成其他接口,在swing编程中常用此方式。
12、StaticNestedClass和InnerClass的不同,说得越多越好(面试题有的很笼统)。
StaticNestedClass是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
而通常的内部类需要在外部类实例化后才能实例化。
13、&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
14.GC是什么?
为什么要有GC?
GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
15、Strings=newString("xyz");创建了几个StringObject?
两个
16.Overload的方法是否可以改变返回值的类型?
Overloaded的方法是可以改变返回值的类型。
17、Overload和Override的区别。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
18、接口是否可继承接口?
抽象类是否可实现(implements)接口?
抽象类是否可继承实体类(concreteclass)?
接口可以继承接口。
抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
19、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
20、是否可以继承String类?
String类是final类故不可以继承。
21、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。
因此传递给switch和case语句的参数应该是int、short、char或者byte。
long,string都不能作用于swtich。
22.描述一下JVM加载class文件的原理机制?
答:
JVM中类的装载是由ClassLoader和它的子类来实现的,JavaClassLoader是一个重要的Java运行时系统组件。
它负责在运行时查找和装入类文件的类。
23.一个".java"源文件中是否可以包括多个类(不是内部类)?
有什么限制?
答:
可以。
必须只有一个类名与文件名相同。
24.垃圾回收器的基本原理是什么?
垃圾回收器可以马上回收内存吗?
有什么办法主动通知虚拟机进行垃圾回收
答:
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。
通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。
当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
可以。
程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
25、静态变量和实例变量的区别?
答:
静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。
静态变量可以实现让多个对象共享内存。
在Java开发中,上下文类和工具类中通常会有大量的静态成员。
26.在JAVA中,如何跳出当前的多重嵌套循环?
答:
用break;return方法。
27、作用域public,private,protected,以及不写时的区别
答:
区别如下:
作用域当前类同一package子孙类其他package
public√√√√
protected√√√×
friendly√√××
private√×××
不写时默认为friendly
28、String是最基本的数据类型吗?
答:
不是。
Java中的基本数据类型只有8个:
byte、short、int、long、float、double、char、boolean;除了基本类型(primitivetype)和枚举类型(enumerationtype),剩下的都是引用类型(referencetype)
29、解释内存中的栈(stack)、堆(heap)和静态存储区的用法。
答:
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、“hello”和常量都是放在静态存储区中。
栈空间操作最快但是也很小,通常大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。
Stringstr=newString(“hello”);
上面的语句中str放在栈上,用new创建出来的字符串对象放在堆上,而“hello”这个字面量放在静态存储区。
补充:
较新版本的Java中使用了一项叫“逃逸分析“的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
30、Java中的final关键字有哪些用法?
答:
(1)修饰类:
表示该类不能被继承;
(2)修饰方法:
表示方法不能被重写;(3)修饰变量:
表示变量只能一次赋值以后值不能被修改(常量)。
31.super()与this()的区别?
This():
当前类的对象,super父类对象。
Super():
在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super要考虑是否能访问其父类的资源.
32、Collection和Collections的区别。
(重点知识)
答:
Collection是集合类的上级接口,继承与他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
33、STRING与STRINGBUFFER的区别。
答:
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。
如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
34、java中实现多态的机制是什么?
答:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
35、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容
还是可以改变的。
36、"=="和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存
储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作
符。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相
同,它比较的两个对象是独立的。
37、HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
38、编译JavaApplication源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为(.class)。
39、设x=1,y=2,z=3,则表达式y+=z--/++x的值是(3)。
40、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
41、List,Set,Map是否继承自Collection接口?
List,Set是
Map不是
42.JVM能有几个实例
每个java程序对应于一个JVM实例,当一个java程序运行时就创建一个JVM实例
因此JVM实例的个数取决于同事执行的程序个数
43.阐述一下类的命名规则、包名的命名规则、变量的命名规则、方法的命名规则、常量的命名规范?
参考答案:
在Java中,类的命名、方法的命名、变量的命名、包名的命名以及常量的命名首先必须符合Java标识符的命名规则,规则如下:
1)可以以字母、数字、"-"和"$"符组成、、
2)首字符不能以数字开头、、
3)中文可以作为变量名,但不提倡使用、、
4)Java大小写敏感,命名变量时需要注意、、
5)不能使用Java保留字(一些Java语言规定好的,有特殊含义的字符),如:
int、、if、、for、、break、、
其次,类的命名、变量的命名、方法的命名、包名的命名以及常量的命名要符合如下规范:
1)类命名规范:
首字母大写,如果由多个单词合成一个类名,要求每个单词的首字母也要大写,如:
HelloWorld
2)方法命名规范:
首字母小写,中间的每个单词的首字母都要大写,如:
getName
3)变量的命名规范:
变量的命名规范和方法一样,首字母小写,中间的每个单词的首字母都要大写,如:
name
4)包的命名规范Java包的名字全都是由小写单词组成。
但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。
由于互联网上的域名称不就是不会重复吗,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。
例如:
"com.sun.swt"一般公司命名会以"com.公司名.项目名.模块名"开头,所以会长一点,如com.landoa.emp.struts.action
5)常量的命名规范:
基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,如:
44.阐述一下Java共有几种注释方法?
参考答案:
在Java中有三种注释类型:
1)单行注释符号是"//",只能注释一行
2)块注释符号是"/**/",可以跨多行
3)javadoc注释符号是"/***/",可以跨多行,而且生成javadoc时,这样的注释会被生成标准的JavaAPI注释
45.如何增加代码的清晰度和可观性?
参考答案:
增加代码的清晰度和可观性常用的方式如下:
给代码添加注释
类名包名、、命名规范化
缩进排版规范
添加异常的处理
使用测试类和测试方法
Java中有两个关键字:
void和null,它们有什么区别
在java中,void仅用于无返回值的方法上
null则代表对象/变量的值
46、安装JDK之后如何设置JDK系统的PATH,CLASSPATH?
他们的作用是什么?
答、更新系统PATH的方法随Windows版本不同而不同。
对于Windows95/98,可以将下列项目作为C:
\autoexec.bat文件的最后一行:
SETPATH=C:
\j2sdk1.4.2\bin;%PATH%当程序需要第三方的类库支持,而且比较常用,就可以采用此种方法.比如常用的数据库驱动程序,写servlet需要的servlet包等等.设置方法就是在环境变量中加入CLASSPATH.然后就可以直接编译运行了.Java运行环境从CLASSPATH环境变量中寻找要执行的用户项目(三方的类库)。
可以按如下的方式设置SETCLASSPATH=.;C:
\J2SDK1.4.2\jre\lib\jaws.jar;%CLASSPATH%通常我们要从当前目录中寻找用户类,因为开发的程序相关的类放在这里,.表示当前工作目录.
47、简述面向过程问题求解和面向对象问题求解的异同。
解:
面向过程问题求解利用计算机能够理解的离散逻辑来描述和表达所求解的问题本身以及具体问题解决的过程,它的核心是算法和数据结构,面向对象的问题求解则利用符合人们日常思维习惯的方式去模拟所求解的问题,模拟它的构成、特征和各种动态行为,从而得到问题的解答。
它的核心是类、对象和设计模式。
48.试分析基本数据类型和引用数据类型的基本特点?
答:
Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。
引用类型都是用类或对象实现的
49.什么是进程?
进程是操作系统结构的基础,是一个计算机中正在运行的程序实例,可以分配给处理器并由处理器执行的一个实体,由单一顺序的执行限时,
一个当前状态和一组相关的系统资源所描述的活动单元
50.java中会存在内存泄漏吗,请简单描述?
会出现内存泄漏
一般来说内存泄漏有两种情况,一是堆中分配的内存,在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉,另一种情况则是
在内存对象已经不需要的时候,还仍然保留着这块内存和他的访问方式(引用)。
第一种情况,在java中已经由于垃圾回收机制的引入,得到了很好的解决
所以,java中的内存泄漏,主要指的是第二种情况。
51.简单说明什么是地柜?
什么情况会使用?
并使用java实现一个简单的地柜程序?
1.地柜作为一种算法在程序设计语言中广泛应用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。
2.递归算法一般用于解决三类问题:
1)数据的定义是按照地柜定义的
2)问题解决法按地柜算法实现
3)数据的结构形式是按地规定以的
52.子类A继承父类B,Aa=newA();则父类B构造函数,父类B静态代码块,父类B非静态代码块,子类A构造函数,子类A静态代码块执行的先后顺序是?
父类B静态代码块--》子类A静态代码块--》父类B静态代码块--》父类B静态函数--》子类A静态代码块--》子类A构造函数
53.简述“类(class)”“类库(classlibrary)”“包(package)”“jar文件”这四个概念间的联系?
1.类(class)实际上是对某种类型的对象定义变量和方法的原型,它表示对显示生活中一类具有共同特征的事物的抽象
2.位了更好地组织类,java提供了包机制。
包(package)是类的容器,用于分隔类名空间。
3.类库(classlibray)是用来实现各种功能的类的集合
4.jar文件用于发布和使用类库。
可被编译器和jvm直接使用
54.堆(heap)和栈(stack)有什么区别?
栈(stack)与堆(heap)都是java用来在内存中存放数据的地方,二者区别在于:
1.栈存放基本类型变量和对象引用,当超过作用域后释放;堆存放new出来的对象和数组。
2.堆可以动态地分配内存大小,内训期也不必实现高速编译器,java的垃圾收集器会自动收走这些不在使用的数据,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性
栈的存取速度比堆要快,仅次于直接位于CPU中的寄存器。
堆由于要在运行时动态分配内存,存取速度较慢。
3.栈数据可以共享,如字面量3等;堆不可以。
4.栈是一种线型集合,其添加和删除元素的操作应该是同一段完成,栈按照后进先出的方式进行处理,堆地址是不连续的,可随机访问。
55.如何将int型变量转换成String类型变量?
如何将String类型变量转成int类型变量?
int型变量转换成String类型变量,可以使用String类型的静态方法valueOf。
将String类型变量转换成int类型变量使用Integer类的静态方法parseInt。
56.内部类可以引用他包含类的成员吗?
有没有什么限制?
完全可以。
如果不是静态内部类,那没有什么限制!
如果你把静态内部类当做内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员
57.请阐述一下ClassCastException通常在什么情况下发生?
强制类型转换类型不匹配时出现此异常,例如:
把某一对象强转其他类型,如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 题库