真正做错的题,不会做的题价值才最大!!!
1、有如下一段代码,请选择其运行结果()
-
public class StringDemo{ -
private static final String MESSAGE="csdn"; -
public static void main(String [] args) { -
String a ="cs"+"dn"; -
String b="cs"; -
String c="dn"; -
System.out.println(a==MESSAGE); -
System.out.println((b+c)==MESSAGE); -
} -
}
A.true true
B.false false
C.false true
D.true false
★为了给大家思考的空间,答案放在在下一题下方!
2、java中的哪些包不需要手动导入(自动导入)?()
A.java.lang
B.java.util
C.java.applet
D.java.awt
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第一题解析 -
答案:D -
要注意两个问题: -
1,字符串在java中存储在字符串常量区中(不属于堆和栈) -
2,==判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法 -
首先判断a==MESSAGE -
String a = "tao" + "bao"; -
此时的a会存放在常量池区域内 -
同一份字符串常量在内存中只有一份,据题意 , a会和定义的静态常量指向的是同一地址,返回true -
再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
♥扩展知识: 1.堆(heap) 在JVM中只有一个堆,在虚拟机开启时创建,所有的线程都共用这一个堆。类的对象会储存在堆内存中,而new对象的引用地址会储存在stack栈中。堆中只存储对象本身和数组。 2.栈(stack) Java栈与堆不同每一个线程都有一个stack,栈的区域非常小,大概只有1M左右,但是存储速度非常快,所以我们把快速执行的任务存储在stack。栈中存储的就是基本数据类型和对象的引用(地址,而不是实例!)。 3.方法区(method) 方法区(method)又叫静态区,这里主要存储的就是类(class)、静态方法、静态变量、常量以及成员方法。我们可以发现在方法区中存储的都是整个程序中唯一存在的元素,所以方法区与堆一样被所有线程共享。我们常说的常量池也是方法区的一部分。
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记【点击此处即可-免费获取】
https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho
3、根据以下代码段,执行new Child("John", 10); 要使数据域data得到10,则子类空白处应该填写( )。
A.data = d;
B.super.data = d;
C.Parent(d);
D.super(d);
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第二题解析 -
答案:A -
本题考查Java中包的概念。Java中用import语句来导入包,但需注意的是,Java语言中的java.lang包是由编译器直接自动导入的, -
因此,编程时使用该包中的类,可省去 import导入。使用其他包中的类,必须用import导入。
AI运行代码java
♥扩展知识:
java.lang:java.lang包是Java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。
Java 8中的java.lang包。主要类如下图:
4、以下代码的输出结果是?
-
public class B -
{ -
public static B t1 = new B(); -
public static B t2 = new B(); -
{ -
System.out.println("构造块"); -
} -
static -
{ -
System.out.println("静态块"); -
} -
public static void main(String[] args) -
{ -
B t = new B(); -
} -
}
A.静态块 构造块 构造块 构造块
B.构造块 静态块 构造块 构造块
C.构造块 构造块 静态块 构造块
D.构造块 构造块 构造块 静态块
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第三题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: D -
1.子父类存在同名成员时,子类中默认访问子类的成员,可通过super指定访问父类的成员,格式:super.xx (注:xx是成员名); -
2.创建子类对象时,默认会调用父类的无参构造方法,可通过super指定调用父类其他构造方法,格式:s uper(yy) (注:yy是父类构造方法需要传递的参数)
AI运行代码java
5、下列代码输出结果为( )
-
class Animal{ -
public void move(){ -
System.out.println("动物可以移动"); -
} -
} -
class Dog extends Animal{ -
public void move(){ -
System.out.println("狗可以跑和走"); -
} -
public void bark(){ -
System.out.println("狗可以吠叫"); -
} -
} -
public class TestDog{ -
public static void main(String args[]){ -
Animal a = new Animal(); -
Animal b = new Dog(); -
a.move(); -
b.move(); -
b.bark(); -
} -
}
A.动物可以移动
狗可以跑和走
狗可以吠叫
B.动物可以移动
动物可以移动
狗可以吠叫
C.运行错误
D.编译错误
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第四题解析 -
答案:C -
开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化, -
所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为 -
在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了, -
因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块 -
部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有 -
的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象, -
调用构造函数输出('构造块')
AI运行代码java
6、往OuterClass类的代码段中插入内部类声明, 错误的是:
-
public class OuterClass{ -
private float f=1.0f; -
//插入代码到这里 -
}
AI运行代码java
A.class InnerClass{
public static float func(){return f;}
}
B.abstract class InnerClass{
public abstract float func(){}
}
C.static class InnerClass{
protected static float func(){return f;}
}
D.public class InnerClass{
static float func(){return f;}
}
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第五题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: D -
编译看左边,运行看右边。也就是是编译的时候会把它当成左边的类型,运行的时候看右边类型的方法体。 -
父类型引用指向子类型对象,无法调用只在子类型里定义的方法
AI运行代码java
7、以下代码的运行结果是什么( )
-
class Supper{ -
public int get() -
{ -
System.out.println("Supper"); -
return 5; -
} -
} -
public class Sub{ -
public int get() -
{ -
System.out.println("Sub"); -
return new Integer("5"); } -
public static void main(String args[]) { -
new Supper().get(); -
new Sub().get(); } -
}
A.Supper Sub
B.Supper 5 Sub
C.Supper 5 5 Sub
D.Supper Sub 5 5
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第六题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: A B C D -
A 静态内部类中才能含有静态属性,静态方法当中不能引用非静态变量。 -
B 抽象类不能有方法体。 -
C 静态方法当中不能引用非静态变量 -
D 静态方法当中不能引用非静态变量
AI运行代码java
8、java用()机制实现了线程之间的同步执行
A.监视器
B.虚拟机
C.多个CPU
D.异步调用
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第七题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: A -
要相信自己,明明都没有打印返回值,哪来的5
AI运行代码java
9、以下哪个式子有可能在某个进制下成立()
A.13*14=204
B.12*34=568
C.14*14=140
D.1+1=3
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第八题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: A -
首先jvm中没有进程的概念 ,但是jvm中的线程映射为操作系统中的进程,对应关系为1:1。那这道题的问的就是jvm中线程如何异步执行。在jvm中 是使用监视器锁来实现不同线程的异步执行,在语法的表现就是synchronized 。
AI运行代码java
10、下列说法正确的是()?
A.我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程
B.一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
C.synchronized可以解决可见性问题,volatile可以解决原子性问题
D.ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第九题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: A -
(3+x)*(4+x)=2x^2+4 -
.....x=8或-1
AI运行代码java
11、在Spring事务的ISOLATION_REPEATABLE_READ隔离级别下,有可能出现以下哪种情况( )
A.脏读
B.幻读
C.不可重复读
D.都有可能发生
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第十题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: B D -
A:可以直接调用run方法, 但就起不到多线程的目的了。A选项错在调用Thread的run方法不会抛出异常。 -
C:volatile不能保证原子性问题
AI运行代码java
12、下面代码创建了多少个对象()
String s = "a"+"c"+"+"d"
AI运行代码java
A.1
B.2
C.3
D.4
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记【点击此处即可-免费获取】
https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho
★为了给大家思考的空间,答案放在在下一题下方!
-
☝第十一题解析(喜欢就点赞收藏起来趴♥♥♥) -
答案: B -
ISOLATION_REPEATABLE_READ隔离级别下,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自 -
己所修改,这种隔离级别可以阻止脏读和不可重复读,但幻读仍有可能发生。
AI运行代码java
13、以下哪些类是线程安全的()
A.Vector
B.HashMap
C.ArrayList
D.StringBuffer
E.Properties
★为了给大家思考的空间,答案放在在下一题下方!
☝第十二题解析
如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。
关于这个问题很多人面试的时候都遇见过,我看了网上很多论坛对于这个问题都是不统一的。有的人说创建了一个对象,有的人说创建了五个对象,也有的人说创建了两个对象。
先说说创建一个的吧。当初面试的时候我跟面试官说创建了一个,他用非常疑惑的语气告诉我说,不只是一个哦,然后这道面试题我就被pass掉了。好在过了技术面试了,但是对于这个问题我还是耿耿于怀,直到后来我看了《深入理解JVM》这本书之后有种豁然开朗的感觉。
其实网上的很多大佬们说创建了一个对象,这个答案是没有问题的!!!
但是面试的时候为什么会被说是错误的呢?其实面试官真正想问的并不是这个,而是你对于JDK版本的理解,不同的JDK版本对于字符串常量池有不同的优化!!感兴趣的自己再去查查吧!这里就不多阐述了
14、下列java程序的输出结果为()。
-
public class Example{ -
String str=new String("hello"); -
char[]ch={'a','b'}; -
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 void change(String str,char ch[]){ -
str="test ok"; -
ch[0]='c'; -
} -
}
A.hello and ab
B.hello and cb
C.hello and a
D.test ok and ab
E.test ok and cb
F.test ok and c
-
☝第十三题解析 -
答案:ADE -
A,Vector相当于一个线程安全的List -
B,HashMap是非线程安全的,其对应的线程安全类是HashTable -
C,Arraylist是非线程安全的,其对应的线程安全类是Vector -
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder -
E,Properties实现了Map接口,是线程安全的 -
源码看下图所示
AI运行代码java
15、下列有关Servlet的生命周期,说法不正确的是?
A.在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B.在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C.在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D.destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
-
☝第十四题解析 -
答案:B -
解析如下图所示
AI运行代码java
16、以下关于JAVA语言异常处理描述正确的有?()
A.throw关键字可以在方法上声明该方法要抛出的异常。
B.throws用于抛出异常对象。
C.try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。
D.finally语句块是不管有没有出现异常都要执行的内容。
F.在try块中不可以抛出异常
-
☝第十五题解析 -
正确答案: A -
创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前
AI运行代码java
-
☝第十六题解析 -
答案: C D -
Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 -
throw用于抛出异常。 -
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。 -
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。 -
cacth用于捕获从try中抛出的异常并作出处理。 -
finally语句块是不管有没有出现异常都要执行的内容。
AI运行代码java
结束语 🥇🥇🥇
祝大家早日找到满意的工作!





1317

被折叠的 条评论
为什么被折叠?



