优雅的Java
文章平均质量分 81
优雅的Java
Davieyang.D.Y
STAY HUNGRY STAY FOOLISH~
展开
-
Java面向对象系列[v1.0.0][不可变类]
不可变类(immutable)类的意思是创建该类的实例后,该实例的实例变量是不可改变的,java提供的8个包装类和java.lang.String类都是不可变类,当创建它们的实例后,其实例的实例变量不可改变原创 2020-02-22 18:56:10 · 499 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][索引与视图]
创建索引唯一的作用就是加速对表的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少磁盘I/O;因为视图只是数据表中数据的逻辑显示,也就是一个查询结果,所以创建视图就是建立视图名和查询语句的关联原创 2020-09-25 15:17:19 · 1360 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][异常处理机制]
异常和测试岗位的理念紧密相关,所以关于异常应该好好说一说,实际上异常机制是判断一门编程语言是否程序的标准,主流的编程语言中都提供了健全的异常处理机制,请看清楚这里说的是处理机制,它可以使程序中的异常处理代码和正常业务代码分离,保证程序代码更加优雅的展现,而其本质是大大提高了程序的健壮性,反映到客户层面更多的感知就是稳定性原创 2020-06-10 23:13:44 · 4139 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][泛型方法和类型通配符]
大多数情况下既可以使用类型通配符也可以使用泛型方法完成,他们之间的区别和共性值得细细思考原创 2020-04-06 15:20:30 · 555 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][面向接口编程]
接口体现的是一种规范和实现分离的设计思想,充分利用接口可极好的降低程序各模块之间的耦合,提高系统的可扩展性和可维护性原创 2020-02-25 18:39:23 · 654 阅读 · 2 评论 -
Java面向对象系列[v1.0.0][SQL语法之基础查询]
select语句的功能就是查询数据,select语句也是SQL语句中功能最丰富的语句,单表查询,多表联合查询,子查询,本质上它就是用于从一个或者多个数据表中选出特定行、特定列的交集原创 2020-09-29 22:36:13 · 366 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][List]
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引,默认按元素的添加顺序设置元素的索引原创 2020-03-28 17:24:31 · 780 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][异常跟踪栈]
异常对象的printStackTrace()方法用于打印异常的跟踪栈信息,根据printStackTrace()方法的输出结果,开发者可以找到异常的源头,并跟踪到异常一路触发的过程原创 2020-06-17 17:57:52 · 4036 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][反射基础]
程序需要在运行时发现对象和类的真实信息,为了解决这个问题,有两种方法:- 第一种如果在编译时和运行时都完全知道类型的具体信息,在这种情况下,可以先使用instanceof运算符进行判断,再强制类型转换将其转换成运行时类型的变量- 第二种如果在编译时根本无法预知该对象和类可能属于哪些类,程序只能依靠运行时信息来发现该对象和类的真实信息,这种情况下必须使用反射原创 2020-05-07 15:26:01 · 4165 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][输入流过滤器对反序列化对象有效性验证]
在程序做反序列化之前,可以对序列化数据进行检查,从而确保反序列化后的数据唯一,如此可以保证程序更健壮且安全原创 2020-06-07 16:52:19 · 609 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][MAP]
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组用于保存key,一组用于保存value,key和value都可以是任何引用类型的数据原创 2020-03-30 00:27:27 · 967 阅读 · 0 评论 -
使用 VisualVM 进行性能分析及调优
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。原创 2019-12-03 11:29:29 · 686 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][FileLock]
如果多个程序需要并发修改同一个文件,程序之间就需要某种机制来进行通信,使用文件锁可以有效的阻止多个进程并发修改同一个文件从JDK1.4的NIO开始,Java开始提供文件锁的支持,在FileChannel中提供的lock()/tryLock()方法可以获得文件锁FileLock对象,从而锁定文件原创 2020-06-03 15:39:40 · 361 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][异常的处理规则]
成功的异常处理应该实现如下4个目标:- 使程序代码混乱最小化- 捕获并保留诊断信息- 通知合适的人员- 采用合适的方式结束异常活动原创 2020-06-17 18:29:41 · 4059 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][泛型方法]
Java5提供了泛型方法(Generic Method),所谓泛型方法,就是在声明方法时定义一个或多个泛型形参原创 2020-04-05 20:50:57 · 631 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][垃圾回收]
垃圾回收机制只负责回收对内存中的对象,不会回收任何物理资源,例如数据连接,网络IO等,程序无法精确的控制垃圾回收的运行,当对象永久的失去引用,系统就会在合适的时候回收他所占的内存,在垃圾回收机制回收任何对象之前,总会先调用他的finalize()方法,该方法可能使该对象重新复活,也就是重新获得引用,从而导致垃圾回收机制取消回收,而合理的使用强引用、软引用、弱引用、虚引用将会为系统的性能及稳定性提供更好的帮助原创 2020-02-29 17:01:48 · 832 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][Java11改进的垃圾回收器]
显示垃圾回收传统的C/C++,需要程序员负责回收已经分配的内存,显示的进行垃圾回收,然而这是非常困难的事情,因为程序员往往并不知道内存应该何时被释放,内存得不到释放将会引起系统运行速度下降,也就是内存泄漏,而如果错误的回收了程序核心类库的内存,则系统会直接崩溃隐式的垃圾回收Java不需要程序员直接控制内存回收,内存分配和回收都是JRE在后台自动进行的,JRE会自动回收那些不再使用的内存,通常...原创 2020-01-25 17:15:06 · 616 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][反射与泛型]
通过在反射中使用泛型,可以避免使用反射生成的对象需要强制类型转换原创 2020-05-08 23:47:02 · 348 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][字节流和字符流]
字节流和字符流InputStream和ReaderInputStream和Reader是所有输入流的抽象基类,虽然本身并不能创建实例来完成输入,但他们的方法是所有输入流都可以使用的方法InputStream里包含三个方法:int read(): 从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数int read(byte[] b, in原创 2020-05-18 00:04:48 · 1112 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][方法详解]
如果仅从程序的运行结果来看,大部分时候都可以直接使用类变量或者实例变量来解决问题,无需使用局部变量,然而如果考虑程序运行的性能那就不能这么简单处理,当我们定义一个成员变量时,成员变量将被放置在堆内存中,成员变量的作用域将扩大到类存在范围或者对象存在的范围,而这无疑增大了变量的生存时间,导致更大的内存开销,同时扩大了变量的作用域,不利于提高程序的内聚性原创 2020-02-14 11:11:12 · 675 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][Jshell交互式命令行工具]
在JDK9之后,Java提供了命令行交互工具,就和Python的命令行非常类似,如果配置好Java环境变量,则在命令行z接输入jshell即可进入该交互模式原创 2020-01-25 17:14:00 · 669 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][线程控制]
Java为线程提供了一些实用的工具类方法,可以很好的控制线程的执行原创 2020-04-09 00:50:18 · 909 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][泛型通配符]
为了表示各种泛型List的父类,可以使用类型通配符(?),就是一个问号,将这个问号作为类型实参传给List集合,表示可以匹配任何元素类型,并且还可以给通配符进行上下限限制原创 2020-04-04 19:16:28 · 706 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][使用反射生成动态代理]
通过抽象确实提炼出可复用的代码,为后期的维护减少了很多麻烦,但也同时产生了与固定代码块的耦合,而且硬编码耦合,如何处理这种耦合?原创 2020-05-08 00:52:26 · 4246 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][Checked异常和Runtime异常]
对于计算机语言来说情况相当复杂,没人能保证得了程序永远不会出错,就算程序没有错误,谁又能保证客户是按你的预期来输入的?就算客户是非常聪明而且配合的,谁能保证运行该程序会永久稳定?谁能保证运行程序的物理资源永久配合?谁能保证网络条件永远合适?。。。太多无法保证的东西,人是否要覆盖住?原创 2020-06-10 23:48:40 · 443 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][Lambda]
Lambda表达式可以简化创建匿名内部类对象的代码, 当使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块将会代替实现抽象方法的方法体,就相当于一个匿名方法原创 2020-02-28 14:25:14 · 520 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][菱形语法与泛型构造器]
泛型方法允许在方法签名中声明泛型形参一样,Java也允许在构造器签名中声明泛型形参,这样就产生了泛型构造器,一旦定义了泛型构造器,在调用该构造器时,就不仅可以让Java根据数据参数的类型来“推断”泛型形参的类型,而且程序员也可以显式的为构造器中的泛型行参指定实际的类型原创 2020-04-06 15:37:54 · 658 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][JAVA运行机制]
Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因此它要经过先编译后解释两步原创 2020-01-25 17:16:40 · 667 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][连接池管理数据库连接]
数据库连接的建立及关闭时非常消耗资源的操作,尤其多层架构的应用环境中,这种资源消耗对系统的影响更明显,频繁的打开、关闭连接将造成系统性能低下,数据库连接池的解决方案大大缓解了这个难题即当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池,每次应用程序请求数据库连接时,无须重新打开连接,而是从连接池中取出已有的连接使用,用完后不再关闭数据库连接,而是直接将连接还给连接池,这将大大降低系统开销原创 2020-10-07 15:09:32 · 315 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][封装详解]
封装(encapsulation)是面向对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。封装是面向对象编程语言对客观世界的模拟,在客观世界里,对象的状态信息都被隐藏在对象内部,外界无法直接操作和修改,而只暴露该暴露的。原创 2020-02-14 19:46:51 · 670 阅读 · 4 评论 -
Java面向对象系列[v1.0.0][IDEA断点调试]
Debug模式是调试代码非常便利的工具,我们当然想一遍就写对,我们当然不想遇到明明写的很对但是就是会报异常的情况,然而这并不太现实,而Debug和断点为我们提供了一个很好的解决这类状况的手段原创 2020-08-13 01:06:20 · 3630 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][数组详解]
理解数组Java的数组要求所有的数组元素具有相同的数据类型,换句话说一个数组里只能存储一种数据类型的数据一旦数组的的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变,即使把某个数组元素的数据清空,但它所占的空间依然保留,依然属于该数组,数组的长度依然不变Java的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数据属于相同的数据类型即可数组也是一...原创 2020-02-08 11:38:33 · 605 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][类成员]
在Java类里只能包含成员变量、方法、构造器、初始化块、内部类(接口和枚举),5种成员,其中除了构造器以外的四种成员都可以被static修饰,而用static修饰的成员就是类成员,类成员属于整个类不属于单个对象原创 2020-02-22 18:50:28 · 524 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][Set]
Set集合实现类HashSet、LInkedHashSet、TreeSet、EnumSet及性能比较原创 2020-03-27 20:06:02 · 636 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][输入输出流体系]
Java的输入/输出流体系提供了近40个类原创 2020-05-19 16:32:04 · 448 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][擦除和转换]
在严格的泛型代码里,带泛型声明的类总应该带着类型参数,但是也允许使用带泛型声明的类时不指定实际的类型,如果没有为这个泛型类指定实际的类型,则称作原始类型,默认是声明该泛型形参时指定的第一个上限类型当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有在尖括号之间的类型信息都将被丢掉,例如List类型被转换为List,则该List对集合元素的类型检查变成了泛型参数的上限即Object原创 2020-04-06 17:45:45 · 344 阅读 · 0 评论 -
Java面向对象系列[v1.0.2][System类相关用法]
System类提供了代表标准输入输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法原创 2020-06-19 15:26:59 · 520 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][集合]
Java集合就像容器,用于存储数量不等的对象(实际上存的是对象的引用),并可以实现常用的数据结构,除此之外Java集合还可以用于保存具有映射关系的关联数组。Java集合大致分为Set、List、Queue和Map四种体系,其中Set代表无需不可重复的集合;List代表有序可重复的集合;Queue代表一种队列结合;而Map代表具有映射关系的集合。原创 2020-03-23 15:57:17 · 743 阅读 · 1 评论 -
Java面向对象系列[v1.0.0][javadoc]
永远不需要相信自己的理解力和记忆力,随着代码量的增加代码会越来越难阅读,添加注释实际上是添加编码当时的想法。可读性第一,效率第二,横向考虑整个团队的发展,个人的代码一定会有其他人阅读的,而合适的注释是个人或者其他人阅读代码成本最低的一个途径。代码即文档,其实就是说代码规范,好的代码规范下的代码可读性非常高,有一句话叫代码自解释,当代码自己能解释自己的意愿的时候可读性就有了。原创 2020-03-02 23:38:12 · 541 阅读 · 0 评论 -
Java面向对象系列[v1.0.0][线程通信]
当线程在系统内运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,但Java也提供了一些机制用于保证线程协调运行原创 2020-04-11 22:15:53 · 903 阅读 · 1 评论