Java-基础选择题

标题Java(八)Java(九)Java(十)Java(八)以下关于构造函数的描述错误的是 ( )A.每个类有且只能有一个构造函数。B.构造函数是类的一种特殊函数,它的方法名必须与类名相同C.构造函数的主要作用是完成对类的对象的初始化工作D.一般在创建新对象时,系统会自动调用构造函数答案: A解析:类除了无参构造方法,还有有参构造方法,有参构造方法还可以通过重载写出多参的构造方法(2参,3参,4参)方法重载:同一个类中方法名称相同,而参数的类型或个数不同2.在面向对象编程里,经
摘要由CSDN通过智能技术生成

Java(一)

1、 若在某一个类定义中定义有如下的方法:abstract void performDial( ); 该方法属于(D) ?
A.本地方法
B.最终方法
C.静态方法
D.抽象方法
解析:
本地方法:简单地讲,一个native Method就是一个java调用非java代码的接口;native方法表示该方法要用另外一种依赖平台的编程语言实现。
最终方法:final void B(){},这样定义的方法就是最终方法,最终方法在子类中不可以被重写,也就是说,如果有个子类继承了这个最终方法所在的类,那么这个子类中不能出现void B(){}这样的方法。
最终类:final class A {},这样定义的类就是最终类,最终类不能被继承。
abstract修饰抽象类

2.在为传统面向对象语言的程序做单元测试的时候,经常用到mock对象。Mock对象通过反射数。请问反射最大程度破坏了面向对象的以下哪个特性?(A)
A.封装
B.多态
C.继承
D.抽象
解析:
A.封装
反射破坏代码的封装性,破坏原有的访问修饰符访问限制

3.以下程序的执行结果是:(A)
static boolean foo(char c) {
System.out.print©;
return true;
}

public static void main1(String[] args) {
int i = 0;
for (foo(‘A’); foo(‘B’) && (i < 2); foo(‘C’)) {
i++;
foo(‘D’);
}
}
A.ABDCBDCB
B.ABCDABCD
C.编译时出错
D.运行时抛出异常

4.一个完整的URL地址由(),(),端口和文件四部分组成。(B)
A.协议 用户名
B.协议 主机名
C.主机名 ip
D.以上都不正确
解析:
**URL(Uniform Resource Locator) **,统一资源定位符,能够对因特网的资源进行定位。
URL一般有四部分组成:<协议>://<主机>:<端口>/<路径>

现在最常用的<协议>为http协议。

<主机>是指主机在因特网上的域名。

http协议的默认<端口>为80(可以省略)。

<路径>是指要活的的文件的路径。

5.以下程序的输出结果是?(B)
public class Example {
String str = new String(“good”);
char[] ch = { ‘a’, ‘b’, ‘c’ };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}

public static void change(String str, char ch[])
{
str = “test ok”;
ch[0] = ‘g’;
}
}
A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc

解析:
考察值传递和引用传递。对于值传递,拷贝的值用完之后就会被释放,对原值没有任何影响,但是对于引用传递,拷贝的是对象的引用,和原值指向的同一块地址,即操作的是同一个对象,所以操作之间会相互影响
所以对于String str是值传递,操作之间互不影响,原值保持不变。而ch是数组,拷贝的是对象的引用,值发生了改变,因此选择B

6.下面有关servlet service描述错误的是?(B)
A.不管是post还是get方法提交过来的连接,都会在service中处理
B.doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C.service()是在javax.servlet.Servlet接口中定义的
D.service判断请求类型,决定是调用doGet还是doPost方法
// doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的

7.以下代码运行输出的是©
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);
}
}
A.输出:Person
B.没有输出
C.编译出错
D.运行出错

解析:
Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。

8、 在 myjsp.jsp 中,关于下面的代码说法错误的是:( A)
<%@ page language=“java” import=“java.util.*” errorPage=“error.jsp” isErrorPage=“false” %>
A.该页面可以使用 exception 对象 //当isErrorPage 为true时,才能用exception对象
B.该页面发生异常会转向 error.jsp
C.存在 errorPage 属性时,isErrorPage 是默认为 false
D.error.jsp 页面一定要有isErrorPage 属性且值为 true

