【JavaSE】面试01

文章目录

    • 1. JDK、JRE、JVM之间的关系
    • 2. 补充
    • 3. 面试题:重载和重写的区别?
    • 4. super和this
    • 5. (重点!!)若父类和子类均有静态代码块、实例代码块以及无参构造方法,则继承关系上的执行顺序:
    • 6. 静态绑定和动态绑定
    • 7. 抽象类了解
    • 8. 接口了解
    • 7. 抽象类和接口的区别(重点!)
    • 8. Object类有12个成员方法,分别是
    • 9. 为什么String要设计成不可变的?(不可变对象的好处?)
    • 10. String、StringBuffer、StringBuilder的区别
    • 11. 异常体系


努力经营当下 直至未来明朗!

1. JDK、JRE、JVM之间的关系

0
1

2. 补充

1) 前置和后置++的使用,后置++只有在表达式结束之后才对本身进行++
2)& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算;但与 && || 相比, 它们不支持短路求值
3)三目运算符:表达式1 ? 表达式2 : 表达式3;
表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换(注意最后的输出结果)
4)不能做switch的参数的类型: long float double boolean
补:字符串以及枚举(1.5之后版本才有)都可以、byte 、char、short、int可以作为参数
5)2的k次方二进制只有一个1,so:n=n & (n-1) ==0
6)方法签名:经过编译器编译修改过之后方法最终的名字。
具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
7)找出仅出现一次的数字并打印输出(按位异或):0^n=n. n^n=0
8)java中局部变量必须初始化,否则会报错!!
9)二维数组打印:Arrays.deepToString(数组名);
10) ①先执行静态代码块【加载了类就会被执行】
② 如果有多个静态的,那么看定义顺序(会存在覆盖)
③ 如果没有实例化对象,那么只会执行静态的(注:静态的只会执行一次)
⑤ 实例的数据【有多个实例对象,要看定义的顺序】
⑥ 构造方法的执行(即:静态块、实例块、构造方法)
11)局部变量在使用时需要进行初始化
12)static与super不共存–super依赖父类对象
13)String 字符串类, 就是用 final 修饰的, 不能被继承
14)重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参类型都不能改变
15)向上转型:子类对象可以直接赋值给父类对象,此时只能引用父类里面的方法和属性,子类自己的不可以调用。

3. 面试题:重载和重写的区别?

  1. 重写规则】
    1)子类在重写父类的方法时,一般必须与父类方法原型一致:修饰符 返回值类型 方法名(参数列表) 要完全一致
    2)被重写的方法返回值类型可以不同,但是必须是具有父子关系的(父子类关系!!)
    3)子类访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected
    4)父类被static、private、final修饰的方法、构造方法都不能被重写。
    5)重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写

  2. 重写和重载的区别
    2
    即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

  3. 小结:
    补充【方法重写】:方法返回值、方法名、参数列表(顺序、个数、类型)一致、static的方法不能重写、private修饰的方法不能重写、final修饰的方法不能重写、构造方法不能重写、子类的访问修饰符需要大于等于父类的访问修饰符
    (注意:重写返回值类型可以不同:子类的返回值和父类的返回值是父子类关系也可以 【协变类型】

4. super和this

  1. 【相同点】
    1)都是Java中的关键字
    2)只能在类的非静态方法中使用,用来访问非静态成员方法和字段
    3)在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
  2. 【不同点】
    1)this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
    2)在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
    3) this是非静态成员方法的一个隐藏参数,super不是隐藏的参数
    4) 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
    5)构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有

5. (重点!!)若父类和子类均有静态代码块、实例代码块以及无参构造方法,则继承关系上的执行顺序:

1、父类、子类静态代码块
(即:父类静态代码块优先于子类静态代码块执行,且是最早执行)
2、父类实例代码块和构造方法
3、子类实例代码块和构造方法
若再new实例化一次对象,则静态代码块不会执行,因为静态代码块只执行一次

6. 静态绑定和动态绑定

【静态绑定】:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用哪个方法。典型代表:方法重载。
【动态绑定】:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。

