为什么java需要静态类_java – 为什么OOP中静态类的最佳实践有所不同?

我目前正在阅读有关

Java最佳实践的内容,我发现根据

this book,我们必须支持非静态的静态类.我记得在C#最佳实践中,我们必须根据Dennis Doomen的C#3.0,4.0和5.0编码指南来避免这种情况:

AV1008 – Avoid static classes

With the exception of extension method containers static classes very often lead to badly designed code. They are also very difficult,if not impossible,to test in isolation unless you’re willing to use some very hacky tools. Note If you really need that static class,mark it as static so that the compiler can prevent instance members and instantiating your class. This relieves you of creating an explicit private constructor.

我在C# answer和Java answer中找到了这两个用于避免静态类的时间,但仅仅是出于好奇 – C#和Java都是OOP语言,为什么它与最佳实践完全不同呢?

更新:

我不能从Java书中复制这么多页面,但底线是:

If you declare a member class that does not require access to an

enclosing

instance,always put the static modifier in its declaration,making it a static

rather than a nonstatic member class. If you omit this modifier,each instance will

have an extraneous reference to its enclosing instance. Storing this reference costs

time and space,and can result in the enclosing instance being retained when it

would otherwise be eligible for garbage collection (Item 6). And should you ever

need to allocate an instance without an enclosing instance,you’ll be unable to do

so,as nonstatic member class instances are required to have an enclosing instance.

A common use of private static member classes is to represent components of

the object represented by their enclosing class.

它只是关于性能吗?

请注意,这个问题更多的是关于静态类和OOP,而不是Java和C#之间的差异.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光电转换模块_光模块:PIN光电二极管和APD光电二极管

在前面的文章中我们介绍了光模块的基本结构,包括TOSA、ROSA以及BOSA。今天我们接着介绍ROSA光器件的光电探测器。光模块接收端能正确识别信号并完成光电转换,就需要光电探测器,光电探测器通过检测出照射在其上面的光功率,从而并完…

java如何添加自定义的图片_java代码将图片加上自定义水印 -4

java代码将图片加上自定义水印,然后生成了新的图片import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import javax.image…

vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句

分享成果,随喜真能量。大家好,今天继续和大家分享VBA编程中常用的过程代码。过程代码在这里讲解的语句非常简单单一,简单的语句组合起来就是一个复杂的过程,我们要认真掌握这些简单的过程,为我们复杂的工程服务。这也是…

分别对时分秒加减的java_Java中关于获取时间(日期)的总结大全

文章目录1.相关类1.1 java.util.Date1.2 java.text.DateFormat(抽象类)1.3 java.text.SimpleDateFormat(DateFormat的直接子类)1.4 java.util.Calendar(抽象类)2.示例2.1 日期取值2.1.1 获取当前系统时间(毫秒数)2.2 日期转换2.2.1 日期转字符串、字符串转日期2.2.2 将日期转换…

python仪表指针识别_一种指针式仪表的识别方法

一种指针式仪表的识别方法杨世杰,张平【摘要】当前指针式仪表识别技术日益成熟,其中指针形状和位置的识别大多采用Hough变换算法,传统的Hough变换算法运算时间长、储存空间大,使得识别过程效率低下。针对以上缺点,提出…

树莓派python编程读取电压_《树莓派Python编程指南》——3.2 在结构体中存储值-阿里云开发者社区...

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第3章,第3.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。3.2 在结构体中存储值除了简单数据类型,Python还允许我们将数据用不同…

java上传csv错误信息_java处理csv文件上传示例详解

前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理。ReadCsvUtil工具类package com.hanfengyeqiao.gjb.utils;import java.io.*;import java.util.*;/*** csv工具类*/public cla…

Java 数据库进度条_java进度条

