Java基础常见知识点面试总结

文章目录

  • 1. 变量、数据类型转换、运算符
    • 1.1 变量
    • 1.2 数据类型转换
      • 1.2.1强转的注意事项
    • 1.3 进制的转换
    • 1.4 位运算符
    • 1.5 运算符
    • 1.6 三元运算符
  • 2. 流程控制
    • 2.1 键盘录入_Scanner
    • 2.2 Random随机数
    • 2.3 switch(选择语句)
    • 2.4 分支语句
    • 2.5 循环语句
  • 3. 数组
    • 3.1 数组的定义
    • 3.2 数组操作
    • 3.3 一维数组内存图
    • 3.4 二维数组
    • 3.5 二维数组内存图
    • 3.6 方法的重载
  • 4. 类与对象
    • 4.1 一个对象的内存图
    • 4.2 俩个对象的内存图
    • 4.3 两个对象指向同一片空间内存图
  • 5. 封装
    • 5.1 private关键字
    • 5.2 this关键字
    • 5.3 static关键字
  • 6. 继承
    • 6.1 方法的重写
    • 6.2 继承构造方法
    • 6.3 super关键字
    • 6.4 this关键字
    • 6.5 继承的特点
  • 7. 抽象
    • 7.1 抽象介绍
    • 7.2 抽象的注意事项
  • 8. 接口
    • 8.1 接口的定义与使用
    • 8.2 接口中的静态方法
    • 8.3 接口中的成员变量
    • 8.4 final关键字
    • 8.5 接口的特点
  • 9. 多态
    • 9.1 多态的介绍
    • 9.2 成员变量和成员方法的调用
    • 9.3 多态中的转型
  • 10.权限修饰符
  • 11. 代码块
    • 11.1 常规格式
    • 11.2 静态代码块
  • 12. 内部类
    • 12.1 静态成员内部类
    • 12.2 匿名内部类
  • 面试
    • 1. 形式参数和实际参数区别
    • 2. 成员变量和局部变量的区别
    • 3. 面向对象三大特征?
    • 4. 接口与抽象类的区别
    • 5. 多态方式与原始new对象的区别
  • 工具的使用
    • 1. IDEA的创建流程

1. 变量、数据类型转换、运算符

1.1 变量

  1. 变量的数据类型:
    基本数据类型:4类8种
    整型:byte short int long
    浮点型:float double
    字符型:char
    布尔型:boolean

    引用数据类型: 类 数组 接口 枚举 注解

  2. 定义:
    a.数据类型 变量名 = 值;

    b.数据类型 变量名;
    变量名 = 值;

    c.连续定义三个相同类型的变量
    数据类型 变量名1,变量名2,变量名3;
    变量名1 = 值;
    变量名2 = 值;
    变量名3 = 值;

  3. 【注】
    字符串不属于基本数据类型,属于引用数据类型,用String表示

    String是一个类,只不过字符串在定义的时候可以和基本数据类型格式一样

  4. float和double的区别
    a. float的小数位只有23位二进制,能表示的最大十进制为2的23次方(8388608),是7位数,所以float型代表的小数,小数位能表示7位

    b.double的小数位只有52位二进制,能表示的最大十进制为(4 503 599 627 370 496),是16位数,所以double型代表的小数,小数位能表示出16位

    小数的默认类型为:double

  5. 变量使用时的注意事项
    1.变量不初始化(第一次赋值)不能直接使用

    2.在同一个作用域(一对大括号就是一个作用域)中不能定义重名的变量

    3.不同作用域中的数据尽量不要随意互相访问
    在小作用域中能直接访问大作用域中的变量
    在大作用域中不能直接访问小作用域中的变量

1.2 数据类型转换

a.自动类型转换
将取值范围小的数据类型赋值给取值范围大的数据类型 -> 小自动转大
取值范围小的数据类型和取值范围大的数据类型数据做运算 -> 小自动转大

b.强制类型转换
当将取值范围大的数据类型赋值给取值范围小的数据类型 -> 需要强转

1.2.1强转的注意事项

  1. 不要随意写成强转的格式,因为会有精度损失问题以及数据溢出现象,除非没有办法

  2. byte,short定义的时候如果等号右边是整数常量,如果不超出byte和short的范围,不需要我们自己强转,jvm自动转型

    byte,short如果等号右边有变量参与,byte和short自动提升为int,然后结果再次赋值给byte或者short的变量,需要我们自己手动强转

  3. char类型数据如果参与运算,会自动提升为int型,如果char类型的字符提升为int型会去ASCII码表(美国标准交换代码)范围内去查询字符对应的int值,如果在ASCII码表范围内没有对应的int值,回去unicode码表(万国码)中找