解析:
exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为true时,该对象才可以使用。对于C项,errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时, isErrorPage属性值为false

9.Java对象的初始化方式有( ABC)
A.初始化块
B.构造器
C.定义变量时指定初始化值
D.其它各项都不对
//静态域最早加载,静态块之后加载
//对象的初始化方式:
1.new时初始化 ;
2.静态工厂 newInstance;
3.反射Class.forName();
4.clone方式;
5.反序列化;

10.一个servlet的生命周期不包括方法?(B)
A.init()方法
B.invalidate()方法
C.service()方法
D.destroy()方法

//Servlet生命周期有三个阶段:
1、初始化阶段,调用init()方法
2、响应客户请求,调用service()方法
3、终止阶段,调用destroy()方法

Java (二)

1、 HashMap的数据结构是怎样的?(C)
A.数组
B.链表
C.数组+链表
D.二叉树

//JDK8以后,HashMap的数据结构是数组+链表+红黑树

2、 在 JAVA 编程中,Java 编译器会将 Java 程序转换为( A)?
A.字节码
B.可执行代码
C.机器代码
D.以上都不对
//java源代码 ->编译器->jvm可执行的java字节码(即虚拟指令 class文件)->jvm->jvm中解释器->机器可执行的二进制机器码->程序运行。
编译器将Java源代码编译成字节码class文件
类加载到JVM里面后,执行引擎把字节码转为可执行代码
执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。

3.下面有关JVM内存,说法错误的是?(C)
A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
B.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
C.方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的 // ×
D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

虚拟机栈区:也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。

堆区:JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。
-方法区:所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

程序计数器:线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。

4、JAVA中,下列语句哪一个正确(C)
A.class中的constructor不可省略
B.constructor必须与class同名,但方法不能与class同名
C.constructor在一个对象被new时执行
D.一个class只能定义一个constructor

解析:
A 省略构造函数,编译器会自动生成。
D 构造函数可以重载
B 方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

5.在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为(B)
A.this.A(x)
B.this(x)
C.super(x)
D.A(x)

解析:
this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
super是调用父类的方法;
A(a)这种形式是在new一个类时使用。

6.下列选项中属于面向对象程序设计语言特征的是(ABD)
A.继承性
B.多态性
C.相似性
D.封装性

7.以下哪个正确?(ACD)
A.abstract类只能用来派生子类,不能用来创建abstract类的对象。
B.final类不但可以用来派生子类,也可以用来创建final类的对象。
C.abstract不能与final同时修饰一个类。
D.abstract类定义中可以没有abstract方法。

解析:
1、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。

8、 JAVA反射机制主要提供了以下哪些功能?(ABCD)
A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法
D.在运行时调用一个对象的方法

解析:
Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
因此,答案为:ABCD

9.以下关于Histroy对象的属性或方法描述正确的是(AD)
A.bcak回到浏览器载入历史URL地址列表的当前URL的前一个URL
B.go表示刷新当前页面
C.length保存历史URL地址列表的长度信息
D.forward转到浏览器载入历史URL地址列表的当前URL的下一个URL。

选A、D。考察的是浏览器的内置对象管理模型,简称BOM(Browser Object Model)中的Histroy属性和方法。

length 返回浏览器历史列表中的URL数量。所以C中表述的长度信息是错误的。

back() 加载 history列表中的前一个URL。

forward() 加载 history 列表中的下一个URL。

go() 加载history列表中的某个具体页面。所以B的表述刷新当前页面是错误的。

10、(EG)
public class NameList
{
private List names = new ArrayList();
public synchronized void add(String name)
{
names.add(name);
}
public synchronized void printAll() {
for (int i = 0; i < names.size(); i++)
{
System.out.print(names.get(i) + ””);
}
}
public static void main(String[]args)
{
final NameList sl = new NameList();
for (int i = 0; i < 2; i++)
{
new Thread()
{
public void run()
{
sl.add(“A”);
sl.add(“B”);
sl.add(“C”);
sl.printAll();
}
} .start();
}
}
}
Which two statements are true if this class is compiled and run?

