终于有人把Java程序员都要学的知识点整理了,令人茅塞顿开

无论处于何种层级的 Java 从业者,JVM 皆为其在进阶之途上必然需要跨越的一道难关。不论是在日常的工作情境之中,还是在至关重要的面试环节里,JVM 均是不可或缺的必考之题。倘若对 JVM 缺乏深入的理解与认知,那么在薪酬待遇方面将会处于极为不利的境地(据相关数据表明,近乎 70%的面试者皆因对 JVM 的知识掌握不足而在面试中折戟)。

在此,详细且全面地阐述了 JVM 所涵盖的众多重要知识点,例如有关线程方面,线程作为 JVM 运行的基本执行单元,其调度和协作机制对于程序的性能和并发性有着至关重要的影响;内存模型方面,JVM 定义了严格的内存访问规则,以确保多线程环境下数据的一致性和正确性;

JVM 运行时内存方面,包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等各个部分,它们各自承担着不同的功能和作用;垃圾回收与算法方面,如标记-清除算法、复制算法、标记-压缩算法等,不同的算法在效率和空间利用率上存在差异;

Java 中四种引用类型方面,强引用、软引用、弱引用和虚引用,它们在对象的生命周期管理中发挥着独特的作用;

GC 分代收集算法 VS 分区收集算法方面,分代收集算法基于对象的生命周期将内存分为新生代和老年代进行不同策略的回收,而分区收集算法则将整个堆空间划分为多个大小相等的区域进行更灵活的管理;

GC 垃圾收集器方面,如 Serial 收集器、ParNew 收集器、Parallel Scavenge 收集器、CMS 收集器、G1 收集器等,每种收集器都有其适用的场景和特点;

JAVA IO/NIO 方面,传统的 IO 基于字节流和字符流操作,而 NIO 则引入了缓冲区和通道的概念,提供了更高的性能和非阻塞的操作方式;

JVM 类加载机制方面,包括加载、验证、准备、解析和初始化这五个阶段,每个阶段都有着严格的规范和流程。

基本概念:

JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。

文末有这份【Java核心知识点】领取方式噢!!

JVM目录

通常而言,在实际的编程情境之中,我们所编写的程序往往需要依据程序运行时的具体状况,方可明晰究竟需要创建多少数量的对象。

然而,在尚未进入程序运行的阶段,即在程序的开发进程里,我们着实难以确切知晓到底需要何等数量的对象,甚至对于这些对象的准确类型也无从把握。为了切实满足此类常见且普遍存在的编程需求,我们强烈期望能够在任意的时间节点、任意的地点创建数量不受限制的对象。

那么,这些数量不定、类型多样的对象应当借助何种数据结构来进行容纳呢?我们首先映入脑海的便是数组。诚然,数组确实能够存放数据,但其存在着显著的局限性,它仅仅能够容纳同一类型的数据,并且其长度一经确定便无法更改。面对这样的情况,应当如何解决呢?于是,集合这一强大的数据结构便应时而生!

从历史的角度来看,编程技术的发展始终伴随着对于数据存储和处理方式的不断探索与改进。在早期的编程实践中,数组曾是主要的数据存储方式,但随着程序复杂性的不断增加,其局限性逐渐凸显。而集合的出现,正是为了弥补数组的不足,以适应更为复杂和多样化的编程需求。

从社会应用的层面分析,在当今信息爆炸的时代,各种类型的软件和系统对于数据的处理要求愈发严苛。集合的灵活性和强大功能,使得它在诸如大数据处理、云计算、人工智能等众多前沿领域中发挥着不可或缺的作用。

从文化的视角审视,集合的概念体现了人类在解决问题时不断创新和突破的精神,是编程文化中追求高效、灵活和精准的一种具体体现。

  • 1、接口继承关系和实现
  • 2、List
  • 3、Set
  • 4、Map

Java集合框架图

详细知识点太多,文案过长可见《Java核心知识体系》在其中关于集合图有详细分解版从而对应每个知识点(见目录)

