EffectiveJava阅读笔记 第2章

【Sentaurus TCAD仿真】几种基础操作 当内存不足时,没必要删除整个Project,只需要 Clean up 节点信息即可。因为占用内存的主要部分是。文件数据,Command文件是不占用多少内存的,下次需要此工程仿真结果重新运行即可。右击可以对该工程进行剪切、复制、删除、重命名等操作。当节点号有时候排序混乱的时候,我们需要重新编排节点号。此时左侧工具栏就能看见我们新建的这个工程。运行节点时不同的颜色代表目前的状态。在这个地方添加要使用的工具。这个时候需要的工具就建好了。然后选择需要使用的工具。我们需要保存这个工程。 阅读详情

创建和销毁对象

第1条 用静态方法代替构造器

获取类的对象,通常有两种方法,一种是创建一个公有的构造器,一种是静态工厂。
如下:

public static Boolean valueOf(boolean b){
	return b ? Boolean.TRUE:Boolean.FALSE;
}

静态工厂相比构造器有如下优点:

有名称
静态工厂方法可自己命名,能够更为清楚的描述该方法作用,而构造器只能跟类名相同。而且很多时候需要传入不同的参数,这样就需要多个不同的构造器,就更难区分,而静态工厂方法则能够根据参数指定描述的名称。

不必每次调用都创建一个新的对象
对于final修饰的不可变类,实际没有必要重复创建,只需创建一次并缓存起来重复使用即可。而且可以确保不可变类不会存在两个相同实例

可返回原类型的任意子类型对象
适用于基于接口的框架,例如接口Type的静态工厂方法会被放在Types的不可实例化类中,如通用接口Collection和Collections。
同样也方便服务注册api的实现,以及多种服务的实现。

创建参数化类型实例代码更加简洁
相比构造器一个参数不同就要写不同的构造方法,静态工厂方法通过类型推导就更为简洁。


public static<K,V> HashMap<K,V> newInstance(){
	return new HashMap<K,V>();
}

Map <String,List<String>> m = HashMap.newInstance();

静态工厂相比构造器有如下缺点:

类如果没有公有或受保护的构造器,则无法子类化
与其他静态方法没有区别

第2条 多个构造器参数考虑用构建器

静态工厂和构造器都不能很好的扩展到大量可选参数。
如果有很多个参数,那么就需要写大量的构造器方法,如果让构造器方法接收多个参数,则会造成有时必须填写不必要的参数,赋值为0或者空。
当然也可以选择使用JavaBean的方式,创建一个类接收这些参数,将参数都作为类的属性,但这样就无法做到不可变,又需要做额外的工作保证线程安全。
第三种选择就是使用构建器,即Builder模式。
示例:

public class NutritionFacts {
    private final int servingSize; // (mL) required 
    private final int servings;    // (per container) required
    private final int calories;    // (per serving) optional    
    private final int fat;         // (g/serving) optional
    private final int sodium;      // (mg/serving) optional
    private final int carbohydrate; // (g/serving) optional
    public NutritionFacts(int servingSize, int servings) { 
        this(servingSize, servings, 0);
    }
    public NutritionFacts(int servingSize, int servings, int calories) {
        this(servingSize, servings, calories, 0); 
    }
    public NutritionFacts(int servingSize, int servings, int calories, int fat) {
        this(servingSize, servings, calories, fat, 0); 
    }
    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
        this(servingSize, servings, calories, fat, sodium, 0); 
    }
    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, 
        int carbohydrate) {
        this.servingSize = servingSize; this.servings = servings;
        this.calories = calories
        this.fat = fat
        this.sodium = sodium
        this.carbohydrate = carbohydrate;
    } 
}

这里也可以使用setter方法设置参数,还能在方法里面检验传入的参数是否有效,并抛出异常。
相比与构造器,使用Builder可以灵活的控制参数。
Builder缺点是必须给类写个构建器,有时没有必要,而且还会增大内存开销,影响性能。