A.An exception may be thrown at runtime.
B.The code may run with no output, without exiting.
C.The code may run with no output, exiting normally(正常地).
D.The code may rum with output “A B A B C C “, then exit.
E.The code may rum with output “A B C A B C A B C “, then exit.
F.The code may ruin with output “A A A B C A B C C “, then exit.
G.The code may ruin with output “A B C A A B C A B C “, then exit.

在每个线程中都是顺序执行的,所以sl.printAll();必须在前三句执行之后执行,也就是输出的内容必有(连续或非连续的)ABC。而线程之间是穿插执行的,所以一个线程执行 sl.printAll();之前可能有另一个线程执行了前三句的前几句。
E答案相当于线程1顺序执行完然后线程2顺序执行完。
G答案则是线程1执行完前三句add之后线程2插一脚执行了一句add然后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC
输出加起来即为ABCAABCABC。

11、 关于容器下面说法正确的是?(D )
A.列表(List)和集合(Set)存放的元素都是可重复的。
B.列表(List)和集合(Set)存放的元素都是不可重复的。
C.映射(Map)中key是可以重复的。
D.映射(Map)中value是可以重复的。

12.以下说法错误的是?(C)
A.数组是一个对象
B.数组不是一种原生类
C.数组的大小可以任意改变
D.在Java中,数组存储在堆中连续内存空间里

解析:
在java中,数组是一个对象,不是一种原生类,对象所以存放在堆中,又因为数组特性,是连续的,只有C不对

13.下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?(B)
A.private
B.无修饰符
C.public
D.protected

public protected defalut private
同一个类
同一个包 ×
其他包 × ×
其他 × × ×

14.关于以下程序代码的说明正确的是?(D)
public class HasStatic {
private static int x = 100;
public static void main(String args[]) {
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1 = new HasStatic();
hs1.x++;
HasStatic.x–;
System.out.println(“x=” + x);
}
}
A.程序通过编译,输出结果为:x=103
B.10行不能通过编译,因为x是私有静态变量
C.5行不能通过编译,因为引用了私有静态变量
D.程序通过编译,输出结果为:x=102

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
static变量在第一次使用的时候初始化,但只会有一份成员对象。
所以这里不仅可以调用,而且每一次调用都确实修改了x的值,也就是变化情况是这样的:
x=101
x=102
x=103
x=102

15.如何放掉一个指定占据的内存空间?(D)
A.调用free()方法
B.代用system.gc()方法
C.赋值给该项对象的引用为null
D.程序员无法明确强制垃圾回收器运行

解析:
在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。

16.一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系?(D)
A.表对应类
B.记录对应对象
C.表的字段对应类的属性
D.表之间的参考关系对应类之间的依赖关系

解析:
一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性

17.下列关于Java并发的说法中正确的是(B)
A.CopyOnWriteArrayList适用于写多读少的并发场景
B.ReadWriteLock适用于读多写少的并发场景
C.ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
D.只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了

解析:
A,CopyOnWriteArrayList适用于写少读多的并发场景
B,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。在读多写少的情况下可以提高效率
C,ConcurrentHashMap是同步的HashMap,读写都加锁
D,volatile只保证多线程操作的可见性,不保证原子性

18.以下代码执行后输出结果为(A )

public class Test
{
   
    public static Test t1 = new Test();
    {
   
         System.out.println("blockA");
    }
    static
    {
   
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
   
        Test t2 = new Test();
    }
 }
A.blockAblockBblockA
B.blockAblockAblockB
C.blockBblockBblockA
D.blockBblockAblockB

解析:
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法 静态块按照申明顺序执行,先执行Test t1 = new Test();
所有先输出blockA,然后执行静态块,输出blockB,最后执行main
方法中的Test t2 = new Test();输出blockA。
//静态方法-》静态成员变量、静态代码块 —》 成员变量、代码块 ----》 构造方法。

19.有关hashMap跟hashTable的区别,说法正确的是?(ABCD)

A.HashMapHashtable都实现了Map接口
B.HashMap是非synchronized,而Hashtablesynchronized
C.HashTable使用EnumerationHashMap使用Iterator
D.HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