先来看看并发知识库体系图:

  1. Java线程实现/创建方式?
  2. 4种线程池 ?
  3. 线程生命周期(状态)
  4. 终止线程 4 种方式
  5. sleep与wait 区别?
  6. start与run的区别 ?
  7. Java后台线程
  8. Java锁
  9. 线程基本方法
  10. 线程上下文切换
  11. 同步锁与死锁
  12. 线程池原理
  13. Java阻塞队列原理
  14. CyclicBarrier、CountDownLatch、Semaphore的用法
  15. volatile关键字的作用(变量可见性、禁止重排序)
  16. 如何在两个线程之间共享数据?
  17. ThreadLocal 作用(线程本地存储)
  18. synchronized 和 ReentrantLock 的区别
  19. ConcurrentHashMap 并发
  20. Java 中用到的线程调度
  21. 进程调度算法
  22. 线程的概念及特性

详细知识点太多,文案过长可见《Java核心知识体系》在其中关于集合图有详细分解版从而对应每个知识点(见目录)

Spring 凭借其琳琅满目的显著优点,正被数量与日俱增的微服务实践工作者所广泛采用。熟练地掌握 Spring 这一技术框架,便能够在快速应用开发这一领域中崭露头角,成为引领潮流的领军人物。然而,仅仅知晓其表面呈现的现象是远远不够的,还必须深入探究其内在的本质和根源。正因如此,本篇内容将会从 Spring 源码以及核心实现原理的独特视角出发,为您提供有力的支持和引导,助力您全方位、深层次地理解 Spring 背后所蕴含的精妙运作机制。

从技术发展的历史脉络来看,随着软件架构的不断演进和应用场景的日益复杂,Spring 以其高度的灵活性、可扩展性和强大的功能,逐渐成为了众多开发者的首选。在过去,传统的开发框架可能存在着诸多局限性,而 Spring 的出现则打破了这些束缚,为开发者带来了全新的思路和方法。

从行业应用的角度分析,如今在众多的企业级项目中,Spring 都发挥着至关重要的作用。无论是构建高效稳定的 Web 应用,还是处理复杂的分布式事务,Spring 都提供了可靠的解决方案。熟练掌握 Spring ,不仅能够提升个人的技术实力,更能够为企业创造巨大的价值。

从技术学习的深度和广度考量,深入理解 Spring 的源码和核心实现原理,有助于开发者更好地把握技术的本质,从而在面对各种复杂的业务需求和技术挑战时,能够游刃有余地运用 Spring 进行创新和优化。

介绍目录

  1. Spring的特点
  2. Spring其核心组件
  3. Spring常用的模块
  4. Spring主要包
  5. Spring 常用注解
  6. Spring IOC原理
  7. Spring APO原理
  8. Spring MVC 原理
  9. Spring Boot 原理
  10. JPA 原理
  11. Mybatis 缓存
  12. Tomcat 架构

详细知识点太多,文案过长可见《Java核心知识体系》在其中关于集合图有详细分解版从而对应每个知识点(见目录)

微服务是如今互联网行业你不得不掌握的知识点,也是目前最火最流行的一个知识,咱们一起来看看吧!

  1. 服务注册发现
  2. API 网关
  3. 配置中心
  4. 服务追踪
  5. 服务熔断
  6. API管理

详细知识点太多,文案过长可见《Java核心知识点》在其中关于集合图有详细分解版从而对应每个知识点(见目录)

鉴于此文案篇幅过长,在此便不逐一进行详尽的介绍了。

核心知识总结的知识点除上述所提及的内容之外,还涵盖了诸多重要的领域,例如 Netty 与 RPC 方面,Netty 作为高性能的网络通信框架,在构建分布式系统中的作用举足轻重,而 RPC 则为远程过程调用提供了高效的解决方案;

网络领域,包括网络协议、网络拓扑结构、网络安全等关键知识;日志方面,从日志的分类、存储到分析,每一个环节都有着严格的规范和最佳实践;Zookeeper 作为分布式协调服务,在保障系统的一致性和可靠性方面发挥着核心作用;

Kafka 作为高吞吐量的分布式消息队列,在数据的传输和处理中表现出色;RabbitMQ 以其灵活的消息路由和可靠的投递机制备受青睐;Hbase 作为分布式列式数据库,适用于大规模数据的存储和查询;MongoDB 以其灵活的文档模型在非结构化数据处理中独具优势;Cassandra 具备高度可扩展性和容错性,适用于大规模数据存储场景;