1.3 进制的转换

  1. 十进制转成二进制
    辗转相除法 -> 循环除以2,取余数
    在这里插入图片描述
  2. 二进制转成十进制
    8421规则
    在这里插入图片描述
  3. 二进制转成八进制
    将二进制数分开 (3位为一组)
    在这里插入图片描述
  4. 二进制转成十六进制
    将二进制数分组-> 4位为一组
    在这里插入图片描述

1.4 位运算符

在这里插入图片描述

  1. 符号的介绍:
    a. &(与) -> 有假则假
    b. |(或) -> 有真则真
    c. ~(非) -> 取反
    d. ^(异或) -> 符号前后结果一样为false,不一样为true
    true ^ true -> false
    false ^ false -> false
    true ^ false -> true
    false ^ true -> true

1.5 运算符

  1. 算数运算符
    在这里插入图片描述
    【注】+
    1.运算
    2.字符串拼接:任何类型的数据遇到字符串都会变成字符串,此时+就不再是运算了,而是字符串拼接,将内容直接往后拼接
public class Demo02Arithmetic {public static void main(String[] args) {int i = 10;int j = 3;System.out.println(i+j+"");//13System.out.println(i+j+""+1);//131System.out.println(i+""+j);//103System.out.println("i和j相加只和为:"+(i+j));}
}

1.6 三元运算符

在这里插入图片描述

2. 流程控制

2.1 键盘录入_Scanner

  1. 概述:是java定义好的一个类

  2. 作用:将数据通过键盘录入的形式放到代码中参与运行

  3. 位置:java.util

  4. 使用:
    a.导包:通过导包找到要使用的类 -> 导包位置:类上
    import java.util.Scanner -> 导入的是哪个包下的哪个类

    b.创建对象
    Scanner 变量名 = new Scanner(System.in);

    c.调用方法,实现键盘录入
    变量名.nextInt() 输入整数int型的
    变量名.next() 输入字符串 String型的

变量名.next():录入字符串 -> 遇到空格和回车就结束录入了
变量名.nextLine():录入字符串 -> 遇到回车就结束录入了

2.2 Random随机数

  1. 使用:
    a.导包:import java.util.Random

    b.创建对象:
    Random 变量名 = new Random()

    c.调用方法,生成随机数:
    变量名.nextInt() -> 在int的取值范围内随机一个整数
    在这里插入图片描述

2.3 switch(选择语句)

  1. switch基本使用
    在这里插入图片描述
    在这里插入图片描述

2.4 分支语句

  1. if的第一种格式
    在这里插入图片描述
  2. if的第二种格式
    在这里插入图片描述
  3. if的第三种格式
    在这里插入图片描述

2.5 循环语句

  1. for循环
    在这里插入图片描述
  2. while循环
    在这里插入图片描述
  3. 循环控制关键字
    在这里插入图片描述

3. 数组

3.1 数组的定义

在这里插入图片描述

  1. 动态初始化与静态初始化的区别
    a. 动态初始化:定义的时候只指定了长度,没有存具体的数据
    当只知道长度,但不知道具体存啥数据时可以使用动态初始化

    b. 静态初始化:定义的时候就直接知道存啥了

         //动态初始化int[] arr1 = new int[3];String[] arr2 = new String[3];//简化静态初始化int[] arr4 = {1,2,3,4,5};
    

3.2 数组操作

  1. 获取数组的长度
    在这里插入图片描述

3.3 一维数组内存图

在这里插入图片描述

  1. 一个数组内存图
    在这里插入图片描述
  2. 俩个数组内存图
    在这里插入图片描述
  3. 两个数组指向同一片内存空间
    在这里插入图片描述

3.4 二维数组

  1. 定义格式
  • 动态初始化
    数据类型[][] 数组名 = new 数据类型[m][n]
  • 简化静态初始化:
    数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}}

3.5 二维数组内存图

在这里插入图片描述

3.6 方法的重载

在这里插入图片描述

4. 类与对象

4.1 一个对象的内存图

在这里插入图片描述

4.2 俩个对象的内存图

