![](https://img-blog.csdnimg.cn/20200812023515328.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
EJava学习总结
本专栏是本人阅读EJava一书中各个条目的总结,如果发现阅读原书不是特别好懂,欢迎参考本专栏的解读。
我的镜子
Hello 我
展开
-
Java中的异构容器
需要提前知道的知识: Class类: Class类是Java机制中的一个特殊类,我们可以通过它获取其他类的属性类型、名称、方法、基类等等信息。为什么可以通过它去获取其他类的信息呢?因为Java中设定了每个类都有这么一个Class类对象,是JVM为我们创建好的,其中一种常见的获取方式就是通过某个类的对象的.getClass()方法获取,获得某个类的Class对象后,我们就可以通过Class类提供的一些方法去读取这个类的信息了,提供的方法比如getFields()、getMethods()等方法。 其他获原创 2020-09-18 02:29:24 · 469 阅读 · 0 评论 -
罗列一些编写泛型时的建议或优化点
使用原生态类型会在运行时导致异常,因此不要使用。原生态类型只是为了与引入泛型之前的遗留代码进行兼容和互用而提供的。 非受检警告很重要,不要忽略它们。每一条警告都表示可能在运行时抛出 ClassCastException 异常。 要尽最大的努力消除这些警告。如果无法消除非受检警告, 同时可以证明引起警告的代码是类型安全的就可以在尽可能小的范围内使用@Suppress Warnings( “unchecked”)注解禁止该警告。 要用注释把禁止该警告的原因记录下来。 ...原创 2020-09-18 01:10:06 · 284 阅读 · 0 评论 -
带你理解Java泛型擦除
什么是泛型? 简单来讲就是Java中提供的一种参数化类型的机制,将类型参数化,意思就是具体的类型通过像普通方法传参一样来决定,比如List<E>,我们可以通过指定传入的E为类型String得到List<String>。就像普通方法的传参一样,我们可以动态的决定传入的类型是什么,从而得到不同结果。 Java代码大体上可以分为2个时期,编译时期和运行时期,编译时期IDEA工具会进行一些检测工作,尽可能确保运行时不会出错,比如给一个int型的变量传String类型的值,会编译不过。 泛型.原创 2020-08-27 01:19:31 · 247 阅读 · 0 评论 -
罗列一些编写类与接口时的建议或优化点
区分一个组件设计得好不好,唯一重要的因素在于,它对于外部的其他组件而言,是否隐藏了其内部数据和其他实现细节。 设计良好的组件会隐藏所有的实现细节, 把 API 与 实现清晰地隔离开来。 然后,组件之间只通过 API 进行通信,一个模块不需要知道其他模 块的内部工作情况。 这个概念被称为信息隐藏( info1mation hiding)或封装( encapsulation ), 是软件设计的基本原则之一。 应该始终尽可能(合理)地降低程序元素的可访问性。 在仔细地设计了一个最小的公有 API 之后,应该防止.原创 2020-08-25 02:27:20 · 139 阅读 · 0 评论 -
简述覆盖Object的通用方法
Object类主要提供了equals、等通用方法,下面一一简述一下关键点。 equals方法 如果有些对象的equals比较的是是否为同一引用,那么可以不复写该方法,Object中的equals已经支持。 覆盖equals方法的场景:你需要从业务逻辑上去判断2个对象是否相等;该对象被放置到常用的数据结构中,比如List和Map,当key集为该对象类型时,在使用contains等方法时需要确保对象正确重写了equals方法。 覆盖equals方法遵循的约定: 1.自反性:(x非null)x.equals(x原创 2020-08-20 01:56:09 · 402 阅读 · 0 评论 -
读完这个例子就会理解里氏替换原则
接触到一样东西时,需要知道它有什么用?所以先上一个例子,以便明白为什么需要遵循里氏替换原则: 假设有一个父类ParentClass,他有2个参数和3个方法: public class ParentClass { int a, b; public void methodOne(int a) { this.a = a; } public void methodTwo(int b) { this.b = b; } //返回a乘以b的结果 public int methodThird()原创 2020-08-19 03:38:05 · 188 阅读 · 0 评论 -
Java中的依赖注入
解析表面意思:什么是依赖?可以简单地理解为import引入操作,比如import com.xxx.xxx;什么是注入?可以简单地理解为方法传参,就像给方法A(int temp)传入参数20;依赖注入可以理解为把原本要用import引入的资源,通过方法传参的形式引入,进而实现动态的决定要使用何种资源。这里也可以叫控制反转,就是把决定何种资源的控制权交由外部的使用者决定,也就是调用A(int temp)方法去决定。 其实这里的依赖,不一定是import引入,也可以是对某个对象的引用,比如类A里会用到类B的.原创 2020-08-16 18:11:12 · 667 阅读 · 0 评论 -
一些代码编写的细节知识点(持续更新)
因为有些知识点比较小,不好单独写一篇文章,所以专门起了一篇特别的、会持续更新的文章记录这类小知识点 对于一些自己项目中的工具类,我们会习惯的使用静态方法去编制它对外提供的功能,比如有个类叫UISizeUtils,它会对外提供一些dp2px(),px2dp()等方法,这些方法都是用static修饰的,这种情况下最好让UISizeUtils的默认构造器变为私有的,这样可以确保它不会被实例化,或者确保使用者不会误解它的用法。 ...原创 2020-08-16 16:23:50 · 191 阅读 · 0 评论 -
用Builder模式代替重叠构造器模式和JavaBeans模式
场景:当一个类的构造行数或者静态工厂方法(出门右转)拥有多个传参并且会根据传参的数量生成不同对象的时候,往往容易写出难以阅读和维护的代码,比如: public class Demo { private int p1; private String p2; private boolean p3; ... public Demo(int p1) { this(p1, null); } public Demo(int p1, String p2) { this(p1, p2, false);原创 2020-08-14 04:57:14 · 319 阅读 · 0 评论 -
带你解析静态工厂方法代替构造器的好处
首先,什么是静态方法? 静态方法是使用static关键字标记的方法,它属于类,不属于对象,意思就是,你在使用它的时候不需要创建对象,直接使用类名.方法就能使用,它的特点是在同一个类里,静态方法会被优先分配内存,如果这个方法会在多个地方调用,那么它也只分配了一次内存,而不像实例方法,需要创建多个对象,分配多块内存,所以它的适用场景在于,某个会被常用的公用方法,比如一些工具类的静态方法。 什么是静态工厂方法? 这里的“工厂”并不是指设计模式中的工厂模式,而只是用于命名一个生产某个类的对象的方法。顾名思义,静态.原创 2020-08-13 02:15:08 · 208 阅读 · 0 评论