24 种设计模式方面,如创建型模式、结构型模式、行为型模式,每一种模式都有着特定的应用场景和解决问题的思路;负载均衡方面,包括硬件负载均衡和软件负载均衡,不同的负载均衡策略在不同的业务场景下发挥着关键作用;

数据库领域,涵盖关系型数据库如 MySQL 、Oracle ,以及非关系型数据库如 Redis 等,涉及数据库设计、优化、备份恢复等重要知识;一致性算法方面,如 Paxos 算法、Raft 算法等,为分布式系统中的数据一致性提供了理论基础;

Java 算法方面,包括排序算法、搜索算法、图算法等,是提升程序性能和效率的关键;数据结构方面,如链表、栈、队列、树、图等,是构建复杂程序的基础;分布式缓存方面,如 Redis 、Memcached 等,在提高系统性能和响应速度方面发挥着重要作用。

从技术发展的趋势来看,随着云计算、大数据和人工智能等技术的迅速崛起,这些知识领域也在不断地演进和创新。例如,在大数据处理场景中,分布式缓存和分布式数据库的结合使用,能够极大地提高数据的处理效率和存储能力。

从企业应用的角度分析,掌握这些核心知识对于构建高性能、高可用、可扩展的企业级应用系统至关重要。能够有效地降低系统的维护成本,提高系统的稳定性和可靠性,从而为企业创造更大的价值。

从个人职业发展的角度考量,深入学习和掌握这些知识,能够提升个人的技术竞争力,拓宽职业发展的道路,使个人在技术领域中能够占据更有利的位置。

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的答案总结。

篇幅有限,只给大家展示部分大纲目录啦!有需要获取完整版资料的小伙伴,可以转发+关注后私信小编【666】,即可获得免费领取方式啦!

Java基础知识总结(超详细整理)

Java语言的特点

1.面向对象

面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特征(属性)以及行为特征(方法)提取并出来,并以固定的形式表示。

2.简单好用

Java语言是由C和C++演变而来的,它省略了C语言中所有的难以理解、容易混淆的特性(比如指针),变得更加严谨、简洁、易使用。

3.健壮性

Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。 另外,在Java语言中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的自动收集等),有效地减少了错误,使得Java应用程序更加健壮。

4.安全性

Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击,从而可以提高系统的安全性。

5.平台无关性

Java平台无关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。

6.支持多线程

在C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持。多线程机制使应用程序在同一时间并行执行多项任务,该机制使得程序能够具有更好的交互性、实时性。

7.分布式(支持网络编程)

Java语言具有强大的、易于使用的网络能力,非常适合开发分布式计算的程序。java中提供了网络应用编程接口(java.net),使得我们可以通过URL、Socket等远程访问对象。

8.编译与解释共存

Java 是编译与解释共存的语言

Java语法基础

标识符: 用来标识类名、对象名、变量名、方法名、类型名、数组名、文件名的有效字符序列。

合法的标识符:

由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且首字符不能是数字。

不能把java关键字和保留字作为标识符。

标识符对大小写敏感。

关键字:Java语言中已经赋予了特定含义的

保留字: const、goto,Java版本中尚未使用,但以后版本可能会作为关键字使用

变量:程序运行期间可以被改变的量。在程序中使用变量,必须先创建它并为它取一个名字,并且指明它能够存储信息的类型,这称为“变量声明”,也叫容器的创建。

变量的使用:

变量的声明:数据类型 变量名;

变量的赋值:变量名 = 数据;

变量的操作:放入打印语句进行输出或者进行运算

Java 中的注释有三种:

单行注释

多行注释

文档注释

数据类型

基本数据类型(8个),也称原始数据类型:

引用数据类型(3种):数组、类、接口

类型转换:

自动类型转换,也叫隐式转换

强制类型转换,也叫显式转换

运算符

运算符:一种特殊符号,用以表示数据的运算、赋值和比较数与整数

运算符分类:算术运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符

1.算术运算符

2.赋值运算符

3.比较运算符

4.逻辑运算符

5.三元运算符

条件表达式b?x:y;,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。

Java流程控制语句

选择结构

if语句: if(条件表达式){ 一条或多条语句 };

if else语句: if(条件表达式) {语句块1} else {语句块2}

if多分支语句:

switch开关语句:

循环结构

在程序中当要重复性的做某项工作时可以使用循环语句,包括:for循环、while循环、do…while循环。