在这里插入图片描述

4.3 两个对象指向同一片空间内存图

在这里插入图片描述

5. 封装

5.1 private关键字

被private修饰的成员只能在本类中使用,在别的类中使用不了

属性被私有化了,外界直接调用不了了,那么此时属性就不能直接赋值取值了,所以需要提供公共的接口
get/set方法:

  • set方法:为属性赋值
  • get方法:获取属性值

5.2 this关键字

在这里插入图片描述

5.3 static关键字

在这里插入图片描述

6. 继承

在这里插入图片描述

6.1 方法的重写

在这里插入图片描述
注意事项:
在这里插入图片描述

6.2 继承构造方法

子类对象会先执行父类中的构造方法,在执行子类中的构造方法
在这里插入图片描述

6.3 super关键字

在这里插入图片描述

6.4 this关键字

在这里插入图片描述

6.5 继承的特点

在这里插入图片描述

7. 抽象

7.1 抽象介绍

在这里插入图片描述

7.2 抽象的注意事项

  1. 抽象类不能直接new对象,只能创建非抽象子类的对象
  2. 抽象类中不一定非得有抽象方法,但是抽象方法所在的类一定抽象类
  3. 抽象类的子类,必须重写父类中的所有抽象方法,否则,编译报错,除非该子类也是抽象类
  4. 抽象类中可以有成员变量,构造,成员方法
  5. 抽象类中可以有构造方法,是供子类创建对象时,初始化父类属性使用的

8. 接口

8.1 接口的定义与使用

在这里插入图片描述

在这里插入图片描述

8.2 接口中的静态方法

在这里插入图片描述
接口名可以直接调用

8.3 接口中的成员变量

在这里插入图片描述
接口名直接调用

8.4 final关键字

final代表最终的,被它修饰的变量,不能二次赋值,可以视为常量
【注】

  • 被final修饰的类不能被继承
  • 被final修饰的方法,不能被重写
  • 被final修饰的变量不能二次赋值,需手动赋值
  • 被final修饰的对象,地址值不能改变,但是对象中的属性值可以改变

8.5 接口的特点

在这里插入图片描述
【注】

  • 当一个类实现多个接口时,如果接口中的抽象方法有重名且参数一样的,只需要重写一次
  • 当一个类实现多个接口时,如果多个接口中默认方法有重名的,且参数一样的,必须重写一次默认方法

9. 多态

9.1 多态的介绍

在这里插入图片描述

9.2 成员变量和成员方法的调用

  • 成员变量:先调用父类中的成员变量
  • 成员方法:先调用子类中重写的方法,如果子类中没有重写,则调用父类中的成员方法

9.3 多态中的转型

在这里插入图片描述

10.权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限
在这里插入图片描述
访问能力:
在这里插入图片描述

11. 代码块

11.1 常规格式

在这里插入图片描述

11.2 静态代码块

在这里插入图片描述

12. 内部类

内部类就是在一个类中定义一个类

12.1 静态成员内部类

在这里插入图片描述

12.2 匿名内部类

面试

1. 形式参数和实际参数区别

  1. 形式参数(形参):在定义方法的时候形式上定义的参数,此参数还没有值
  2. 实际参数(实参):在调用方法的时候给形参赋予的具体的值

2. 成员变量和局部变量的区别

在这里插入图片描述

3. 面向对象三大特征?

  1. 封装
  2. 继承
  3. 多态

4. 接口与抽象类的区别

在这里插入图片描述

5. 多态方式与原始new对象的区别

在这里插入图片描述

工具的使用

1. IDEA的创建流程

先创建project,在project下创建module,在module下创建package -> 必须记住

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

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

相关文章

乐趣Python——文件与数据:挥别乱糟糟的桌面

各位朋友们,今天我们要开启一场非凡的冒险——进入文件操作的世界!你知道吗,在你的电脑里,有一个叫做“文件系统”的迷宫,里面藏着各种各样的文件和文件夹,它们就像是迷宫中的宝藏。但有时候,这…

wpf下如何实现超低延迟的RTMP或RTSP播放

技术背景 我们在做Windows平台RTMP和RTSP播放模块对接的时候,有开发者需要在wpf下调用,如果要在wpf下使用,只需要参考C#的对接demo即可,唯一不同的是,视频流数据显示的话,要么通过控件模式,要么…

SpringMVC(一)【入门】