最好一开始就决定是否使用构造器,避免以后因参数过多而需要添加构建器时需改动过多的代码。Builder模式适用于,构造器和静态工厂中有很多参数的场景。

学Simulink——基于电能质量治理的场景实例:静止无功发生器(SVG)与并网逆变器的结合 本文详细介绍了基于Simulink的SVG与光伏并网逆变器联合仿真建模方法。系统包含光伏单元、SVG主电路、控制策略(无功检测+双闭环控制)等模块,通过ip-iq法实现动态无功补偿。仿真结果表明,SVG能快速响应负载变化,将功率因数提升至0.98以上,有效稳定母线电压。该方案为新能源并网系统提供了有功/无功协同控制解决方案,具有10ms级响应速度和±5kvar补偿能力。文章提供了完整的建模流程、控制算法实现和结果分析,可作为电力电子与电能质量治理领域的实践指导。 阅读详情

相关推荐

星光、黑光、全彩夜视摄像头技术解析与实战选型指南

本文深入解析了星光、黑光、全彩与红外等主流夜视摄像头技术的工作原理与核心差异。针对不同监控场景与预算,提供了实战选型指南,帮助用户在安防项目中做出明智决策,实现夜间监控效果最大化。

weixin_29179311的博客 346

EffectiveJava阅读笔记(一)

考虑用静态工厂方法代替构造器 一、概述 二、使用静态工厂的优势 获取类对象的两种方式: 使用公有构造方法 静态工厂方法 1、介绍 有名称 不必每次调用时创建一个新对象 可以返回原类型的任何子类型对象 在创建参数化类型实例的时候,它们使代码变得简洁 2、优势详解 优势一:有名称 一个常见的例子,并发库中的Executors工具类。Executor的静态工厂方法有不同的名字,更能清晰...

a5678110的博客 152

一位海外开发者的 OpenSPG KAG 实践分享

KAG 是一个以创建和操作知识图谱为核心的框架。知识图谱是数据之间相互关联的可视化和结构化表示,对于搜索引擎、推荐系统和机器学习等应用至关重要。KAG 的目标是提供一个强大的平台,使开发者能够:轻松构建图谱;通过增强算法丰富数据;集成人工智能,以进行更精确的推理。通过理解 KAG,可以明显看出,这个框架旨在帮助从初学者到专业开发者,在项目中创造更优的解决方案。它在简便性和集成方面的优势,使其成为下一代基于数据的应用程序的前景工具。

金融机器智能社区 3405

Effective java 阅读感想及笔记

从事java两年多时间,但对于系统结构还是认为不是太懂,刚好同事推荐了这本《Effective java》,之前一直在忙没有整理,现阶段到明年,这边会系统整理好笔记,直到更新整本书,当然笔记中应该会出现错误,也请读者及时发现指正。

weixin_56542271的博客 134

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

DP接口详解:从主链路到AUX通道的完整解析(附常见问题排查)

本文深入解析DP接口的三大核心子系统:主链路的高速数据传输、AUX通道的智能协商以及HPD信号线的即时响应。详细介绍了DP接口的物理层设计要点、链路训练与均衡技术,并提供了常见故障排查指南,帮助工程师解决实际应用中的技术难题。

weixin_30790841的博客 462

从C#到Java(effective-java阅读笔记)

LearnEffectiveJava 介绍 学习EffectiveJava的项目 各个模块 staticinstance 静态方法创建对应的实例 iocbuilder 构造函数注入实现静态工厂、builder等 可以长期重复使用的对象,建议抽离出来作为静态对象 clearstack 对象自己管理内存的时候,需要手动消除对象的过期引用,请看这里 避免使用Finalizer以及Cl...

weixin_30614587的博客 95

数学向量空间的对偶空间解析