7. 抽象类了解

  1. 抽象类中不一定含有抽象方法,但是抽象方法属于抽象类。
  2. 注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。
  3. 抽象方法没有具体的实现体
  4. 抽象方法不能是private的
    注意:抽象方法没有加访问限定符时,默认是public.
  5. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
  6. 抽象方法不能被private、static、final等修饰,不能实例化对象
  7. 抽象类可以有构造方法

8. 接口了解

  1. 类重写父类方法时,修饰符一定要大于等于父类的(注意:接口总默认省略的是public,则子类重写时一定要加public修饰,否则编译报错)
  2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
  3. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
    (注:必须赋初值;且后续不能被修改,具有final属性)
  4. 接口中不能有静态代码块和构造方法
  5. 深拷贝与浅拷贝
    浅拷贝Cloneable:改变原来的对象,拷贝好的对象也会被影响–即:地址不改变
    深拷贝:两者互不干涉-地址并不相同–类与对象均拷贝

7. 抽象类和接口的区别(重点!)

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。

  1. 共同点:都不能实例化
  2. 异:
    1)抽象类可以包含非抽象方法,而接口只能包含抽象方法。
    2)类只能继承一个抽象类,但可以实现多个接口。
    3)抽象类可以有构造方法,而接口不能有构造方法。
    4)抽象类可以有成员变量,而接口只能有常量。
    5)抽象类的方法可以有public、protected和default访问修饰符,而接口的方法只能有public访问修饰符。
    6)抽象类的子类必须实现所有抽象方法,而实现接口的类必须实现所有接口中的方法。
    7)抽象类可以有普通方法,而接口不能有普通方法。
  3. 区别图
    7
  4. 注:抽象方法均没有方法体!也没有花括号!
  5. 接口当中可以有静态成员方法,但是不管静态成员方法还是default方法,都是public修饰的(没有abstract)
  6. 接口中不能有静态、实例代码块、构造方法,抽象类可以有构造方法、静态块和实例块。

8. Object类有12个成员方法,分别是

clone():Object、equals(Object):boolean、finalize():void、getClass()、hashCode():int、notify():void、notifyAll():void、toString():String、wait():void、wait(long):void、wait(long,int):void

9. 为什么String要设计成不可变的?(不可变对象的好处?)

1)方便实现字符串对象池。如果 String 可变, 那么对象池就需要考虑写时拷贝的问题了。
2)不可变对象是线程安全的。
3)不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中。

10. String、StringBuffer、StringBuilder的区别

1)String的内容不可修改,StringBuffer与StringBuilder的内容可以修改. (内容可修改性
2)StringBuffer与StringBuilder大部分功能是相似的 (功能
3)StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作 (处理与线程安全

11. 异常体系

1)Throwable:是异常体系的顶层类,其派生出两个重要的子类: Error 和 Exception
2) Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。
3) Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。我们平时所说的异常就是Exception。
11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3588平台产测之ArmSoM-W3 DDR压力测试

1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境: …

Hadoop生态之hive

一 概述与特点 之所以把Hive放在Hadoop生态里面去写,是因为它本身依赖Hadoop。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能。 其本质是将 SQL 转换为 MapReduce/Spark 的任务进行运算,底层由 HDFS 来提供…

JavaExcel:自动生成数据表并插入数据

故事背景 出于好奇,当下扫描excel读取数据进数据库 or 导出数据库数据组成excel的功能层出不穷,代码也是前篇一律,poi或者easy excel两种SDK的二次利用带来了各种封装方法。 那么为何不能直接扫描excel后根据列的属性名与行数据的属性建立S…

基于JAVA SSM框架和JSP的超市小卖部管理系统设计

摘要 随着时代的发展,传统的超市购物方式已经不能满足人们的需求,对于顾客来说,排队购物和支付购物费用的问题亟待解决。对于实体超市来说,他们面临着网上购物的竞争压力,作为超市经理,他们要降低成本&…

如何自启动MySQL服务与解决MySQL字符集问题

1、自启动mysql服务 (1)查看mysql是否自启动(默认自启动) systemctl list-unit-files|grep mysqld.service (2)如不是enabled可以运行如下命令设置自启动 systemctl enable mysqld.sercice2、字符集…