前言 学完了大数据基本组件,SpringMVC 也得了解了解,为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多,但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到,所以不废话学吧…

Mapmost Alpha:开启三维城市场景创作新纪元

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

2024年4月8日腾讯云故障复盘及情况说明

2024年4月8日15点23分,腾讯云团队收到告警信息,云API服务处于异常状态;随即在腾讯云工单、售后服务群以及微博等渠道开始大量出现腾讯云控制台登录不上的客户反馈。 经过故障定位发现,客户登录不上控制台正是由云API异常所导致。云…

面试必备:3个技巧提升表达能力,轻松拿Offer!

在职场竞争中,面试是求职者迈向成功的重要一步。想要在众多竞争者中脱颖而出,获得面试官的青睐并拿下心仪岗位的offer,良好的表达能力不可或缺。今天,我们就一起探讨如何在面试中有效提升自己的表达能力,为成功铺路。 …

C语言如何生成随机数以及设置随机数的范围

一、随机数的生成 1.rand()函数 C语言提供了⼀个函数叫 rand,这函数是可以生成随机数的,函数原型如下所示: int rand (void); rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依…

c语言中声明的问题【求个关注!】

文章目录 1 变量的声明与定义(1)定义与声明的区别:(2)为什么要区分定义与声明?(3)extern是什么 ?(4)举例: 2 函数的声明:函数声明的格…

使用Docker定时备份数据

文章目录 一、Docker镜像制作二、MySQL数据备份三、Minio数据备份四、数据跨服务器传输五、Nginx日志分割六、Docker启动七、Docker备份日志 一、Docker镜像制作 镜像制作目录 mc下载地址 - rsyncd.conf # https://download.samba.org/pub/rsync/rsyncd.conf.5port 873 uid …

Qt控件---布局管理类

文章目录 QVBoxLayout(垂直布局)QHBoxLayout(水平布局)QGridLayout(网格布局)拉伸 QFormLayout(表单布局)QSpacerItem(空白) QVBoxLayout(垂直布局…

Apache Doris 基于 Job Scheduler 实现秒级触发任务调度能力

作者|SelectDB 技术团队 在数据管理愈加精细化的需求背景下,定时调度在其中扮演着重要的角色。它通常被应用于以下场景: 定期数据更新,如周期性数据导入和 ETL 操作,减少人工干预,提高数据处理的效率和准…

【王道数据结构笔记】顺序表的静态分配代码分析

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

2024-04-08

作业要求: 1> 思维导图 2>使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否…

攻防世界05view_source

鼠标右键无法查看源代码,但是可以直接F12进行查看 但是没有办法复制,可以在地址前面加上view-source 这时候就可以复制了 知识点1:view-source协议-查看源码 view-source是一种协议,早期基本上每个浏览器都支持这个协议。后来Mi…

C语言基础(四)

C语言基础 一维数组数组初始化全部初始化部分初始化数组的默认值冒泡排序 字符数组 二维数组初始化行数是否可省略列数是否可以省略部分初始化 访问二维字符数组 函数分类库函数自定义函数调用自定义函数函数声明 一维数组 概念&#xff1a;一组数据类型相同的元素的集合 <…

无人机巡检技术革命性变革光伏电站运维管理

在中国广袤的大地上&#xff0c;光伏电站如雨后春笋般崛起&#xff0c;晶体硅组件板在阳光下熠熠生辉&#xff0c;为人们带来了源源不断的绿色能源。然而&#xff0c;随着光伏产业的迅猛发展&#xff0c;电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入&#xff0c;…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端)&#xff1a; 注意&#xff1a;unity的规则中类&#xff0c;名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

TypeScript 忽略红色波浪线

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

CNN-Transformer时间序列预测

部分代码&#xff1a; # CNN-Transformer class CNNTransformerEncoder(nn.Module):def __init__(self, input_features, transformer_encoder_heads,embedding_features, cnn_kernel_size, dim_feedforward_enc, n_encoder_layer):super(CNNTransformerEncoder, self).__init…

数模 初见数建

文章目录 初见数学建模1.1 数学建模是什么1.2 数学建模的概述1.3 如何学习数学建模---分模块化1.4 数学建模前提了解1.5 数学建模的六个步骤1.6 如何备战建模比赛1.7 数学建模赛题类型1.8 数学建模算法体系概述 初见数学建模 1.1 数学建模是什么 1.原型与模型 原型&#xff…