对偶空间是线性代数的"进阶语法",它不仅深化了我们对向量空间的理解,还为解决实际问题提供了强大工具。用生活类比解释对偶空间的核心概念,打破"抽象数学"的壁垒;建立对偶空间与原向量空间的直观联系,揭示"对偶"的本质;通过数学推导和代码实现,让读者掌握对偶空间的基本运算;展示对偶空间在科学和工程中的应用,体现其理论价值。范围:本文从有限维实向量空间入手(便于理解),逐步扩展到对偶基、双对偶空间,最后简要提及无限维空间的特殊性。

AI天才研究院 879

EffectiveJava阅读感想一

1. 遇到多个构造器考虑建造器 多个构造器,只有参数列表不同,应用起来会很不方便,容易混淆,参数过多,调用的时候可能并不知道如此多的参数具体代表什么含义。比如我们可能会有以下的代码片段: public class Test { public Test(String a, int b, boolean c, long d){} public Test(int a, int b,...

墨迹程序员 941

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

Rockyoung 3322

python实现马丁策略(股市) (附完整源码)

python实现马丁策略(股市) (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 603

EffectiveJava读书笔记01

本文为Effective Java中文版的读书笔记,可能部分术语听起来比较枯燥,但术语其实就是最精炼的总结,可以反复琢磨。 创建和销毁对象 0. 预备知识 API相关概念 Application Programming Interface,应用编程接口,不要同java的interface混淆。使用API编写程序的程序员被称为该API的用户user,在类的实现中使用该API的类被称为该API的客...

wjl31802的博客 581

构建.NET网站:VSCode还是Visual Studio?揭开开发工具的选择之谜

选择VSCode还是Visual Studio,归根结底是取决于你的具体需求和偏好。🔍 这两款工具各有千秋,都能为你的.NET网站开发提供强大的支持。希望这篇文章能够帮助你更全面地了解这两款工具,做出明智的选择。

墨夶的博客 787

阿里开发者们的第16个感悟:让阅读源码成为习惯

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34272308的博客 85

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

读书笔记系列--序

这段时间,在看 《Maven实战》 《Effective Java》 Spring 5.0 官方文档 《Effective Java》 《Effective Java》作为Java进阶必读书籍,也是这段时间主要看的书籍,以前看《Effective C++》,大概只看懂了一些,因为没做读书笔记也没有坚持做C++的项目,想在都有些忘了。 《Effective Java》坚持读书三遍,同时...

weixin_30507269的博客 112

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

《EffectiveJava》读后感(第2章创建和销毁对象 第2条)

遇到多个构造器参数时要考虑使用构建器(Builder设计模式) 静态工厂和构造器有个共同的局限性:它们都不能很好的扩展到大量的可选参数。考虑用一个表示包装食品外显示的营养成分标签。这些标签中有几个域是必须的:每份的含量、每罐的含量以及每份的卡路里,还有超过20个可选域:总脂肪量、饱和脂肪量、转化脂肪、胆固醇、钠等等。大多数产品在某几个可选域中都会有非零的值。 重叠构造器方式 一般创建构造器会使用重叠构造器的方式,即首先创建一个只有必要参数的构造器,然后第二个构造器有一个可选参数,第三个构造器有两个可选参数

weixin_44029138的博客 141

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

英文阅读技巧操练---Article 1:The Product-Minded Software Engineer《一》

前言: 转眼十一假期就这么匆匆而过了,如今对于自己来说【年纪不小了】长假就是回家看望父母的,一年到头也就五一、十一、春节三个大长假才有回家的决心【平常像端午这种小长假对于离家远的我来说基本不可能】,所以看望他们的机会也变得尤为珍贵,哪怕在外面打工遇到不顺心或者挣钱挣得少,家永远是最温馨的港湾。随着年纪越来越大,其回家的意义也变得越来越单纯,以前可能回家还想着看望一下三大姑四大姨,和村里一起长大的同学去哪哪玩玩之类的,如今基本就是以家为中心【老丈人家、自己家】,对于在外打工时间长的人应该都很容易引起共鸣,毕

webor2006的博客 562

《Effective Java》阅读笔记(三)

最近在看《Effective Java》这本书,顺便就记录一些笔记,记录一下书中的一些知识点以及对知识点的总结。一般情况会记录所有的知识点,但是知识点太过简单或者无归纳点总结的就不做详细记录。本片计划写第七、八、九章 七方法 快捷键 Markdown及扩展 表格 定义列表 代码块 脚注 目录 数学公式 UML 图 离线写博客 浏览器兼容 七、方法 本Markdown编辑器

lsmfeixiang的专栏 965

Effective Java 读书笔记

《Effective Java》的读书笔记,自学用的。http://www.jialing.net/minds/effectivejava.mm.html建议使用firefox浏览Powered by Freemind

Nomad & His Life 1101

《EffectiveJava》读后感(第2章创建和销毁对象 第1条)

考虑用静态工厂方法代替构造器 对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个共有的构造器。还有一种方法,类可以提供一个共有的静态方法,它只返回类的实例的静态方法。下面就是Boolean的简单示例。这个方法将boolean基本类型转换为Boolean对象: public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 注意:静态方法和设计模式中的工厂方法模式不同,这里的静态方

weixin_44029138的博客 183

EffectiveJava-Methods

最近在阅读《Java Concurrentcy in Practice》,这本书的作者全是java领域的专家,包括《Effective Java》的作者Joshua Bloch。关于Effective Java,作为java编码规范,里面常见的编码技巧应该是熟稔于心的。方法编写,摘录一二。 1 方法参数校验 这一点,是我刚入职时就已经形成的编码意识,防...

本博客纯属个人网络笔记,如对阁下有用,甚喜;否则,关掉即可,不喜勿喷。专心写代码,不做键盘侠! 1144

《EffectiveJava中文版》

目前为止看过最好的书之一 转载于:https://www.cnblogs.com/kaililikai/p/5858629.html

alexliu6711的博客 163

EffectiveJava - 出师之路

Github免费阅读链接 阿里巴巴开发者手册 文章目录Item 1: Consider static factory methods instead of constructors(考虑以静态工厂方法代替构造函数)Item 2: Consider a builder when faced with many constructor parameters(当构造函数有多个参数时,考虑改用构建器)Enforce the singleton property with a private constructor

littlewhitevg的博客 1149

静态工厂和建造者模式——EffectiveJava学习笔记

关于静态工厂 1.首先什么是静态工厂: 在类的内部写一个方法,通过这个方法来获得类的实例,而不是在主函数中通过new来获取实例。 如: public class Pizza{ int size; String name;l public static getPizza(int size , name){ Pizza pizza = new Pizza(); pizza.s...

qq_40160935的博客 313

适合Java老手阅读的书籍推荐:

它涵盖了Java并发编程的各个方面,并提供了丰富的实例和技巧,可以帮助你编写出高效、可靠的并发应用程序。为此,作者将Java编程的各个方面进行了详细的介绍和讲解,并提供了很多实际的代码示例和技巧,让读者能够深入理解并应用这些最佳实践。总之,《Effective Java》是一本非常优秀的Java编程书籍,它涵盖了Java语言的许多关键问题和最佳实践,对Java程序员来说是一本必读的书籍。类和接口:这一章节主要涉及到Java中的类和接口的使用,如何设计和实现它们,以及如何使用它们编写高质量的代码。

weixin_44798281的博客 1441

《Effective Java》阅读笔记(二)

最近在看《Effective Java》这本书,顺便就记录一些笔记,记录一下书中的一些知识点以及对知识点的总结。一般情况会记录所有的知识点,但是知识点太过简单或者无归纳点总结的就不做详细记录。

lsmfeixiang的专栏 701
上一篇: mysql给表字段追加值
下一篇: Redis 整数集合
SW_LCC
博客等级 码龄11年 4粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值