java基础面试题(一)

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.mfbz.cn/a/1252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日反刍】——指针运算

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日反刍 💌其他专栏: 🔴 每日一题 🟢 读书笔记 🟡 C语言跬步积累 🌈座右铭:广积粮,缓称…

【Java进阶篇】—— File类与IO流

一、File类的使用 1.1 概述 File 类以及本章中的各种流都定义在 java.io 包下 一个File对象代表硬盘或网络中可能存在的一个文件或文件夹(文件目录) File 能新建、删除、重命名 文件和目录,但 File不能访问文件内容本身。如果我们想要访问…

【LeetCode】二叉树基础练习 5 道题

第一题:单值二叉树 题目介绍: 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回true;否则返回false。 //题目框架 bool isUnivalTree(struct TreeNode* root){ }…

【24】Verilog进阶 - 序列检测2

VL35 状态机-非重叠的序列检测 1 思路 状态机嘛,也是比较熟悉的朋友啦, 我就火速写出了STG。如下黑色所示: 2 初版代码 `timescale 1ns/1nsmodule sequence_test1(input wire clk ,input wire rst ,input wire data ,output reg flag ); //*************code**********…

系统架构:经典三层架构

引言 经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和DDD领域驱动模型。阿里的 四层架构模型在三层基础上增加了 Manager 层,从而形成变种四层模型;DDD架构则在顶层用户…

Canvas百战成神-圆(1)

Canvas百战成神-圆 初始化容器 <canvas id"canvas"></canvas>canvas{border: 1px solid black; }让页面占满屏幕 *{margin: 0;padding: 0; } html,body{width: 100%;height: 100%;overflow: hidden; } ::-webkit-scrollbar{display: none; }初始化画笔…

JavaEE--Thread 类的基本用法(不看你会后悔的嘿嘿)

Thread类是JVM用来管理线程的一个类,换句话说,每个线程都唯一对应着一个Thread对象. 因此,认识和掌握Thread类弥足重要. 本文将从 线程创建线程中断线程等待线程休眠获取线程实例 等方面来进行具体说明. 1)线程创建 方法1:通过创建Thread类的子类并重写run () 方法 class M…

UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

Windows环境下实现设计模式——状态模式(JAVA版)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows环境下如何编程实现状态模式&#xff08;设计模式&#xff09;。不知道大家有没有这样的感觉&#xff0c;看了一大堆编程和设计模式的书&#xff0c;却还是很难理解设计模式&#xff0c;无…

【完整代码】用HTML/CSS制作一个美观的个人简介网页

【完整代码】用HTML/CSS制作一个美观的个人简介网页整体结构完整代码用HTML/CSS制作一个美观的个人简介网页——学习周记1HELLO&#xff01;大家好&#xff0c;由于《用HTML/CSS制作一个美观的个人简介网页》这篇笔记有幸被很多伙伴关注&#xff0c;于是特意去找了之前写的完整…

【高阶数据结构】红黑树

文章目录1. 使用场景2. 性质3. 结点定义4. 结点旋转5. 结点插入1. 使用场景 Linux进程调度CFSNginx Timer事件管理Epoll事件块的管理 2. 性质 每一个节点是红色或者黑色根节点一定是黑色每个叶子节点是黑色如果一个节点是红色&#xff0c;那么它的两个儿子节点都是黑色从任意…

【基础算法】单链表的OJ练习(6) # 复制带随机指针的链表 #

文章目录&#x1f347;前言&#x1f34e;复制带随机指针的链表&#x1f351;写在最后&#x1f347;前言 本章的链表OJ练习&#xff0c;是最后的也是最难的。对于本题&#xff0c;我们不仅要学会解题的思路&#xff0c;还要能够通过这个思路正确的写出代码&#xff0c;也就是思路…

20230314整理

1.JVM内存区域 程序计数器&#xff1a;字节码解释器通过改变程序计数器来依次读取指令&#xff0c;在多线程的情况下&#xff0c;程序计数器用于记录当前线程执行的位置&#xff0c;从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。它的生命周期随着线程的创建而创…

基于Java+SpringBoot+vue的学生成绩管理系统设计和实现【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例&#xff08;200套&#xff09; 目录 一、效果演示 二、…

扯什么 try-catch 性能问题?

“yes&#xff0c;你看着这鬼代码&#xff0c;竟然在 for 循环里面搞了个 try-catch&#xff0c;不知道try-catch有性能损耗吗&#xff1f;”老陈煞有其事地指着屏幕里的代码&#xff1a; for (int i 0; i < 5000; i) {try {dosth} catch (Exception e) {e.printStackTrace…

如何测试一个AI系统?

最近AI大火&#xff0c;chatgpt、GPT-4、文心一言不断的在轰炸着我们的生活、工作&#xff0c;很多时候我们都在感叹这智能化来的太快了。对于一个测试工程师&#xff0c;如何开始测试一个AI系统呢&#xff0c;今天我们就一起来聊聊相关的内容。 智能系统对测试工程师提出的新问…

2023年网络安全比赛--网络安全事件响应中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.找出黑客植入到系统中的二进制木马程序,并将木马程序的名称作为Flag值(若存在多个提交时使用英文逗号隔开,例如bin,sbin,…)提交; 2.找出被黑客修改的系统默认指令,并将被修改的指令里最后一个单词作为Flag值提交; 3.找出…

React 用一个简单案例体验一遍 React-dom React-router React-redux 全家桶

一、准备工作 本文略长&#xff0c;建议耐心读完&#xff0c;每一节的内容与上一节的内容存在关联&#xff0c;最好跟着案例过一遍&#xff0c;加深记忆。 1.1 创建项目 第一步&#xff0c;执行下面的命令来创建一个 React 项目。 npx create-react-app react-example cd rea…

Springboot集成Swagger

一、Swagger简介注意点&#xff01; 在正式发布的时候要关闭swagger&#xff08;出于安全考虑&#xff0c;而且节省内存空间&#xff09;之前开发的时候&#xff0c;前端只用管理静态页面&#xff0c; http请求到后端&#xff0c; 模板引擎JSP&#xff0c;故后端是主力如今是前…

【宝塔面板部署nodeJs项目】网易云nodeJs部署在云服务器上,保姆级教程,写网易云接口用自己的接口不受制于人

看了很多部署的&#xff0c;要么少步骤&#xff0c;要么就是写的太简洁&#xff0c;对新手不友好 文章目录前言一、下载网易云nodejs项目1. git clone下载&#xff0c;两种方式2. 运行项目二、使用步骤1. 先在本地运行2.测试接口三、部署服务器1. 在宝塔面板安装pm2管理器2. 压…
最新文章