java笔试题专项练习※※
Posted 谦谦均
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java笔试题专项练习※※相关的知识,希望对你有一定的参考价值。
1,以下关于java封装的描述中,正确的是:(A)
- A,封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性
- B,封装的意义不大,因此在编码中尽量不要使用
- C,如果子类继承父类,对于父类中进行封装的方法,子类仍然可以直接调用
- D,只能对一个类中的方法进行封装,不能对属性进行封装
解析:
关于封装:封住、继承、多态是面向对象的三大特征,其重要性与使用频率不言而喻。封装就是将属性私有化,提供公有的方法访问私有属性。通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。由于取值方法和赋值方法隐藏了实现的变更,因此并不会影响读取或修改该属性的类,避免了大规模的修改,程序的可维护性增强
2,java7
后关键字switch
支不支持字符串作为条件:(A)
- A,支持
- B,不支持
解析:
switch(exp)
,在JDK7
之前,只能是byte、short、char、int
或者对应的包装类,或者枚举常量(内部也是由整型或字符类型实现)。
为什么必须是这些呢,因为其实exp
只是对int
型支持的,其他都是因为可以自动拆卸或者自动向上转型到int
,所以才可以。
到了JDK7
的时候,String
被引入了,为什么String
能被引入呢?
其实本质上还是对int
类型值得匹配。
原理如下,通过对case
后面得String
对象调用hashCode
方法,得到一个int
类型得hash
值,然后用这个hash
值来唯一标识这个case
。那么当匹配时,首先调用exp
的hashCode
,得到exp
的hash
值,用这个hash
值来匹配所有case
,如果没有匹配成功,就说明不存在;如果匹配成功了,接着会调用字符串的equals
方法进行匹配。(hash
值一致,equals
可不一定返回的就是true
)。所以,exp
不能为null
,case
子句使用的字符串也不能为null,不然会出现空指针异常。
3,定义:String s1 = “uml”; String s2 = “uml”; String s3= new String(“uml”); String s4= new String(“uml”);
那么,s1==s2;s3 == s4;s1.equals(s3);
判断正确与否()
- A, T,F,T
- B, F,T,F
解析:
==
:比较两个引用的地址和值
equals
:比较两个引用的值
s1==s2 true
s1
和s2
指向字符串常量池中同一个地址s3
和s4
都显示使用了new
,是不同的对象, 当然不相等s1
和s3
的值都是 “uml
”,当然相等
4,javac
的作用是( )。
正确答案: A
- A,将源程序编译成字节码
- B,将字节码编译成源程序
- C,解释执行Java字节码
- D,调试Java代码
javac
是将源程序.java
编译成.class
文件
java
是将字节码转换为机器码文件执行
5,下列代码的执行结果是:( )
public class Test3{
public static void main(String args[]){
System.out.println(100%3);
System.out.println(100%3.0);
}
}
正确答案: B
- A, 1和1
- B, 1和1.0
- C, 1.0和1
- D, 1.0和1.0
多种混合计算时,自动将所有数据类型转换为容量最大的一种数据类型。所以都转为float
类型。
6,为AB类的一个无形式参数无返回值的方法method
书写方法头,可以用AB.method()
方式调用,该方法头的形式为( )。
正确答案: A
- A,
static void method( )
- B,
public void method( )
- C,
final void method( )
- D,
abstract void method( )
解析:首先声明什么是静态方法:用static
修饰的方法
静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
其次说明静态方法的使用:
在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,只有调用静态方法时可以无需创建对象。
7,命令javac-d
参数的用途是?()
正确答案: A
- A, 指定编译后类层次的根目录
- B, 指定编译时需要依赖类的路径
- C, 指定编译时的编码
- D, 没有这一个参数
解析:
-d destination
目的地
-s source
起源地
javac -d
指定放置生成的类文件的位置
javac -s
指定放置生成的源文件的位置
8,J2EE
中,当把来自客户机的HTTP
请求委托给servlet
时,会调用HttpServlet
的( )方法
正确答案: A
- A,
service
- B,
doget
- C,
dopost
- D,
init
解析:
HttpServlet
容器响应Web
客户请求流程如下:
Web
客户向Servlet
容器发出Http
请求;Servlet
容器解析Web
客户的Http
请求;Servlet
容器创建一个HttpRequest
对象,在这个对象中封装Http
请求信息;Servlet
容器创建一个HttpResponse
对象;Servlet
容器调用HttpServlet
的service
方法,这个方法中会根据request
的Method
来判断具体是执行doGet
还是doPost
,把HttpRequest
和HttpResponse
对象作为service
方法的参数传给HttpServlet
对象;HttpServlet
调用HttpRequest
的有关方法,获取HTTP
请求信息;HttpServlet
调用HttpResponse
的有关方法,生成响应数据;Servlet
容器把HttpServlet
的响应结果传给Web
客户。
doGet()
或 doPost()
是创建HttpServlet
时需要覆盖的方法.
9,在运行时,由java
解释器自动引入,而不用import
语句引入的包是()。
正确答案: A
- A,
java.lang
- B,
java.system
- C,
java.io
- D,
java.util
解析:
java.lang
包是java
语言包,是自动导入的。
java.util
包是java
的工具包,需要手动导入。
java.sql
包,JDBC
接口类,需要手动导入。
java.io
;各种输入输入流,需要手动导入。
system
是属于java.lang.sysytem
10,以下代码运行输出的是
public class Person{
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
正确答案: C
- A, 输出:
Person
- B, 没有输出
- C, 编译出错
- D, 运行出错
解析:
- 一个
java
文件里,public
的类只能出现一个,只能出现一个,只能出现一个,否则,不管你用哪一个类名命名文件名编译器都会报错。【不过一般题目里面默认不在一个java
文件,除非特别说明,另外不包括内部类】 - 关于多态。子类继承了父类的所有成员,包括
private
权限的成员变量,但是继承的子类具有私有变量的拥有权但是没有使用权。 private
的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。
11,假定str0,...,str4
后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC
后,上述代码在Heap
空间(不包括PermGen
)保留的字符数为()
static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;
正确答案: C
- A,
5
- B,
10
- C,
15
- D,
20
解析:这是一个关于java
的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation
)、年老代(Old Generation
)、永久代(Permanent Generation
,也就是方法区)。
年轻代:对象被创建时(new
)的对象通常被放在Young
(除了一些占据内存比较大的对象),经过一定的Minor GC
(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)
是针对年老代的回收
永久代:存储的是final
常量,static
变量,常量池。
str3,str4
都是直接new
的对象,而substring
的源代码其实也是new
一个string
对象返回。
经过fullgc
之后,年老区的内存回收,则年轻区的占了15个,不算PermGen
12,当x=?
时,会输出”Test2
“?
switch (x)
{
case 1: System.out.println("Test1");
case 2:
case 3:
System.out.println("Test2");
break;
default:
System.out.println("Test3");
break;
}
正确答案: B C D
- A,
0
- B,
1
- C,
2
- D,
3
- E,
4
这里注意题目没有说只打印,所以case 1
也符合条件,这里考的是细心。
13,JAVA
反射机制主要提供了以下哪些功能?
正确答案: A B C D
- A, 在运行时判断一个对象所属的类
- B, 在运行时构造一个类的对象
- C, 在运行时判断一个类所具有的成员变量和方法
- D, 在运行时调用一个对象的方法
解析:普通的java
对象是通过new
关键字把对应类的字节码文件加载到内存,然后创建该对象的。反射是通过一个名为Class
的特殊类,用Class.forName("className");
得到类的字节码对象,然后用newInstance()
方法在虚拟机内部构造这个对象(针对无参构造函数)。
也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,包括
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法
这些都是反射的功能。使用反射的主要作用是方便程序的扩展。
14,java
运行时内存分为“线程共享”和“线程私有”两部分,以下哪些属于“线程共享”部分
正确答案: B D
- A, 程序计算器
- B, 方法区
- C, java虚拟机栈
- D, java堆
解析:共享的资源有:
- 堆
由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new
出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的) - 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
- 静态变量
虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss
和.data
段,是共享的 - 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。
Win32
提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
独享的资源有
- 栈
栈是独享的 - 寄存器
这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC
15,以下说法错误的是()
正确答案: B C D
- A, 其他选项均不正确
- B,
java
线程类优先级相同 - C,
Thread
和Runnable
接口没有区别 - D, 如果一个类继承了某个类,只能使用
Runnable
实现线程
解析:
- B选项,在
java
中线程是有分优先等级的所以优先级不能相同,错误 - C选项,
Thread
实现了Runnable
接口是一个类不是接口,错误 - D选项,实现多线程的三种方式,一种是继承
Thread
类使用此方式就不能继承其他的类了。还有两种是实现Runnable
接口或者实现Callable
接口,所以D错误。 - A选项,综上A说其余三项都是错误的,所以A选项所述为真,不是错误的。
说明:解析来源于牛客网Java
试题后面的优质评论,我只是将这些优质评论收集过来,如果有错误的地方欢迎指出。
以上是关于java笔试题专项练习※※的主要内容,如果未能解决你的问题,请参考以下文章
java从小白开始的练习(String构造器,内存分析与笔试题)