A正确。Map是一个接口,hashtable,hashmap都是它的实现。
B正确。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
C正确。HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
D正确。哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

20.以下可以正确获取结果集的有?(AD)

A.Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery(“select * from book”);

B.Statement sta=con.createStatement(“select * from book”);
 ResultSet rst=sta.executeQuery();

C.PreparedStatement pst=con.prepareStatement();
ResultSet rst=pst.executeQuery(“select * from book”);

D.PreparedStatement pst=con.prepareStatement(“select * from book”);
ResultSet rst=pst.executeQuery();

解析:
A,D是正确的;创建Statement是不传参的,PreparedStatement是需要传入sql语句
说一下preparedStatement和statement的区别与联系:在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。
PreparedStatement 接口继承 Statement,PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于Statement对象。Statement为一条Sql语句生成执行计划,如果要执行两条sql语句select colume from table where colume=1;select colume from table where colume=2; 会生成两个执行计划一千个查询就生成一千个执行计划!PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 通过set不同数据只需要生成一次执行计划,可以重用

java(三)

1.下列InputStream类中哪个方法可以用于关闭流?(B)
A.skip() //跳过字节
B.close() //关闭流
C.mark() //标记流
D.reset() //复位流

2.下面语句正确的是(D)
A.x+1=5
B.i++=1
C.a++b=1
D.x+=1

解析:
选D,+=,-=,*=,/=最常见。
ABC都编译错误。

3.下面关于继承的描述正确的是?(A)
A.在Java中只允许单一继承
B.在Java中一个类只能实现一个接口
C.在Java中一个类不能同时继承一个类和实现一个接口
D.Java的单一继承使代码不可靠

4.下列哪种说法是正确的?©
A.实例方法可直接调用超类的实例方法
B.实例方法可直接调用超类的类方法
C.实例方法可直接调用本类的类方法
D.实例方法可直接调用其他类的实例方法

解析:
a.实例方法可以调用超类公有实例方法
b.实例方法可以直接调用超类的公有类方法
d.实例方法可以通过类名调用其他类的类方法

5.A派生出子类B,B派生出子类C,并且在java源代码中有如下声明:
1.A a0=new A();
2.A a1=new B();
3.A a2=new C();
以下哪个说法是正确的?(A)
A.第1行,第2行和第3行的声明都是正确的 //可以向上转型
B.第1,2,3行都能通过编译,但第2,3行运行时出错
C.第1,2行能通过编译,但第3行编译出错
D.只有第1行能通过编译

6.java中,静态变量static在不同线程的不同实例中地址是否一样?他们储存在什么区域?(C)
A.地址一样,在堆栈区。
B.地址不一样,在堆栈区。
C.地址一样,在全局区。 //static变量存储在方法区,线程共享,全局区是方法区的一部分
D.地址不一样,在全局区。

7.下面代码的输出结果是什么?(D)
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
A.3
B.123
C.1
D.12
解析:
1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
2、catch捕捉异常,继续执行System.out.print(1);
3、当执行 thrownewRuntimeException(); 又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行

8.以下代码将打印出?(B)
public static void main(String args[]) {
List Listlist1 = new ArrayList();
Listlist1.ad

  • 7
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Java基础面试选择题可以包括以下几个方面的内容。首先,面向对象的特征有封装、继承和多态。\[2\]其次,Java中有8种基本数据类型,分为整型、浮点型、字符型和布尔类型。\[2\]此外,JNI的步骤包括在Java类中编写带有native声明的方法、使用javac命令编译Java类、使用javah命令生成头文件、使用C/C++实现本地方法、生成动态连接库以及执行Java程序。\[3\]希望这些信息对你有帮助,祝你面试顺利! #### 引用[.reference_title] - *1* [10万字208道Java经典面试题总结(附答案)](https://blog.csdn.net/guorui_java/article/details/119299329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java基础面试题(1)](https://blog.csdn.net/qq_45950109/article/details/117442848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java基础常见面试题及详细答案(总结40个)](https://blog.csdn.net/ayouki123456/article/details/124983188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值