for循环语句:

while循环语句:

do…while循环语句:

流程跳转

流程跳转语句:break,continue

break:在switch中结束case条件判断,在循环体中结束循环

continue:作用在循环体中,结束循环体的本次循环,而进入下次循环

数组

数组是数据的集合,一个容器,用来存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。

数组声明的三种方式:

数据类型[] 数组名 = new 数据类型[长度];

数据类型[] 数组名 = {数据,数据,…,数据};

数据类型[] 数组名 = new 数据类型长度[] {数据,数据,…,数据};

一维数组:

数组变量的声明:

语法:数据类型[] 数组名;,如:int[] num;、double[] d;、String[] str;

数组对象的创建:

语法:数组名 = new 数据类型[长度];,如:num = new int[4];,数组声明其长度后不可改变

赋值:

语法:数组名[下标] = 数据;,如:num[0] = 3;

数组元素的使用及遍历:

语法:数组名[下标],获取指定下标是数据。

二维数组:

数组变量的声明:

语法:数据类型[][] 数组名;,如:int[][] num;、double[][] d;、String[][] str;

数组对象的创建:

语法:数组名 = new 数据类型[外长度][内长度];,如:num = new int[4][3];,数组声明其长度后不可改变

赋值:

语法:数组名[外下标][内下标] = 数据;,如:num[0][0]= 3;

数组元素的使用及遍历:

语法:数组名[外下标][内下标],获取指定下标是数据。

对象与类

对象:客观存在能够相互区分的个体,比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。概括来说就是:万物皆对象。

类:若干具有相同属性和行为的对象的群体或者抽象,类是创建对象的模板,由属性和行为两部分组成

类是对象的概括或者抽象,对象是类的实例化。

类的声明

成员变量的声明: [修饰符] 数据类型 变量名 [= 初始值];

成员方法的声明:

构造器的声明:

注意:

①构造器名必须和类名一致

②构造器没有返回值类型

③任何类都含有构造器。如果没有显式地定义类的构造器,

④则系统会为该类提供一个默认的无参的构造器。一旦在类中显式地定义了构造器,系统就不会再为这个类提供默认的构造器了。

类的使用

类变量的声明:类名 对象名;

类对象的创建,赋值给变量:对象名 = new 构造器([参数列表]);

对象属性的赋值:属性:对象名.属性名、对象名.属性名 = 数据;

属性和方法的调用:属性:System.out.println(对象名.属性名);方法:对象名.方法名();

成员变量与局部变量:

成员变量:声明在类中方法体之外、可以有缺省值、可以使用修饰符。作用域:整个类

局部变量:声明在方法体或代码块中、没有缺省值、只能使用final修饰。作用域:当前方法体

参数:参数的本质是特殊的局部变量,只能定义在方法的小括号中

重载

方法的重载OverLoading: 同一个类中定义了多个方法名相同而参数不同的方法

重载在同一个类中,方法名相同,参数不同(参数的个数、顺序、类型不同)

构造器的重载:

方法的返回值类型:

无返回值类型:void,return;//结束方法体

有返回值类型为:数据类型(基本数据类型、引用数据类型),return 数据;//结束方法体,并且返回一条数据

关键字

this关键字:

this是一种特殊的引用,指向当前对象

this的两种使用方法:

如果发生局部变量和成员变量命名冲突时,可以通过this.成员变量名的方式区分成员变量和局部变量。

一个构造方法中需要调用本类的另一个构造方法,可以通过this()的方式调用,但this()必须要书写在第一行。

static关键字:

静态变量: 使用static修饰的成员变量叫做静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。

静态方法: 使用static修饰的成员方法叫做静态方法,静态方法可以不依赖于任何对象进行访问(对于静态方法来说,是没有this的),由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

调用格式:类名.静态变量名 ,类名.静态方法名()

