Java基础教程和高级教程
文章平均质量分 93
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。本专栏从零基础开始介绍Java基础、类和对象、异常、数据结构、集合框架、反射、JDBC编程、多线程、网络编程、Tocat等等,然后最后完成一个前后端交互的博客页面系统
快乐江湖
专注人工智能领域和优质计算机学习笔记创作
展开
-
【专栏必读】Java基础教程、高级教程和SpringBoot内容导航和学习说明
⑤:Java作为一门纯面向对象语言,所以它和C/C++还是有一区别,因此在开始学习时大家可能对Java的一些语法细节会感到一知半解,所以建议有一定的面向对象基础和C++知识,这样上手会非常快。①:Java是一门优秀的语言,摒弃了C++中难以理解的语法,而且引入了一些新的特性,能够写出十分令人赏心悦目的代码,所以学习Java是很有必要的。③:在Java集合框架和数据结构部分中,对各种数据结构进行了详细介绍(包括其原理和实现),有助于大家对Java各种集合框架的准确理解。原创 2022-10-13 19:50:14 · 1439 阅读 · 0 评论 -
第一章:Java是什么、Java特性、Java环境安装和编写一个简单的Java程序以了解Java程序运行原理
特别注意:学习Java应该先学习C语言(至少基础语法),但是Java和C是两类东西(就像C和C++一样),所以学习时不要把C语言的一些东西生搬硬套在Java上,它们的思想是完全不一样的,否则你会学习的很痛苦Java:Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系, 这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,扩泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合主要有:企业级系统:比如大型复杂原创 2022-06-15 22:43:01 · 408 阅读 · 0 评论 -
第二章:Java常量、数据类型、变量、类型转换、类型提升和字符串
字面常量:程序运行期间固定不变的量,主要有需要注意:字符串、整型、浮点型、字符型和布尔型在Java中称之为数据类型数据类型:数据类型是用来定义变量的,它规定了一个变量占用的空间大小,Java中的数据类型分为以下两类基本数据类型见下表,需要注意每个基本数据类型都会对应一个类类型,也即包装类无论是16位还是32位系统,int都占用4个字节,long都占用8个字节整型和浮点型都是有符号的(意思就是肯定有正负)整型默认为,浮点型默认为计算机使用 二进制(bit) 表示数据字节(Byte)是计算机中表示空间大小的基本原创 2022-06-18 21:35:41 · 266 阅读 · 1 评论 -
第三章:Java运算符
运算符就是对操作数进行操作的符号,例如中和是操作数,是运算符。Java中运算符和C语言中的运算符基本一致(当然也有自己的特点)。运算符主要有以下几类①:两个相除时结果仍为,同时还会向下取整,这一点很多人容易犯错②:当两侧操作数类型不一致时,会向类型大的提升,这里尤其注意③:、运算时,右操作数不能为0④:也可以操作负数左右两侧必须都是类型规则为:遇假则假、全真则真运算时从左到右依次判断,一旦某个表达式为,则结果直接返回,后续表达式不再执行(“短路”现象)短路现象短路现象关于位运算符这原创 2022-06-23 22:08:07 · 267 阅读 · 0 评论 -
第四章:Java逻辑控制
下面是一个判断是否为闰年的例子①:使用if语句时推荐下面的风格②:else匹配时只会匹配离它最近的If①:多个后的常量值不可以重复②:switch括号内不能是以下数据类型③:不要遗漏,否则将失去“多分支选择”的效果④:无法处理复杂的条件判断语句①:打印1-10②:计算1+2+…+100③:计算5!④:计算1!+2!+3!+4!+5!的作用是让循环提前结束。比如下面的例子的作用时跳过本次循环直接进入下一次循环。比如下面的例子①:打印1-10②:计算1+2+…+100③:计算5!④:计原创 2022-06-25 23:02:56 · 613 阅读 · 0 评论 -
第五章:Java中的方法和方法重载、递归问题探讨
方法:Java中方法就是一个代码片段,它类似于 C 语言中的 “函数”。作用有:在Java中,定义一个方法的基本格式如下,注意(3)方法调用使用方法时称之为方法调用。例如下面的例子:计算1!+2!+3!+4!+5!在Java中,实参和形参分别占据不同的内存空间,方法被调用后会自动为形参开辟空间,两片空间没有任何关系,方法调用完毕形参所在空间就会被销毁。在上面的例子,实参只是把形参的值复制了一份给了形参,形参不会影响到实参例如下面的例子中,方法无法实现变量交换,它仅仅交换的是形参对于上面的基本类型,形原创 2022-06-28 23:21:41 · 255 阅读 · 0 评论 -
第六章:Java数组相关
数组:可以看成是相同类型元素的一个集合,在内存中占据连续的空间,每个元素都有自己的编号(下标),起始位置下标为0Java中,创建数组的格式如下,其中例如下面的例子(3)数组是对象Java是一门纯面向对象语言,所以在Java中一切皆对象,数组当然也不例外。当使用这样的语句创建了一个数组之后,其中就称之为引用变量,存储了对象的地址,它引用或指向了一个数组对象。使用 打印该引用变量,结果显示注意:动态初始化:创建数组时直接指定数组中元素的个数,例如B:静态初始化静态初始化:在创建数组时不直接指定数据元素原创 2022-06-30 21:11:18 · 278 阅读 · 0 评论 -
第七章第一节:Java类和对象之面向对象定义、实例化、this引用和对象的构造
关于这个话题我真的不想再多说了(说的实在太多了),虽然面向对象的定义很简短,但是要真正理解它却是很困难、抽象的,你需要多写代码,都做项目才能真正体会到。相关内容都在软件工程这门课中阐述,专栏链接如下,大家可以自行学习。当然,即便一知半解也是没有关系的,它不影响后面我们的学习,只是因为Java作为一门纯面向对象语言,了解了解还是挺有必要的类:面向对象方法学中类是对一组有相同数据和相同操作的对象的定义,是对象的模板,其包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的原创 2022-07-06 21:23:04 · 303 阅读 · 0 评论 -
第七章第二节:Java类和对象之封装、包和static成员
封装:面向对象方法学中封装是指将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互,例如生活中的一些电子设备,对于我们使用者来说是无需关心实现细节的访问限定符:Java中是通过类和访问限定符来实现封装的Java提供了如下四种访问限定符,各自作用范围如下表所示二:包(1)包的概念包:为了更好的管理类,把多个类收集在一起成为一组,称其为软件包。包是对类、接口等的封装机制的体现,是一种对类或接口等的很好的组织方式。在同一工程中允许存在相同名称的类,只要处在不同的包中即原创 2022-07-11 21:42:40 · 284 阅读 · 0 评论 -
第七章第三节:Java类和对象之代码块和内部类
代码块:使用定义的一段代码,根据代码块定义的位置以及关键字,又分为以下四种①:普通代码块:定义在方法中的代码块②:实例代码块:定义在类中的代码块,一般用于初始化实例成员变量③:静态代码块:使用static所修饰的代码块,用于初始化静态成员变量内部类:在Java中,可以将一个类定义在另一个类或一个方法内部,前者称之为内部类,后者称之为外部类。内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件(2)内部类分类内部类分类:内部类是一个很宽泛的概念,有如下几种实例内部原创 2022-07-13 19:10:36 · 231 阅读 · 0 评论 -
第八章第一节:Java继承之继承概念、语法、成员访问和super关键字
继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制。子类继承父类后,即实现了代码的复用,又使子类可以在父类的基础上进行扩展例如下面有两个类,分别是Dog和Cat,用于描述自然界中的狗和猫System.out.println(name+"正在吃饭");System.out.println(name+"正在吠叫");}}//猫classCat{name、age、weight。和。......原创 2022-07-17 16:41:24 · 301 阅读 · 0 评论 -
第八章第二节:Java继承之protected、final关键字和组合
关于组合和继承,下面链接中的文章说的非常清晰,大家可以学习学习。父类中不同访问权限的成员在子类中的可见性做了限定。另外在软件工程中我们也探讨过这个问题。protected关键字。原创 2022-07-19 20:01:10 · 1229 阅读 · 0 评论 -
第九章:Java多态理解、多态实现、重写、转型和抽象类
在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类各自按自己的需要来实现这个行为。比如买票行为,学生和普通人都属于人,但是学生买票可以半价,而普通人是全票。讲到这里,其实已经完成了多态,所以日后我们就可以利用继承和转型来完成。在构造B对象时会调用A的构造方法,在A的构造方法中调用了。向下转型很不安全,而且有时会有严重的歧义。完成某个行为时,不同对象有着不同的完成方法。方法,但此时是B对象,所以会调用到B的。,而B对象而没有完成构造,所以。但是我们可以向下转型,也即。下面的代码中,B继承自A,..原创 2022-07-21 16:59:49 · 614 阅读 · 0 评论 -
第十章:Java之接口基本概念、接口实现多继承、Object类
实现类”来实现该接口的所有抽象方法。原创 2022-07-23 17:12:26 · 280 阅读 · 0 评论 -
第十一章第一节:JavaString类介绍和常用方法
String类:字符串string的使用是极其频繁的,但是在C语言中要表示字符串只能依靠字符数组或字符指针,十分麻烦。所以在Java中设计了String类来方便我们对字符串的使用String类是Java面试中的高频考点。原创 2022-09-05 22:35:48 · 251 阅读 · 0 评论 -
第十一章第二节:Java字符串常量池和StringBuilder
则在堆中创建一个相应的对象,将创建的对象的引用存放到字符串常量池中,同时将引用返回给变量 str1。当我们在程序中使用双引号来表示一个字符串时,当我们使用了new 来构造字符串对象的时候,例如下面的代码,虽然可以达到最终的目的,字符串常量池(StringTable):则返回该对象的引用给变量 str1。数据库连接池、线程池、对象池。,外部是无法拿到这个数组的。String类在设计时,intern()方法。原创 2022-09-07 21:36:02 · 582 阅读 · 0 评论 -
第十二章:Java异常概念、处理和自定义异常类
异常:在Java中,将程序执行过程中发生的不正常行为称之为异常,此时编译器将会报出错误,也即抛出异常。在编写程序时,我们会经常遇到以下异常①:算术异常}②:数组越界异常}③:空指针异常}原创 2022-09-09 22:21:13 · 684 阅读 · 0 评论 -
第十三章第一节:Java数据结构预备知识之数据结构、Java集合框架概述
数据:所谓数据,是指信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合比如我们现在常常使用到的搜索引擎,一般会有网页、音乐、图片、视频等分类,他们分别对应了声音、图像等数据。这里所说的数据实则是一些符号,这些符号必须具备两个前提条件可以输入到计算机中能被计算机程序处理其中对于整型、浮点型这类的可以进行数值运算,而对于字符这类的数据则需要进行非数值运算,而像图像、视频这类数据则可以通过编码的手段转换为其他类型数据进行运算算法(Algorithm)原创 2022-09-12 20:59:33 · 392 阅读 · 0 评论 -
(王道408考研数据结构)第一章绪论-第二节2:算法的时间复杂度和空间复杂度
文章目录一:算法的时间复杂度(1)事后统计方法(2)事前分析估算的方法(3)函数的渐进式增长(4)算法时间复杂度A:算法时间复杂度定义-大OOO记法B:推导大OOO阶的方法C:各阶分析①:常数阶②:线性阶③:对数阶④:平方阶D:最好情况与最坏情况(5)一些案例一:算法的时间复杂度我们常常说:提高算法的效率,这里的效率多数情况下指的就是算法的执行时间,那么如何度量呢?(1)事后统计方法事后统计方法: 通过设计好的测试程序和数据,利用计算机计时器对不同算法编址的程序的运行时间进行比较,从而确定算法效率的原创 2021-11-06 22:58:42 · 2266 阅读 · 1 评论 -
第十三章第三节:Java数据结构预备知识之泛型
Java中的泛型类似于C++中的模板泛型:一般来说,一个类或者是方法它只能使用一种具体的类型。比如,一个方法它所返回的数据类型必须是确定的,而不能让编译器自己推导。这种设定会影响代码的自由度,所以在JDK1.5之后,引入了泛型这个概念。通俗点来讲泛型就是指适用于许多类型;从代码上看其实就是实现了类型的参数化,也即类型可以像普通参数传递定义:语法格式如下class 泛型类名称 < 类型形参列表 > {原创 2022-09-13 21:42:47 · 337 阅读 · 0 评论 -
第十四章第一节:Java集合框架之ArrayList
也叫做线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素注意:虽然顺序表和数组很相似,但是他们不是一个东西。单纯的数组虽然也能达到存取元素的目的,但是其安全性和可用性并不强,而顺序表是在数组的基础上建立起来的一个完整的类,对其数据存取、增删查改做出了严格的规定,所以十分完善和健壮ArrayList:Java集合框架中,ArrayList就是顺序表(可动态扩容),它是一个普通的类,实现了List接口实现了接口表明ArrayList可以随机访问实现了Cloneable接口表明。原创 2022-09-15 16:48:08 · 245 阅读 · 0 评论 -
第十四章第二节1:Java集合框架之链表及其实现
假设有一个数组,用这些数据以尾插建立单链表。假设有一个数组,用这些数据以头插建立单链表。第一个结点位置的指针叫做头指针。原创 2022-09-24 16:12:46 · 373 阅读 · 0 评论 -
第十四章第二节2:Java集合框架之LinkedList
双链表在单链表的基础上再增加一个指针域,用于指向它的前驱结点LinkedList:Java集合框架中,LinkedList就是双链表,它也实现了List接口。原创 2022-09-25 16:46:44 · 336 阅读 · 0 评论 -
第十四章第三节1:Java集合框架之栈Stack
栈(stack):是一种将插入和删除操作限制在一端进行的线性表。其中允许插入和删除的一端称之为栈顶(top),另一端则称之为栈底(bottom)。不含任何数据元素的栈称之为空栈。栈中元素遵循后进先出原则类似于弹夹中的子弹,先压进去的子弹是最后出来的一些软件(例如Word,Photoshop)其撤销操作本质也是栈结构顺序栈:顺序栈使用数组来实现。其中下标为0的一端作为栈底,将数组尾部作为栈顶,以进行插入和删除由于尾部元素作为栈顶,也即最后一个元素是栈顶元素,所以需要使用一个变量top进行标识,top。原创 2022-09-27 09:32:53 · 362 阅读 · 0 评论 -
第十四章第三节2:Java集合框架之队列Queue
队列(Queue):是一种只允许在一端插入,在另一端删除的线性表。我们把允许插入的一端称之为队尾(rear),把允许删除的一端称之为队头(front)。不含任何数据元素的队列称之为空队列。队列遵循先进先出(FIFO)原则生活中的排队就是典型的队列有时我们使用电脑时,会突然感觉电脑卡住了,乱点鼠标、乱按键盘也没有什么效果,然后突然它就像清醒了一般,把你刚才的所有操作全部执行了一遍。其实这是因为操作系统中的多个程序需要通过一个通道输出,而按先后次序排队等待造成的链式队列:其本质仍然是单链表,不过只能尾进头出。原创 2022-09-29 20:18:40 · 443 阅读 · 0 评论 -
第十四章第四节:Java集合框架之二叉树
树(Tree):这是一种非线性结构。是nnn(n≥0n\geq 0n≥0)个有限结点组成的一个具有层次关系的集合,与现实生活中的树十分相像,只不过它是倒挂的。nnn=0时称这样的树为空树树结构特点:在任何一个非空树中有且只有一个特定的称为根(Root)的结点当nnn>1时,其余结点可以分为mmm(mmm>0)个互不相交的有限集合T1T_{1}T1、T2T_{2}T2…TmT_{m}Tm,其中每一个集合本身又是一颗树,并且称为根的。原创 2022-10-01 21:19:48 · 530 阅读 · 0 评论 -
第十四章第五节:Java集合框架之优先级队列PriorityQueue(堆)
堆:堆就是一颗完全二叉树它的结点要么大于任意一个孩子结点,要么小于任意一个孩子结点如果其结点大于任意一个孩子结点,就称其为大顶堆,此时其最大的结点是根结点如果其结点小于任意一个孩子结点,就称其为小顶堆,此时其最小的结点是根结点。原创 2022-10-05 20:42:59 · 662 阅读 · 0 评论 -
第十四章第六节:Java中元素和对象的比较方法
但一旦实现,每次用该类都有顺序,属于。来对对象进行比较,主要有如下三种方法。的,所以直接重写即可,不过只能比较。,但对算法代码实现侵入性而强。:因为所有类都是继承自。:需要手动实现接口,原创 2022-10-06 16:30:03 · 376 阅读 · 0 评论 -
第十四章第七节1:Java集合框架之二叉排序树和哈希表
又称之为二叉搜索树,它具有下面的性质若其左子树不空,则左子树上所有结点的值均小于根结点的值若其右子树不空,则右子树上所有结点的值均大于根结点的值其左、右子树也分别是二叉排序树由以上性质可知,二叉排序树的中序遍历是一个递增序列哈希表(Hash table):在元素与其存储位置之间唯一确定一对应关系fff,称之为哈希函数,使得每个关键字keykeykey对应一个存储位置f(key)f(key)f(key)。原创 2022-10-10 22:22:35 · 404 阅读 · 0 评论 -
第十四章第七节2:Java集合框架之map和set
又称之为二叉搜索树,它具有下面的性质若其左子树不空,则左子树上所有结点的值均小于根结点的值若其右子树不空,则右子树上所有结点的值均大于根结点的值其左、右子树也分别是二叉排序树由以上性质可知,二叉排序树的中序遍历是一个递增序列Map:Map是一个接口类,它没有继承Collection,所存储的是键值对,并且K一定是唯一的,不可以重复由于Map是一个接口所以不可以直接实例化对象,如果要实例化,则只能实例化其实现类TreeMap或者HashMapMap中 key必须唯一但value可以重复。原创 2022-10-09 17:01:01 · 438 阅读 · 0 评论 -
第十五章:Java之排序
排序方法类别本文时间复杂度(平均/最好/最坏)是否稳定空间复杂度直接插入排序插入排序跳转O(n2)O(n2)/O(n)O(n)/O(n2)O(n2)是O(1)O(1)O(1)希尔排序插入排序跳转O(nlgn)O({nlgn})O(nlgn)/O(n1.3)O(n1.3)/O(n2)O(n2)否O(1)O(1)O(1)简单选择排序选择排序跳转O(n。原创 2022-10-06 20:11:54 · 337 阅读 · 0 评论 -
第十六章:Java之反射和枚举
Java反射(reflection):反射机制是指在运行状态中,对于任意一个类,我们都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能称之为Java的反射机制在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。原创 2022-10-12 20:41:26 · 750 阅读 · 0 评论 -
第十七章:Java之lambda表达式
lambda表达式:lambda表达式是Java SE8中引入的一个新特性。它允许你通过表达式代替功能接口。它和普通方法一样,提供了一个正常的参数列表和一个使用这些参数的主体。lambda表达式本质是一个匿名内部类(更进一步其实是匿名内部类的简化),也就是说lambda表达式实际上是创建了一个类、实现了接口然后重写了接口的方法链接。原创 2022-10-13 16:58:55 · 412 阅读 · 0 评论 -
第十八章第一节:Java之文件系统操作(Java.io.File)
在Java中,是通过类来对一个文件(或目录)进行抽象描述的File属性File构造方法:注意并不要求该文件必须真实存在File方法。原创 2023-01-04 18:25:12 · 289 阅读 · 0 评论 -
第十八章第二节:Java之文件内容读写(字节流和字符流文件)
在Java中,是通过类来对一个文件(或目录)进行抽象描述的File属性File构造方法:注意并不要求该文件必须真实存在File方法是一个抽象类,实际使用时还需要具体的实现类,一般来说,不同的输入设备就可以对应一个类。本节只关心文件读取,所以使用下面的涉及方法如下构造方法如下如下,创建一个文件test.txt,然后在其中写入"test.txt",再使用读取//返回-1读取完毕 break;} }.//返回-1读取完毕 break;} }.原创 2023-01-02 16:27:00 · 475 阅读 · 0 评论 -
第十九章第一节:JDBC编程之环境安装和基础配置
MySQL:MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司1995年开发,迅速成为最流行的开源关系型数据库管理系统。MySQL使用标准的SQL数据语言形式,可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等MySQL整体上属于C/S架构,也就是客户机/服务器的架构客户端服务端。原创 2022-10-17 20:35:34 · 850 阅读 · 0 评论 -
第十九章第二节:JDBC编程之MySQL数据库基本操作
SQL语句注意;原创 2022-10-19 21:00:53 · 718 阅读 · 0 评论 -
第十九章第三节1:JDBC编程之MySQL的增删查改基础篇
③:对多个列进行排序,写在前面的列的权重要高于后面的列,也即主要关键字和次要关键字之分。②:将指定同学的数学、语文成绩分别变更为60分、70分。①:查询语文成绩大于80且英语成绩大于80的同学。②:查询语文成绩大于80或英语成绩大于80的同学。③:将总成绩倒数前三的3位同学的数学成绩加上1分。①:查询数学成绩是58或59或98或99的同学。①:查询语文成绩在[80, 90]的同学。①:将指定同学的数学成绩变更为80分。②:查询语文成绩高于英语成绩的同学。①:查询英语成绩低于60分的同学。原创 2022-10-22 16:38:25 · 794 阅读 · 0 评论 -
第十九章第三节2:JDBC编程之MySQL的增删查改进阶篇
用户自定义完整性使用。原创 2022-10-27 10:51:23 · 922 阅读 · 0 评论 -
第十九章第四节:JDBC编程之MySQL索引和事务
当要删除的结点的关键字是非根非叶子结点的关键字时,和二叉排序树一样,向右分支找寻节点中最小的关键字或者向左分支找寻结点中最大的关键字进行取代(注意仍然需要满足关键字个数的要求)其查找过程也和二叉排序树基本一致,这里就不再叙述了。如果无法借位,那就直接删除然后和左或右进行合并操作。如果删除后关键字还不满足条件,可以进行借位操作。当要删除的结点的关键字落在终端结点上时,B树插入过程中,最重要的一个操作是拆分。如下是在B树中查找关键字“44”的过程。B树(B-tree)原创 2022-10-30 10:18:36 · 522 阅读 · 0 评论