SpringBoot 博客网站

SpringBoot 博客网站 系统功能 登录注册 博客列表展示 搜索 分类 个人中心 文章分类管理 我的文章管理 发布文章 开发环境和技术 开发语言:Java 使用框架: SpringBoot jpa H2 Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring框架的一…

Unity——脚本与导航系统

Unity内置了一个比较完善的导航系统,一般称为Nav Mesh(导航网格),用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成: Nav Mesh。Nav Mesh与具体的场景关联&…

终端登录github两种方式

第一种方式 添加token,Setting->Developer Setting 第二种方式SSH 用下面命令查看远程仓库格式 git remote -v 用下面命令更改远程仓库格式 git remote set-url origin gitgithub.com:用户名/仓库名.git 然后用下面命令生成新的SSH秘钥 ssh-keygen -t ed2…

请大家一定不要像我们公司这样打印log日志

前言 最近接手了公司另一个项目,熟悉业务和代码苦不堪言。 我接手一个新项目,有个习惯,就是看结构,看数据库,搜代码。 其中搜代码是我个人这些年不知不觉形成的癖好,我下面给大家展示下这个小癖好。 正文 我…

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…

linux安装postgresql13

linux安装postgresql13 1. 安装2. 数据库初始化3.配置远程访问3.1 修改配置文件3.2 重启服务3.3 测试连接 1. 安装 linux下载链接&#xff1a;https://www.postgresql.org/download/linux/ubuntu/安装命令sudo sh -c echo "deb https://apt.postgresql.org/pub/repos/apt…

20230908_python练习_服务端与客户端数据交互

用户可以通过简单操作进行服务端数据交互&#xff0c;通过简单的sql语句直接获取EXCEL表&#xff0c;可以用来作为交互的基础。主要涉及三部分&#xff1a; 1:数据库存储表结构 --日志记录表结构 create table shzc.yytowz_service_title (leixing varchar2(18),ziduan1 v…

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…

单目标应用:基于成长优化算法(Growth Optimizer,GO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网是由分布式电源、储能装置和能量转换装置等组成的小型发配电系统&#xff0c;具有成本低、电压低、污染小等特点。由于环保和能源压力&#xff0c;清洁可再生能源和分布式能源工业发展潜力巨大。微电网控制器可实现对电网的集中控制&#xff0…

搭建RabbitMQ消息服务,整合SpringBoot实现收发消息

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;蓝桥云课认证讲师。 目录 一、前言1.1 什么是消息队列1.2 RabbitMQ 是什么1.…

Linux:【Mysql】Centos7安装mysql8.0

目录 一、环境及版本介绍 二、安装前准备 三、开始安装 一、环境及版本介绍 Linux环境&#xff1a;Centos7 Mysql版本&#xff1a;8.0.26 安装时使用的用户&#xff1a;root 二、安装前准备 1.1、下载Centos7镜像 网上寻找相关资源即可 1.2、下载VMwareWorkstation Pro并…

【LeetCode-中等题】208. 实现 Trie (前缀树)

文章目录 题目方法一&#xff1a;利用数组构建26叉树方法二&#xff1a;利用哈希表构建26叉树 题目 方法一&#xff1a;利用数组构建26叉树 插入图示&#xff1a; 全搜索和前缀搜索&#xff1a; 注意&#xff1a;全局匹配匹配完直接返回插入时的标志位 而前缀匹配时&#xff…

OpenWrt系统开发笔记

openWrt英文官网&#xff1a; https://openwrt.org/ 中文官网&#xff1a; http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为&#xff1a;https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…

Redis 管道

1. 面试题 1.1 如何优化频繁命令往返造成的性能瓶颈? 1.2 问题由来 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket返…

Redis 复制(replica)

1. 是什么 1.1 官网地址 https://redis.io/docs/management/replication/ 1.2 一句话 1. 就是主从复制&#xff0c;master以写为主&#xff0c;slave以读为主 2. 当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库 2. 能干嘛 1. 读写分离 2. 容灾…