静态内部类(static 修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非 static 成员变量和方法。

静态代码块:

是一个以static为前导的代码块,一般用于为类的工作做一些初始化工作,如初始化一些静态变量。一个类中可以有许多静态初始化块,并且它们可以出现在类体的任何地方。运行时系统会保证静态初始化块会按照它们在源代码中出现的顺序被调用

static块可以用来优化程序性能:因为它只会在类加载的时候执行一次

super关键字:

super代表的是父类对象,

使用方式:

super.属性名、super.方法名();用于在子类中调用父类被隐藏的同名实例变量

super([参数列表])用于在子类的构造方法中调用父类的构造方法

每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super(),super()必须是构造器的第一条语句

final关键字:

final 关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:

修饰类:类不能继承,final 类中的所有成员方法都会被隐式的指定为 final 方法;

修饰符变量:该变量为常量,,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。

修饰符方法:方法不能重写

说明:使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的 Java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的 Java 版本已经不需要使用 final 方法进行这些优化了)。类中所有的 private 方法都隐式地指定为 final。

访问修饰符

访问修饰符对成员变量和成员方法的访问限定

Java的三大特性

封装

封装指隐藏对象的状态信息(属性),不允许外部对象直接访问对象的内部信息(private实现)。但是可以提供一些可以被外界访问的方法来操作属性。

将类中成员变量private,提供public的get和set方法来控制属性的存取动作,以保证对私有属性操作的安全性:

继承

继承extends:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。

基本语法:

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的属性或方法(对父类进行扩展),也可以拥有父类的属性和方法,并且通过自己的方法再次实现父类的方法(重写)。通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。

Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。Java支持多层继承(继承体系)。Java继承了父类非私有的成员变量和成员方法,但是请注意:子类是无法继承父类的构造方法的。

注意:不要仅为了获取其他类中某个功能而去继承 ,类与类之间要有所属(“is a” )关系

方法的重写:

子类从父类继承的某个实例方法无法满足子类的功能需要时,需要在子类中对该实例方法进行重新实现,这样的过程称为重写,也叫做覆写、覆盖。

方法重写的前提:继承,子类的修饰符大于等于父类,方法名、参数列表、返回值类型必须相同

多态

多态:一种事物的多种形态(多态的前提:继承、重写、向上转型)

通过多态可以提高代码的可重用性,降低模块之间的耦合度。

抽象类

抽象类的概念:

Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。如:Shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中进行实现。

抽象类的声明: [修饰符] abstract class 类名 [extends 父类名]{类体}

抽象方法的声明: [修饰符] abstract 返回值类型 方法名([参数列表]);

因为抽象方法无法确定具体执行的功能,所有抽象方法没有方法体,需要在小括号后加上分号

抽象类和普通类除了使用abstract修饰外和普通的类相似,抽象类中可以没有抽象方法,但是一旦某个有抽象方法,那么这个类必须被声明为抽象类。

抽象类的使用:

因为抽象类不是一个具体的类,所以无法实例化,但是抽象类可以用于声明变量

抽象类可以被继承,在子类中实现抽象类的所有抽象方法,以达到抽象类的具体化

接口

在Java中接口不仅仅是程序开发过程中“约定”,更是更加抽象化的抽象类。

接口的声明语法: [修饰符] interface 接口名{[常量];[抽象方法];}

接口实现的语法: [修饰符] class 类名 [extends 父类名] [implements 接口1,接口2,……]{类体部分}

一个类可以实现多个接口,从而解决了Java单继承的缺点。

接口的作用:

提高程序的重用性

提高程序的可扩展性

降低程序的耦合度

实现了多继承

小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取

版权声明:本文为CSDN博主「龙源lll」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Lzy410992/article/details/118852573

查漏补缺,超详细的Java基础知识点总结,快看哪些你还不会?

它是基础的线性储存结构,也可以有效的实现一组变量的关联

1.“数组名称.length”属性,可以直接得到数组的长度2.数组属于引用数据类型,在代码中需要进行内存的分配3.动态初始化后会发现数组中的每一个元素的内容都是其对应数据类型的默认值4.静态初始化:在数组定义时就为其设置了具体的数据内容,这样就避免了先开辟后赋值的重复操作

在数组使用时需要关键字new开辟堆内存空 间,而一块堆内存空间可以被多个栈内存指向,自然也就能对它进行引用数据操作注意:不能够直接使用未开辟堆内存空间的数组(因为一但使用就会出现空指向异常)

程序结果:

他是一种加强型for循环,使用foreach结构可以实现数组数据的输出

