java基础面试题(一)

news/2024/12/13 9:03:48/

java概述

1.何为编程?

让计算机为解决某个问题而使用程序设计语言编写程序代码,并得到结果的过程。

2.什么是java?

java是面向对象的编程语言,具有功能强大、简单易用的特征。

3.jdk、jre、jvm

jdk:java的开发工具(包含jre)

jre:java的运行环境(包含jvm和核心类库)

jvm:java 虚拟机

4.什么是跨平台?原理是什么?

跨平台:一次编译,多个系统运行

原理:只要系统安装了对应的java虚拟机,该系统就可以运行java程序

5.java语言特点

简单易学

面向对象

无关平台

支持多线程

安全

6.什么是字节码?字节码的好处?

字节码:电脑里数据的计量单位

好处:字节码解决了java程序无需重复编译,便可以在不同的系统数运行

7.什么是java主类?应用程序和小程序的主类有什么不同?

java主类:只能有一个主类,包含main方法

区别:小程序中主类必须继承JApplet或Applet类,必须是public,应用程序不固定;主类是java程序的入口

基础语法

数据类型

1.什么是基础数据类型?

整数类型:byte(1)、short(2)、int(4)、long(8)

浮点类型:float(4)、double(8)

字符型:char(2)

布尔型:boolean(1)

2.什么是引用数据类型?

接口

数组

编码

1.java采用的编码方式?特点?

采用Unicode编码标准

为每个字符制定一个唯一的数值,在任何平台、语言都可使用

注释

1.java注释及作用?

单行注释://

多行注释:/*    */

文档注释:/**   */

作用:增加代码的可读性,有利于修改和交流

2.访问修饰符的区别?

public:所有类、接口、变量、方法都可见

protected:同一包内的类,以及子类可见,不能修饰类

default:同一包内可见,不使用修饰符

private:仅当前类可见

关键字

1.final作用

修饰的类不能被继承

修饰的方法不能被重写

修饰的变量不能被改变

2.final、finally、finalize的区别?

final:可以修饰类、方法、变量

finally:作用于try-catch代码块中,不管是否出现异常,都要执行

finalize:jvm中垃圾回收器调用finalize方法,回收垃圾

3.this的用法?

指向本身的一个指针;

  1. 直接引用,指向对象本身

  1. 形参和成员名字重名,用this来区分

  1. 引用本类的构造函数(放在构造函数的第一条语句)

4.super的用法?

指向父类的一个指针(最近);

  1. 直接引用,指向当前父类的对象

  1. 子类中成员变量或方法与父类中成员变量或方法重名时,用于区分

  1. 调用父类的构造函数(应放在第一行)

5.this和super的区别?

  1. 本质来讲,this是指针,但super是关键字

  1. this引用自身对象、变量、构造函数,super引用父类中对象、变量、方法、构造方法

6.static的应用及原理?

会在类加载的时候执行一次,加载时分配空间,大多数时候会将一些只需要进行一次的初始化操作放在其中;

被修饰的变量或方法是独立的,被所有实例共享;

  1. 修饰成员变量

  1. 修饰成员方法

  1. 静态代码块

  1. 修饰类(内部类)

  1. 静态导包

流程控制语句

1.break、continue、return的区别及作用?

break:跳出循环,执行下面代码

continue:跳出本次循环,继续执行下次循环

return:跳出循环,不在执行下面代码,直接返回

2.如何跳出多重嵌套循环?

使用break即可跳出循环,继续执行下面代码

面向对象

1.什么是面向对象?

面向对象(行为化):把现实中的事务都抽象成对象,后完成拼装,具有封装、继承、多态,性能低,易于维护。

2.面向对象的三大特征?

封装:把一个对象的属性私有化,同时提供外界访问的方法

继承:在已有类的基础上建立新类,新类可以新增功能。通过继承可以方便的复用以前代码

多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,提高程序的拓展性

3.抽象类与接口的区别?

  1. 抽象类可以有方法实现;接口不存在方法和构造器

  1. 抽象类用extends继承;接口用implement实现;

  1. 接口默认用public;抽象方法不固定;

  1. 抽象类可以继承一个类或实现多个接口;接口可以继承一个或多个其他接口

  1. 抽象类新增方法不需要改变实现类;接口新增方法,必须改变实现类;

