
Java-SE
文章平均质量分 87
BigBug_500
Talk is cheap.Show me the code.
EmailMeAt:snail.pu@foxmail.com
展开
-
如何提高代码质量
好和坏是一个比较笼统的概率,代码质量高低是一个综合各种因素得到的结论,并不能通过单一的维度去评价一段代码写的好坏。对一段代码的质量评价,常常有很强的主观性。比如,怎么样的代码才算可读性好,每个人的评判标准都不大一样。定义解释可维护性、可扩展性能够在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。(对修改关闭,对扩展开放)可读性、简洁性思从深而行从简,目的是让他人可以轻松读懂你的代码。列如命名是否规范、注释是否详尽、函数长度是否合适等可复用性。原创 2023-03-06 14:27:00 · 968 阅读 · 0 评论 -
Java 类的生命周期、ClassLoader的应用和演变(KeyWord:SpringBootClassLoader、委派模型)
类加载器:双亲委派模型下的类加载机制:JVM启动的时候,Java 开始使用如下三种类加载器:1. 根类加载器 Bootstrap负责装载最核心的Java类,比如Object、System、 String等,用 C++ 来实现的,不存在于 JVM 中。2. 扩展类加载器 Extension ClassLoader,JDK 9 及以后更换为Platform ClassLoader负责加载一些扩展的系统类,比如XML、加密、压缩相关的功能类等;3.系统类加载器 Application Clas原创 2021-03-15 23:25:46 · 1202 阅读 · 0 评论 -
JDK 7 / 8版本下,Map的学习
HashMap:为什么用HashMap:HashMap 是一个散列桶(数组和链表/红黑树),它存储的内容是键值对 key-value 映射当hash冲突越少时(链表长度短,红黑树深度小),查找的时间复杂度越接近O(1);添加,删除,修改的时间复杂度都为O(1)HashMap 是非 synchronized,所以对 HashMap的操作很快HashMap、LinkedHashMap 可以接...原创 2020-01-20 11:12:28 · 897 阅读 · 1 评论 -
Java下编码、加密的使用与理解
对称加密 对称加密,是为了解决数据传输过程中,被第三方窃取的问题。发送方通过约定的密钥加密,接收方接受到密文后,使用密钥解密便得到明文。 在整个过程中,密钥的安全性,显的比较重要。密钥的确定有两种方式,一是发送、接受方提前约定好,配置在代码中,二是通过传输临时约定密钥,该种方式需要考虑中间人攻击的情况。提前约定密钥的 AES 对称加密 // 加密 public static String Encrypt(String sSrc, String sKey) throws Exception原创 2020-07-08 19:21:28 · 820 阅读 · 0 评论 -
关于 String 转 Enum 类型,适用所有场景
问题:为了让开发中的代码可读性增加,可以使用 Enum 类型,但是 String 转 Enum 类型需要分情况讨论。网上过多的解答都是部分情况,现记录如下:情况一假设定义了如下的enum(枚举):public enum Blah { A, B, C, D}已知枚举对应的String值,希望得到对应的枚举值。例如,已知"A",希望得到对应的枚举——Blah.A,应该怎么做?使...原创 2020-03-20 11:54:48 · 1081 阅读 · 0 评论 -
简单工厂模式 + 策略模式干掉一长串的 if-else
问题描述:在许多的业务场景中,都有使用 if-else 来判断做出相应的计算,但是同级的大量 if-else 代码可读性、可维护性差,是一种面向过程的编程思想。使用策略模式 + 简单工厂模式实现 if-else 效果,使代码的可读性,可扩展性提高。策略模式 + 简单工厂模式的实际用例需求: 如果账号是超级管理员,返回状态码为1;是普通管理员返回状态码2;是考生返回状态码3/** * @...原创 2020-01-18 21:57:53 · 1186 阅读 · 0 评论 -
工厂方法模式
工厂方法模式作用: 定义一个用于创建对象的接口,让子类决定将哪一个类实例化,把一个类的实例化延迟到了子类。优点: 满足开闭原则(对扩展开放,对修改关闭)。如下面的代码用例,当需要添加一个png的图片加类时,新增一个读取流程(实现 Reader 接口的类)、新增一个工厂实现类(实现 ReaderClassFactory 的类)。在整个过程中,不会对之前的类做任何修改操作,也就不会对已有的流程产生...原创 2020-01-05 16:47:48 · 728 阅读 · 0 评论 -
关于重载(Overload)与重写(Override)
鉴于一直混淆两个方法能不能构成重载,特开辟一文章重点研究Overload!!!Overload 发生在同一个类中同名方法之间如何有效简单的判定两个方法是否能构成重载?在 Java 语法规范中: 方法的特征签名为: 特征签名 = 方法名 + 参数类型 + 参数顺序在 JVM 的层面上: 方法的特征签名为: 特征签名 = 方法名 + 参数类型 + 参数顺序 + 返回值类型 我们...原创 2020-01-02 13:11:26 · 688 阅读 · 0 评论 -
Java集合接口、类间的关系和部分理解
关于Map的更多介绍关于List的更多介绍原创 2019-08-18 22:08:13 · 718 阅读 · 0 评论 -
接口和抽象类的优缺点
更新到(19.12.22):https://blog.youkuaiyun.com/BigBug_500/article/details/1036576491. 接口中只有抽象方法。对于实现它的子类,都要求重写它的抽象方法。当在一个接口中,加入一个抽象方法时,他的子类都必须去实现新的抽象方法。2. 抽象类中既可以有抽象方法,也可以有非抽象方法。对于继承它的子类,具有它的非抽象方法,但必须重写...原创 2019-06-13 22:24:13 · 2142 阅读 · 0 评论 -
接口和抽象类的特点与使用
接口类的特性:接口中的方法会被隐式的指定为 public abstract(使用其他修饰符会报错)接口中所有变量会被隐式的指定为 public static final 变量(使用其他修饰符会报错)JDK 8 后,接口中可以加入 static 和 default 修饰的非抽象方法,它们分别使用类名 和其实现的子类 调用抽象类的特点:抽象类不能被实例化,所以抽象类必须被...原创 2019-12-22 22:45:51 · 802 阅读 · 0 评论 -
注解与反射的项目实际用例
问题描述:在entity包下,需要对返回的字段进行再次的处理,例如对于date字段,需要把date字段转换为指定的格式返回到前端。解决方案:可以在对应的entity实体类中,加入一个方法,使用注解标注,在返回数据时,利用注解和反射的特性再次进行数据的封装(在这次数据的封装过程中,可以添加分页等一些信息)解决方案代码用例:entity类:class MyEntity { String...原创 2019-12-19 22:17:51 · 707 阅读 · 0 评论 -
try-catch-finally流程详解及相关使用、拓展
执行流程try中没有异常(不到catch中):finally中无return:返回的值是在try中该变量的值,与finally中赋值与否 无关finally中有return:返回finally中的值,与try中的无关try中有异常(到catch中去执行):finally中无return返回的值是在catch中该变量的值,与finally中赋值与否 无关finally中有return:返回finally中的值,与catch中的无关综上:在执行原创 2019-12-09 22:19:22 · 965 阅读 · 0 评论 -
List容器线程安全,Queue
区别:ArrayList底层是数组结构,查询快,增删慢,线程不安全,效率高。LinkedList底层是双向链表数据结构,查询慢,增删快,线程不安全,效率高。Vector底层是数组结构,查询快,增删慢,线程安全,效率低。注意:所谓的线程安全,不包括对这些集合类的复合操作;当第一个线程对复合操作时,第二个线程也进入未同步的复合操作,就会出现问题。但多线程单个去操作线程安全集合中的方...原创 2019-04-22 11:38:02 · 1453 阅读 · 0 评论 -
基于 Spring 构建应用的多环境感知方案
场景: 在一个实际的项目业务开发中,必定包含多个环境,如本地、开发、测试、预发布、正式、销售等等环境,不同的环境有需要连接不同的 DB 、请求不同的外部依赖等等。参考链接 ...原创 2020-09-29 16:50:57 · 781 阅读 · 0 评论 -
泛型概念与用例
泛型的本质是,也就是说所操作的 数据类型 被指定为一个参数。原创 2019-11-29 11:13:26 · 730 阅读 · 0 评论 -
反射 Reflect
反射的定义反射用于在程序 运行时 ,获取并调用未知类的字段、方法等信息反射的功能判断是否为某个类的实例使用Class 对象的 isInstance() 方法来判断是否为某个类的实例,它是一个 native 方法使用反射创建对象调用方法、成员变量反射的运用场景Spring中,XML 配置模式装载 Bean日志打印时,使用的反射获取类信息...原创 2019-11-05 22:41:41 · 699 阅读 · 0 评论 -
Socket编程知识
TCP编程使用到类ServerSocket、SocketServerSocket在服务器端用ServerSocket监听一个端口serverSocket.accept()用于接收客户端的请求,他会阻塞服务器的线程accept.getInputStream() / accept.getOutputStream()用于接收客户端 或 向客户端发送数据Socket在客户端实例化Sock...原创 2019-11-02 16:57:14 · 715 阅读 · 0 评论 -
Java类型:基本与包装类型、String
八大基础类型(都有对应的包装类型):整数:byte、short、int、long浮点数:float、double字符型:char布尔型:boolean基本类型byteshortintlong位数8位16位32位64位容量255655354*10918*1018表示范围-128~127-32768~327672*1099*101...原创 2019-09-27 22:49:24 · 841 阅读 · 0 评论 -
单例模式,与Spring的结合
单例模式:保证系统中一个类只有一个实例1.饿汉式单例静态常量/** * 饿汉式单例:在类加载的初始化阶段就完成了实例化,使用JVM来解决了线程同步问题 * JVM中,初始化类时只有一个线程在操作 */public class HungrySingleton1 { private static final HungrySingleton1 instance=new H...原创 2019-06-16 17:19:13 · 988 阅读 · 0 评论 -
==、equals、hashcode比较与重写
==和equals的区别:值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。总结:==比较的是2个对象的内存地址,而equals需要去比较的是2个对象的内容;补...原创 2019-05-14 12:20:26 · 770 阅读 · 0 评论 -
Java的优缺点
优点:Java限制了对内存的直接操作,由JVM完成;但在C/C++中有指针直接操作内存,带来效率,但也带来了其他的混乱有自己的垃圾回收机制,不用担心对部分对象的内存回收通过JVM实现了平台无关性,实现了一次编译,处处运行缺点:封装的API需要通过JVM才能调用到OS,带来了效率问题反向编译问题:Java中的class文件含有被调用类的字段,方法名参数等详细信息,通过反编译就可以得...原创 2019-08-21 17:49:38 · 1575 阅读 · 0 评论 -
对Java多态的理解
多态的定义同一个行为发生在不同的对象上,产生不同结果的能力使用多态的好处易于扩展简化调用可替换多态存在的前提继承子父类中方法的重写父类引用指向子类对象代码用例public class TestPolymorphism { public static void main(String[] args) { Animal a_c = new Cat(...原创 2019-09-09 17:57:54 · 649 阅读 · 0 评论 -
Java中只存在值传递,代码示例
package copy;/** * @Author Snail * @Describe 值 引用传递代码示例 ,Java中,只存在值传递 * @CreateTime 2019/8/3 */public class ValueReferencePassing { public static void main(String[] args) { int i1...原创 2019-08-03 18:37:37 · 649 阅读 · 0 评论 -
代理模式
静态代理:优点:可完成在不修改目标对象的功能前提下,对目标功能扩展.缺点:1. 都要实现公共接口2. 需要创建一个代理类,并且只能代理一个对象用例:package designPattern.proxy;/** * @Author Snail * @Describe * @CreateTime 2019/6/29 */public class TestS...原创 2019-06-29 18:00:17 · 762 阅读 · 0 评论 -
深拷贝与浅拷贝的含义与用例
Java中有基本数据类型(元类型),和类的实例对象这个引用数据类型。而一般使用 『=』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。浅拷贝:只对类中基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。...原创 2019-06-23 16:18:25 · 870 阅读 · 0 评论 -
assert的使用时机
assert一般用在那些知道绝对不会发生的事情上例如:在调用一个函数时,需要一些参数等前条件,在检测前条件时,就可以使用assert来判断,避免函数调用出错exception捕捉的是用户或者环境的错误...原创 2019-04-20 17:12:16 · 729 阅读 · 0 评论 -
判断long,Long,int....之间是否相等
判断long是否相等原创 2019-03-10 10:32:39 · 3718 阅读 · 0 评论 -
判断字符串是否为空,不报空指针异常
当字符串为null时,用equals()、length()、isEmpty() 都会抛出异常所以可以使用 “if (test == null)” 来判断,简单直接,不报异常itemsListString==null || itemsListString.trim().equals("")由于与运算的法则,该条语句不会报错...原创 2019-01-16 12:15:51 · 3094 阅读 · 0 评论