如下:for(数据类型 变量 :数组 | 集合){//循环体代码,循环的次数为数组的长度}

程序的执行结果:

它是一种描述多行多列的数组结构

它也有俩种初始化的方式,分别是动态初始化和静态初始化(其实要区分动态和静态,就看初始化时有没有进行赋值操作,有的话就是静态的)1.动态初始化:数据类型 数组名称[][] = new 数据类型[行的个数][列的个数];2.静态初始化:数据类型 数组名称[][] = new 数据类型[][]{{值,值,值}{值,值,值}}关于多维数组::二维及其以上的都可以称为多维数组,但维数越高,复杂度也就越高,在开发的过程中建议尽量不要使用多维数组

程序执行结果:

这里要讲的是如何利用方法接收数组和返回数组的操作

1.用方法接收一个数组:事先开辟好一个数组,然后通过引用传递,指向该数组的堆空间,这样就达到了接收的目的了2.用方法返回一个数组:和接收差不多,只不过接收时对方法的类型没有强制的要求,返回时则必须要要求方法的类型与接收数组的类型一致注:因为用的是引用传递只要有一个修改了堆空间里内容,其它的也会跟着改变,因为归根结底指向的都是同一块堆空间。

程序执行结果:

除了基本数据类型的数据定义为数组外,引用数据类型也可以定义数组,像这样的就是对象数组了

1.对象数组动态初始化:类 对象名称[] = new 类 [长度];2.对象数组静态初始化:类 对象名称[] = new 类 [实例化对象,实例化对象,…];类的定义和以前的差不多,只不过在实例化对象的时候用了数组的形式

程序执行结果:

这里要说的是一个类可以关联其他类。根据引用关系依据某一个类对象,可以获取其相应的信息

详解:用于描述连个类之间的引用关系,在主类操作时首先根据两个类的关系设置引用关系,随后就可以根据引用关系依据某一个类对象获取相应的关系(这里有一点象父类与子类的继承的意思在里面,但两者的操作是不一样的)

可以利用自身关联的形式描述人员后代的关系

详解:在进行类关联描述的过程中,除了可以关联其他类之外,也可以实现自身的关联操作,也就是说可以利用自身关联的形式描述人员后代的关系

将对象的引用关联进一步扩展就可以实现更多的结构描述,通过不同的类实现子结构定义,随后将其在一个父结构中整合

详解:下面会写一个伪代码的合成设计模式组成结构。需要注意的是Java中提供的引用数据类型不仅仅是描述的内存操作形式,更多的是包含了抽象与关联的设计思想

这里分析的是数据表与简单java类之间的转化。简当操作就是首先实例化各个对象信息,随后根据关联关系设置数据间的引用配置,在数据配置完成后就可以依据对象间的引用关系获取对象的相应信息。

程序执行结果:

详解:现代项目的开发中数据库是核心的组成部分,几乎所有的项目代码都是围绕着数据表的业务逻辑结构展开的,那么分析数据表与简单java类之间的转化也是很重要的

1.数组是一组相关数据变量的线性集合,利用数组可以方便地实现一组变量的关联,但数组的缺点就在于长度不可以改变

2.数组的访问需要通过“数组名称【索引】”的形式,如果超出索引范围就会报异常。

3.数组的长度可以用“数组名称.length”的形式动态获取。

4. 数组采用动态初始化时,数组中的每一个元素的内容都是其对应数据类型的默认值。

5.如果使用了未开辟堆内存空间的数组则会出现空指向异常。

6.在JDK中使用System.arraycopy()和java.util.Arrays.sort两个方法可以实现数组的复制和排序

7.JDK1.5之后追加了可变参数,这样可以使得方法可以任意接收多个参数。不过需注意的是接的参数使用数组形式处理。

8.对象数组可以实现一组对象的管理,这样在开发中就可以描述多个实例。

9.简单java类可以实现数据表结构的映射转换,通过面向对象的关联形式可以描述数据表的存储结构

原文链接:https://blog.csdn.net/weixin_52533616/article/details/113827437

以上就是小编分享给大家的Java基础知识点总结,小编这里还总结了一份Java核心知识点学习笔记一份,下面是部分资料截图,编程的世界永远向所有热爱编程的人开放,这是一个自由,平等,共享的世界,我始终是这样坚信的。

该资料获取方式:转发后,关注我私信【学习笔记】获取Java核心知识点学习笔记

最后

整理不易,欢迎大家一起交流,喜欢文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发+转发+转发,一定要记得转发 关注 领取哦!!!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。