4.什么是构造方法?

作用是完成对类对象的初始化工作,如果没有什么构造方法也会有默认的不带参数的构造方法;

特性:

  1. 名字与类名相同;

  1. 没有返回值,但不能用void什么

  1. 自动执行,无需调用

5.成员变量和局部变量的区别?

  1. 成员变量整个类都有效;局部变量一般在方法或语句内有效

  1. 成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量当方法用完或语句结束自动释放

  1. 成员变量有默认初始值;局部变量没有,使用前必须赋值

6.什么是内部类?内部类的种类

将一个类的定义,放在另一个类的内部;内部类本身是一个属性,与其他属性定义方式一样。

成员内部类:定义在类内部,非静态的;可以访问外部的所有方法和变量;使用方式:外部类实例.new 内部类();

局部内部类:定义在方法中的内部类;可以访问外部的所有方法和变量;如果定义在静态方法中,只能访问外部类的静态方法和变量;使用方式:在对应的方法内,new 内部类();

匿名内部类:没有名字的内部类;必须继承一个抽象类或实现一个接口;不能定义静态;参数申明为final;不能是抽象的;使用方式:new 类{}

静态内部类:定义在类内部的静态类;可以访问外部类的所有静态变量;使用方式:new 外部类.静态内部类();

7.内部类的优点及使用场景

优点:

  1. 不为其他类所见,局域封装性

  1. 实现了多重继承

  1. 方便定义回调

  1. 可以访问创建它的外部类对象的内容,包括私有数据

使用场景:

  1. 使代码更加灵活,富有扩展性;

  1. 除了外部类,不能被其他类访问

  1. 解决一些非面向对象的语句块

8.重写与重载的区别

  1. 重载是相同方法名,参数不同;重写是子类重写父类方法;

  1. 重载定义在类中;重写定义在父类和子类之间

  1. 重载对返回没有要求;重写要求返回类型,有兼容的返回类型

  1. 重载的参数个数、类型、顺序都可以不同;重写父子类必须相同

  1. 重载对访问修饰符没有要求;重写的访问修饰符必须大于父类

9.==和equals的区别

==:基本数据类型比得是值,引用数据类型比得是内存地址

equals:

没有重写:等价于==

重写:比较内容是否相同

10.hashCode与equals

hashCode:确定对象在哈希表中的位置,返回int;加入对象是,先计算对象的hashcode来判断加入的位置,如果hashCode已存在,调用equals来检查对象是否相同。

两个对象相同,hashCode一定相同;hashCode相同,对象也不一定相同。

11.对象相等和引用相等

对象相等:指的是内容是否相等;引用相等:指的是内存地址是否相等。

12.什么是值传递

调用方法是时进实际参数负责复制一份传到方法中,就算修改参数,也不会影响实际参数

13.值传递与引用传递的区别

值传递:方法调用时,传递的参数是直接拷贝,传递后互不相关;

引用传递:方法调用时方法调用时,传递的参数是引用地址,传递前后都指向同一个引用地址;

14.instanceof关键字的作用

双目运算符,检测对象是否为一个类

15.java自动拆箱与装箱

拆箱:将包装器类型,转化为基本数据类型

装箱:将基本数据类型,转化为包装器类型

16.深拷贝与浅拷贝的区别

浅拷贝:对于基础数据类型是直接进行值传递,在另一个空间存放,修改值不会影响拷贝值;对于引用数据类型是进行的地址传递,不开辟新空间,所以两个值会指向同一个内存地址,修改后会影响拷贝源的值。

深拷贝:新分配一块内存,会拷贝所有的属性,并拷贝属性指向的内存,速度慢,花销大

17.泛型中super和extends的区别

泛型中extends是设定类型通配符的上限;super是设定类型通配符的下限

18.java类加载器有哪些

1.引导类加载器(启动类加载器)

2.拓展类加载器

3.系统类加载器

4.自定义加载器

19.双亲委派原则

一个类加载器收到请求后不会立即加载自己,而是先检查父类加载器是否已经加载,层层迭代,到顶层加载器没有了,会往下进行委派去加载指定的类

反射

1.什么是反射?

能够动态的获取信息以及调用对象的方法;对于任意类和任意方法都能知道所有的方法和属性;