练习JProgressBar结合Timer使用。代码如下:package luojing;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Timer;import java.util.TimerTask;public class NewClass{static JProgressBar jpb null;static JButton jb null;…

暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀

前言DURGOD杜伽的机械键盘一直以简约的外形和优秀的手感而备受好评。笔者之前用过杜伽的K310、K320两个系列的多把键盘,对其非常熟悉,外形简约大方,手感、灯效也比较满意。正因如此,这次刚刚入手了一把杜伽K310 RGB樱桃红轴&#…

vim 显示行号_Vim给文件加行号,这通惊为天人的操作没sei了!文末天书慎点

引言一般 Vim 使用 :set number 命令,在编辑器显示行号。本文展示了如何将行号插入到正文中,或者只插入到段落中。此外,还提供了打印行号的选项(Vim 可以打印带有数字的行,并且不需要文件有数字)。Vim可以使用 :s 命令在每行之前插…

java 获取对象方法有哪些方法有哪些方法有哪些_Java中创建String 对象的方法有哪些...

Java中创建String 对象的方法有哪些发布时间:2020-11-25 16:45:30来源:亿速云阅读:71作者:Leah这篇文章将为大家详细讲解有关Java中创建String 对象的方法有哪些,文章内容质量较高,因此小编分享给大家做个参…

bvp解算器是什么_对数小史,以及为什么ln x的导数是1/x

为什么 lnx 求导是 1/x?​www.zhihu.com现代的数学体系——包括一般的高中和大学教学,一般都将“对数函数”定义为“指数函数”的反函数。不过,鲜为人知的是,在数学史上,“对数”这个概念反而比“指数”出现的更早&…

supermap iserver java 6r许可_SuperMap iserver Java 6R 在 linux 上安装和配置 | 学步园

一.安装JDK1.进入到放置JDK目录下输入命令:./jdk-6u14-linux-i586.bin 开始安装jdk ,安装的时候会让你输入yes(如果提示你权限不够的话 可以输入命令:chmod 755 jdk-6u14-linux-i586.bin 改变权限)2.配置java运行环境 这里我采用的是编写一个…

vb中怎么使图片适应框的大小_叮!VB考前练习了解一下?

1、Visual Basic窗体设计器的主要功能是(C )。A) 画图B) 编写源程序代码C) 建立用户界面D) 显示文字解析:Visual Basic窗体设计器简称窗体(Form),是应用程序最终面向用户的窗口,它对应于应用程序的运行结果。各种图形、图像、数据等都是…

苹果切换输入法_日语输入法哪个好

在初学日语的时候经常会遇到一些不认识的词,想查一下这个词是什么意思,应该怎么输入呢?尝试过许多软件之后,テツ为大家总结了一些认为比较好用的输入法百度IME输入法。下载安装后的切换非常简单,在右下角输入法处切换至JP日语即可…

开源社交系统java_JAVA 开源 SNS 社交系统 JEESNS V0.8 发布

JAVA 开源 SNS 社交系统 JEESNS V0.8 发布2017.02.17 JEESNS V0.8升级说明后台界面全新升级后台增加微博搜索功能增加了会员操作日志、会员动态微博、微博评论增加会员功能群组帖子增加置顶、精华功能限制微博输入内如字数、输入内容时字数统计微博增加Emoji表情增加微博、文章…

python 10个100以内随机整数编辑_你要偷偷的学Python,然后惊呆所有人(第五天) - python阿喵

标题无意冒犯,就是觉得这个广告挺好玩的前言前期回顾:你要偷偷学Python,然后惊呆所有人(第四天)在第四天的时候,我们接触了Python的模块调用,这也是Python能够火起来的一大优势。我们还实践了csv模块。不过冷静下来想想…

广义线性模型_广义线性模型(第六章补充)

上一篇文章(第六章)主要介绍了最大熵模型,并从中推导出逻辑斯谛回归,感觉意犹未尽。在复习了CS229 Lecture note之后,我决定重新整理思路:从广义线性模型的角度来看逻辑斯谛回归。最后,基于样本…

安卓开发怎么调用photopicker_谷歌出手整顿安卓应用程序乱象:无良权限的APP们再见了!...

相信你在使用安卓手机的时候一定有过这样的经历,在明确拒绝了软件调用电话、手机通讯录、短信等敏感内容的访问权后,APP表示无法继续运行然后强退。如果这款APP不具备可替代性,恐怕最终结果是,用户不得不选择妥协。关于应用程序度…

react router官方文档_阿里开源可插拔 React 跨端框架 UmiJS

点击上方“开发者技术前线”,选择“星标”18:30 在看 真爱作者:Tamic | 编辑: 可可阿里之前开源:阿里闲鱼开源 Flutter 应用框架 Fish Redux! 今天介绍的是前端React 框架- UmiJS。介绍umi官方宣称是一个…