刷完一千道java笔试题的常见题目分析

简介: 这篇文章是关于刷完一千道Java笔试题后的常见题目分析,涵盖了Java基础知识点,如标识符命名规则、抽象类与接口的区别、String类的equals方法、try-catch-finally块的执行逻辑、类与实例方法的区别、this与super关键字的用法、面向对象的基本概念、重写与重载的原则等,并建议结合JVM内存结构图加深理解。

java基础刷题遇到的最常见问题

可以先看一下这位博主整理的java面试题(很详细,我看了好几遍了):https://blog.csdn.net/ThinkWon/article/details/104390612

java基础知识https://blog.csdn.net/weixin_43304253/article/details/119386696

你以为你掌握基础吗?真的掌握了吗?真真真的掌握了吗?做几道题就知道有多虐心了,一个知识点变着发的搞你心态。还有很很很重要的一点,只要牵涉的知识稍微深一点,都离不开JVM知识。

建议先看一下jvm的视屏再看,整理的时候主要是内存结构图以及重要的知识。很多细节忽略了。对待刚接触jvm的不太友好。
JVM内存图:https://blog.csdn.net/weixin_43304253/article/details/119609324

1、在这里插入图片描述
解析:

Java标识符命名规则:
1 由26个大小写的英文字母"A-Z",“a-z”;数字"0-9",下划线"_" 和
美元符号"$"四部分组成;

2 标识符以字母或下划线"_“或” " 开 头 ; 注 : 尽 管 " "开头; 注:尽管" "开头;注:尽管""是一个合法的Java字符,但尽量不要在代码中使用这个字符,
它一般用在Java编译器或其他工具生成的名字中;

3 标识符不能是关键字,如:public,protected,…
以及两个保留的 关键字const和goto;

4 标识符区分大小写。
A 中不能以数字开头;
B 中不能以& 开头(不是$);
C 中是保留的关键字;

sizeof:是C/C++的方法
保留字:const goto
显示常量值:true 、false、null
关键字:
在这里插入图片描述

2、在这里插入图片描述

抽象类:
1、关键字abstract class
2、子类extends继承抽象类,只能单继承
3、成员变量权限四个public 、protected、default、private
【public 范围最大、protected 可以在包以外的子类、default默认修饰符只能在同一个包下、private只能在当前类。(经常问这个)】
4、抽象方法权限只有public、protected、和default三种。
5、可以包含静态代码块,静态方法
6、可以有普通方法
7、继承者如果是全部继承抽象方法就不再是抽象类,否则任然是抽象类

接口
1、关键字interface
2、子类implements实现接口,实现多个接口
3、不能有构造器
4、成员变量权限默认都是public static final ,接口中声明的变量都是常量不能被继承
5、方法默认权限public abstract
6、不可以有静态代码块,可以有静态方法
7、没有普通方法
8、下一代只能实现

接口方法的增加随着版本的更新改变
jdk1.7,接口中只包含抽象方法,使用public abstract修饰
jdk1.8(不包括)之前:接口中不能有静态方法
jdk1.8(包括哦)1.8之后:接口中可以定义静态方法。
在jdk1.8,接口中加入了默认方法(default修饰,接口的实现类,直接调用或者重写该方法)、静态方法(static修饰,通过接口调用)
在jdk1.9中,接口中加入了私有方法,使用private修饰,私有方法供接口内的默认方法使用

3、在这里插入图片描述
解析:
1、String中的equal比较的是两个字符串的内容是否相等。(这里的equals重写了Object中的equals)
2、Object中的equals和==相等。比较的都是引用地址

String a=“a”;//存储在方法区中的常量池
String b=“a”;//常量池中a的引用给b

只要是new 就会在堆中开辟新的内存空间

4、在这里插入图片描述
解析:
运行过程:当程序执行到try{}语句中的return方法,将返回的结果存储到一个临时栈,程序不会立即返回,而是执行finally{}中的程序,覆盖了a的值,不会去更新临时栈中的那个要返回的值。

如果finally{}里边也有一个return 执行这个return的时候,就会更新临时栈的值。

结论:
1、不管有没有异常,finally块里边的代码都会执行(也有不执行的时候,不要钻牛角尖)
2、当try{}和catch{}中都有return时,仍然会执行finally{}
3、finally{}中包含return,会让程序提前退出,返回值不再是try{}或catch{}中保存的值

巧记:任何执行try或者return语句之前,都会执行finally语句,如果finally存在,如果finally语句包含return语句。程序就return了。finally中的return一定会被return

5、在这里插入图片描述
详细区分(包含代码):https://blog.csdn.net/weixin_43304253/article/details/119418766

6、在这里插入图片描述
解析:
首先明白一点:
类方法是属于整个类的,不是每个实例所独有的。用static修饰
实例方法是属于类的某个对象的。