2.反射的方式

  1. 通过new对象实现

  1. 通过路径实现

  1. 通过类名实现

3.反射的优缺点

优点:能动态加载类,提高代码灵活度

缺点:消耗资源,性能是瓶颈

4.反射的应用场景

  1. 动态配置属性

  1. 可以获取某个类的实例

  1. 将xml或配置文件加载到内存中

异常

1.异常分类

Error:错误

Exception:异常

  1. 运行时异常

  1. 编译时异常

2.异常的处理方式

  1. 抛出异常:throw

  1. 声明异常:throws

  1. 捕获异常:try-catch-finally

3.throw和throws的区别

  1. throw用在方法内部,只能用于抛出一种异常;throws用在方法声明上,可以抛出多个异常;

  1. throws表示可能出现异常;throw则一定会抛出某种异常对象

4.Error和Exception的区别

Error:错误,编译器不进行检测,也不进行捕捉,一旦发生,程序通常终结

Exception:异常,可以在程序中进行捕捉并处理,处理成功后,正常运行

5.运行时异常和一般异常的区别是什么

运行时异常:运行期间出现的异常

一般异常:除了运行时异常之外的所有异常

区别:

如果强制要求必须处理,使用一般异常,否则使用运行时异常

6.try-catch-finally可以省略哪一部分

catch可以省略

因为try处理运行时异常,try+catch处理运行时异常+普通异常,所以当处理运行时异常,catch可以省略

7.常见的运行时异常有哪些?

  1. 类转换异常

  1. 数组越界

  1. 空指针

  1. 数据存储异常


http://www.ppmy.cn/news/33005.html

相关文章

基于Spring Boot的酒店管理系统

文章目录 项目介绍主要功能截图:登录首页房间类型酒店预约部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring Boot的酒店管理系统…

C语言变量和数据类型的使用

文章目录前言一、将变量输出打印到控制台1.整形变量的输出2.浮点型变量的输出1.flaot的输出2.doble的输出3.float和double输出的区别4.%f,%10.2f......二、数据类型的大小总结前言 上一篇文章我们学习了C语言变量和数据类型的基本概念那么今天我们就具体的来看看如何在代码中使…

插件化架构设计(2):插件化从设计到实践该考量的问题汇总

根据《插件式可扩展架构设计心得》精读扩展版 怎么实现插件化模式 插件模式本质是一种设计思想,并没有一个一成不变或者是万金油的实现。但我们经过长期的代码实践,其实已经可以总结出一套方法论来指导插件体系的实现,并且其中的一些实现细…

Transformer在计算机视觉中的应用-VIT、TNT模型

上期介绍了Transformer的结构、特点和作用等方面的知识,回头看下来这一模型并不难,依旧是传统机器翻译模型中常见的seq2seq网络,里面加入了注意力机制,QKV矩阵的运算使得计算并行。 当然,最大的重点不是矩阵运算&…

汽车4S店业务管理软件

一、产品简介  它主要提供给汽车4S商店,用于管理各种业务,如汽车销售、售后服务、配件、精品和保险。整个系统以客户为中心,以财务为基础,覆盖4S商店的每一个业务环节,不仅可以提高服务效率和客户满意度,…

【ChatGPT】论文阅读神器 SciSpace 注册与测试

【ChatGPT】论文阅读神器 SciSpace 注册与测试1. 【SciSpace】网址与用户注册1.1 官网地址:[【SciSpace官网】https://typeset.io](https://typeset.io)1.2 官网注册2. 【SciSpace】实战解说2.1 导入论文2.2 论文分析2.3 中文分析2.4 论文分析进阶2.5 公式表格分析3…

音视频开发_获取媒体文件的详细信息

一、前言 做音视频开发过程中,经常需要获取媒体文件的详细信息。 比如:获取视频文件的总时间、帧率、尺寸、码率等等信息。 获取音频文件的的总时间、帧率、码率,声道等信息。 这篇文章贴出2个我封装好的函数,直接调用就能获取媒体信息返回,copy过去就能使用,非常方便。…

测试日常讨论

简介:作为测试人员,日常经常就测试过程和测试经验进行讨论,以下是我和朋友日常聊天时的技术讨论记录,希望能对测试人员更好的理解测试和对日常测试工作有所帮助。 讨论内容江云:测试还有哪些方面需要复习的么&#xf…