当前位置:网站首页 > Java基础 > 正文

java基础 菜鸟视屏教程



Java面试笔记

【前言】已经属于准备秋招的落后选手了,2022受大环境影响实习还挺难找的,本人也属于Java小白,读研之后才开始用Java做开发,本科期间一直在用python。文章中许多资料出自代码随想录、黑马程序员等处。

文章目录

  • Java面试笔记
  • 基础知识
  • JDK与JRE
  • 数据结构
  • ArrayList和LinkedList
  • Vector
  • HashMap
  • 方法
  • Collections工具类
  • String存储原理
  • ==和equals
  • 面向对象
  • 概念
  • 构造方法
  • 静态和实例
  • 初始化块
  • 关键字this
  • 修饰符
  • Java并发
  • Java线程
  • 虚拟机
  • 私有数据区
  • 程序计数器
  • Java虚拟机栈
  • 局部变量表
  • Java序列化

基础知识

JDK与JRE

  • JDK(Java Development Kit)是Java开发工具包,里面包含Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提供了JVM和Runtime辅助包,用于解析class文件使其运行)。如果你安装了JDK,那么你即可以开发Java程序,也同时拥有了运行java程序的平台。Jdk是整个java的核心,包括了jre(java运行环境)。
  • JRE(Java Runtime Enviroment)是JAVA的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。不能开发Java程序。jre是运行Java程序所必须环境的集合,包含Jvm标准实现及Java核心类库。

数据结构

ArrayList和LinkedList

ArrayList底层使用Object[] 数组实现,默认初始化容量10,每次扩容1.5倍,内存空间连续,适合查询操作

LinkedList底层是双向链表,适合插入删除的操作

Vector

底层是数组,初始化容量10,每次扩容为原始容量的2倍;

线程安全,方法带有关键字

HashMap
  • 1.7中底层:数组+链表 1.8中底层:数组+红黑树
  • 数组中每个元素是一个单向链表,单链表每个结点是node<Key, Value>类型
  • 该数据结构特点:无序,不可重复(重写了equals)
  • 默认初始化容量:16;数组容量达到3/4时,开始扩容
  • 单链表元素超过8个,链表转为红黑树;红黑树结点小于6,转为单链表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsvQCn5W-79)(C:Users11041AppDataRoamingTypora ypora-user-imagesimage-.png)]

为什么使用红黑树?为什么树化阈值是8?

方法

方法名和参数表共同构成方法签名,修饰符和返回值类型不属于方法签名。

引用传递与值传递

1.按值传递不会改变实际参数的数值,Java 中只有值传递。值传递的含义是将实参的值传递给形参,当参数类型是基本数据类型时,传递的是实参的值,当参数类型是对象时,传递的是对象的引用,但是不能让实参引用新的对象。

2.按引用传递可以改变实际参数的内容,但不能改变实际参数的参考地址(一般是对数组,对象,Map等非基本数据类型)

Collections工具类

Collections.sort(List list, *Compataor cmp)

如果要排序的是HashSet,利用ArrayList构造器转换为list

 

String存储原理

String类型不可变

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9FrpTGw-79)(C:Users11041AppDataRoamingTypora ypora-user-imagesimage-007636.png)]

  • String底层数组用final修饰,java基础 菜鸟视屏教程不可变
  • StringBuilder底层数组可变线程不安全,效率高
  • StringBuffer底层数组可变线程安全,效率低

【例题】String s = new String(“xyz”) 创建了几个字符串对象?

一个或两个。如果字符串常量池已经有“xyz”,则是一个;否则,两个。 当字符创常量池没有 “xyz”,此时会创建如下两个对象:

  • 一个是字符串字面量 “xyz” 所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,此时该实例也是在堆中,字符串常量池只放引用。
  • 另一个是通过 new String() 创建并初始化的,内容与"xyz"相同的实例,也是在堆中。
==和equals

==:用于比较基础类型变量和引用类型变量

  • 对于基础类型变量,比较的变量保存的值是否相同,类型不一定要相同
  • 对于引用类型变量(通过new创建),比较的是两个对象的地址是否相同

equals:Object 类中定义的方法,通常用于比较两个对象的值是否相等

面向对象

概念

  1. 面向对象和面向过程的区别有哪些?分别有什么优缺点?

面向过程将问题分解成步骤,按照步骤实现函数,并依次调用,数据和对数据的操作是分离的。面向对象将问题分解成对象,描述事物的行为,对象与属性和行为是关联的。

面向过程的优点是性能高,缺点是不容易维护、复用和扩展。面向对象的优点是具有封装、继承、多态的特性,因而容易维护、复用和扩展,缺点是性能低。

  1. 对象和类之间有哪些联系?

对象是具体的实例,有自己独有的状态和行为。类是对具有相同特征的对象的抽象,用来定义对象的状态和行为。可以从一个类创建多个对象。

构造方法

构造方法没有返回值,用于初始化

静态和实例

从外部调用静态的类成员时,可以通过类名调用,也可以通过对象名调用。从外部调用实例的类成员,则只能通过对象名调用。

静态方法只能访问静态的类成员,不能访问实例的类成员。实例方法既可以访问实例的类成员,也可以访问静态的类成员。

初始化块

分类

初始化块可以分成静态初始化块和非静态初始化块,前者在加载类时被隐式调用,后者在创建对象时被隐式调用。

执行顺序(在main函数前)

更一般的情况,对于多个类之间的继承关系(可能超过两个类,例如 B 继承了 A,C 继承了 B),执行顺序如下。

  1. 按照从父类到子类的顺序,依次执行每个类的静态初始化块。
  2. 按照从父类到子类的顺序,对于每个类,依次执行非静态初始化块和构造器,然后执行子类的非静态初始化块和构造器,直到所有类执行完毕。

示例代码

 

关键字this

 

this不可以在静态方法中使用

修饰符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JlR0Vbk4-80)(C:Users11041AppDataRoamingTypora ypora-user-imagesimage-.png)]

Java并发

Java线程

线程的六种状态:

菜鸟 java在线运行 菜鸟工具java_Java

虚拟机

菜鸟 java在线运行 菜鸟工具java_Java_02

Java Source就是在IDE中敲的代码,经过javac编译后成为字节码,变为Java Class,可以跨平台

私有数据区

程序计数器
Java虚拟机栈

为创建的线程分配内存

局部变量表

Java序列化

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

  • 上一篇: 如何把java基础
  • 下一篇: java基础教程传值
  • 版权声明


    相关文章:

  • 如何把java基础2025-01-28 12:02:05
  • java基础教案2025-01-28 12:02:05
  • 如何0基础学习java2025-01-28 12:02:05
  • java基础老是忘记2025-01-28 12:02:05
  • java基础语法2622025-01-28 12:02:05
  • java基础教程传值2025-01-28 12:02:05
  • 英语java基础教程2025-01-28 12:02:05
  • java基础教程 图灵2025-01-28 12:02:05
  • java基础文字教程2025-01-28 12:02:05
  • java基础编写教程2025-01-28 12:02:05