类方法在初始化阶段就已经加载到方法区中。对象后来在堆中创建。一个已经存在的怎么可能使用未创建出来的。

  • 类方法中不能引用对象变量

  • 类方法中不能调用类的对象方法

  • 类方法中不能使用super、this关键字

  • 类方法不能被覆盖

  • 对象方法可以引用对象变量,也可以引用类变量

  • 对象方法中可以调用类方法

  • 对象方法中可以使用super、this关键字。

this关键字的用法

  • 1、普通的直接引用,相当于当前对象本身
  • 2、形参与成员名字相同,区分
  • 3、引用本类的构造函数(需要放在构造函数的第一行)

super关键字的用法

  • 1、普通的直接引用(引用父类)(相当于指向当前对象的父类的引用)
  • 2、子类中的成员变量或者方法与父类的成员变量或者方法重名时,区分
  • 3、 引用父类的构造函数(放在子类构造函数的第一行)

如果子类重写父类的方法,在new出一个父类对象的子类引用。调用的方法是子类重写的方法,若要调用父类的重名方法需要使用super。

7、在这里插入图片描述
解析:
首先是类初始化、然后是对象初始化
跟我一起来读=======
父类静态代码块—>子类静态代码块–>父类非静态代码块–>父类构造函数–>子类非静态代码块–>子类的构造方法

8、在这里插入图片描述
static方法中时不能访问非静态变量a的,需要将a声明为static,答案才是0.

静态方法在初始化阶段就已经初始化,怎么可能调用未初始的变量。

9、在这里插入图片描述
数据类型:1、基本数据类型(数值型(整数型、浮点型)、字符型、布尔型)。2、引用数据类型(类、接口、数组、String)

10、在这里插入图片描述
重写(覆盖)

两同两小一大
两同:方法名和参数列表相同
两小:重写方法的返回值和抛出的异常小
一大:重写方法的访问修饰符大于等于被重写的访问修饰符。

  • 1、方法运行的时候(子类没有重写父类的方法,子类的实例会向上寻找父类的同名方法)

  • 2、重写只发生在可见的实例方法中【1、静态方法不存在重写,形式上的重写只能是隐藏。2、私有方法也不能重写,子类就算定义了,也相当于一个新的方法。3、静态方法和实例方法不存在相互重写】

  • 修饰符:可以扩大不能缩小。父类是public 子类不能是private

  • 抛出的异常可以缩小。父类的异常范围比子类的异常范围大

重载【方法名相同、参数列表不同】

  • 方法名相同
  • 参数列表不同(个数不同或类型不同、参数排列顺序)
  • 方法的返回值类型可相同也可以不同

11、在这里插入图片描述
解析:
String对象的两种创建方式:

  • 1、String str1=“aaa”;在常量池中获取对象,编译时期会在常量池中创建一个字符串对象
  • 2、String srr2=new String(“aaa”);一共会创建两个字符串对象,一个在堆中,一个在常量池中(前提是常量池还没有"aaa"字符串对象)

String类型的常量池比较特殊

直接使用双引号声明出来的String对象会直接存储在常量池中。
如果不是双引号声明的String对象,可以使用String提供的intern方法,String.intern()是一个Native方法,作用:如果运行时常量池中已经包含一个等于次String内容的字符串,则返回常量池中该字符的引用;如果没有,则在常量池中创建与此String内容相同的字符串,并返回常量池中创建的字符串的引用

12、
在这里插入图片描述
JVM中的方法区:https://blog.csdn.net/weixin_43304253/article/details/119645888
在这里插入图片描述
13、
在这里插入图片描述

  • synchronized:具有原子性,有序性、可见性
  • volatile:具有有序性和可见性
    在这里插入图片描述
    14、在这里插入图片描述
    解析:
    java语言是静态多分配,动态单分配的

如果是方法重载选择,使用静态类型
如果是父子之间的方法重写,使用动态类型。
入 A a=new B(); 类型B去查找重写的方法。类型A去查找重载的方法。

相关文章
|
17天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
2月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
59 4
|
2月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
3月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
4月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
196 6
|
4月前
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。
|
4月前
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
89 2
|
4月前
|
存储 算法 Java
校招 java 面试基础题目及解析
本文围绕Java校招面试基础题目展开,涵盖平台无关性、面向对象特性(封装、继承、多态)、数据类型、关键字(static、final)、方法相关(重载与覆盖)、流程控制语句、数组与集合、异常处理等核心知识点。通过概念阐述和代码示例,帮助求职者深入理解并掌握Java基础知识,为校招面试做好充分准备。文末还提供了专项练习建议及资源链接,助力提升实战能力。
125 0
|
4月前
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
166 9
|
4月前
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
175 2