五大原则让你的代码不再受bug的困扰

牢记以下五项基本原则,能够帮助大家尽可能减少代码中的bug



  Java编程语言的人气自然无需质疑,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能。



  不过在编写代码时,bug永远是困扰每一位从业者的头号难题。本文我们将分享五项java编程基本元原则帮助大家尽可能减少代码中的bug,希望大家能轻松地减少Java开发中的bug数量。



  原则一:不要依赖初始化



  在Java中,开发者常常依赖构造函数进行对象初始化。不过这其实是一种常见误区。我们完全可以在无需调用构造函数的情况下,通过多种方式实现对象分配。



  下面来看几种常用方式:



  (1) 大家可以将所有变量声明为私有。要访问该类外的对象,大家可使用GETSET方法。



  (2) 对每个对象,编写一个新的私有boolean变量并对其进行初始化。



  (3)编写一个非构造函数类,其将确保每个对象会在接受调用之前进行初始化。



  原则二:保护类、方法与变量



  在代码当中,类、方法与变量分为私有与公共两类。私有类无法轻松进行访问,这使其成为代码中的高安全性点。不过公共方法与变量则易于方法,也因此常常成为攻击突破口。因此,请尽可能限制其范围。



  请记住,只在必要时开放类、方法与变量。



  原则三:永远对范围进行预定义



  大多数开发者完全依赖于软件包自身的范围设定,事实上我们应当坚持对代码范围进行预定义。很多类本身并非完全封闭,这意味着攻击者能够对其施以攻击。黑客可以利用单一漏洞插入自己的类,进而从代码中提取敏感信息。JVM在默认情况下即不会封闭,不过允许大家在该软件包内进行类封闭。



  原则四:避免使用内部类



  一般来讲,开发者会在同一软件包内其它类需要时使用内部类。这些内部类通常可供同一软件包内全部类进行访问,由此可能引发的问题在预定义代码范围部分已经提到。因此,同样请仅在必要时使用内部类。



  原则五:确保类不可克隆



  Java提供一项功能,用于在需要时对自有类进行克隆。然而这项功能往往被黑客所利用,其能够使用java.lang.Cloneable从代码中复制代码实例并窃取必要信息。



  要解决这个问题,大家只需要在代码中的每个类中添加以下代码。

  public final void clone()throws 



  java.lang.CloneNotSupportedException { 



  thrownewjava.lang.CloneNotSupportedException(); 



  }

  如果大家希望自己的class具备可克隆性,同时仍然尽可能避免安全问题,那么则可自行定义克隆方法,并将其设置为final



  如果大家在自己的某个超类中使用了nonfinal克隆方法,则请按以下方式定义该方法:

  public final void clone() 



  throwsjava.lang.CloneNotSupportedException { 



  super.clone(); }

  当然,没人能100%掌握Java的全部奥秘,但关注上述编程原则及实践,能够帮助大家更为有效地降低代码内bug数量。

 

WEB前端学习交流群21 598399936

 

转载于:https://www.cnblogs.com/luludehuhuan/p/6269223.html

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

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

相关文章

数学建模matlab画图操作大全

数学建模matlab画图操作大全 1.画图及一些基本设置 clear%清空工作区 clc%清空命令行窗口 close all%关闭所有图窗 x-40:0.1:40 f(x) x.^2-110;%函数句柄 x0fzero(f,15)%找15附近的零点 x0fminsearch(f,-11)%找-11附近的最小值%% 画图及其基本操作 %画图,默认格式…

oracle wd2go 转_WD2go的作用是()。

WD2go的作用是()。更多相关问题[单选] 电瓶有两级,分别用“”、“—”表示,“”代表()级。[问答题,简答题] 电容器的可分为哪几类?有哪些选用原则?[问答题,简答题] 295B、WK—4、WK—10电铲回转托辊数目?结构不同&…

python语言的产生_Python生成器是什么(超级详细)

之前我们讨论了高效的推导式。通过推导式,我们可以直接创建一个列表、字典或集合。但是,由于受到内存的限制,这些可迭代对象(列表、字典或集合)的容量是有限的。 比如,创建一个包含 10 万个元素的列表&…

俄罗斯“木船”机器人系统将于2020年部署部队

来源:国防科技要闻据悉,俄罗斯地面部队已完成“木船”(Kungas)机器人系统样机的国家试验,将于2020年开始部署部队,用于作战试验。发展背景自2010年以来,俄罗斯机器人系统进入快速发展时期。2014…

Oracle优化笔记

2016-11-22子查询:标量子查询 内联视图(in-line view) 半连接/反连接标量子查询 select 后跟子查询 类似自定义函数 可用开窗函数之类的改写内联视图(in-line view) from 后跟子查询 类似设计View 子查询套子查询是垃圾…

线程停止继续_晓龙吊打面试官系列: 如何优雅的停止一个线程

一、什么时候我们需要中断一个线程在实际的开发中,有很多场景需要我们中断一个正在运行的线程,就比如:当我们使用抢票软件时,其中某一个通道已经抢到了火车票,这个时候我们就需要通知其他线程停止工作。当我们希望在一…

数模写作必备利器—latex

数模写作技巧——用latex排版写作 视频地址在我自己的b站 https://www.bilibili.com/video/BV1Pp4y1e7fU/ 数模写作培训

hive读取hdfs存放文件_数据获取层之Flume快速入门(一) 实时监控单个追加文件

实时监控 Hive 日志,并上传到 HDFS 中实现步骤1、Flume 要想将数据输出到 HDFS,必须持有 Hadoop 相关 jar 包commons-configuration-1.6.jar、hadoop-auth-2.7.2.jar、hadoop-common-2.7.2.jar、hadoop-hdfs-2.7.2.jar、commons-io-2.4.jar、htrace-core…

2019-2020中国趋势报告,203页PPT解读16大机会

来源:企鹅智库 报告如下未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联…

242.判断一个字符串是否为另一个的乱序 Valid Anagram

错误1"aa""bb"static public bool IsAnagram(string s, string t) { int sLength s.Length; int tLength t.Length; if (sLength ! tLength) { return false; } char c ; int value 0; Dictionary<char, int> d new Dictionary<char, int&g…

行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)

前言如果你使用集成环境开发。那么你点击编译按钮就可生成可执行文件。但是C程序从源代码到二进制行程序都经历了那些过程&#xff1f;你知道吗&#xff1f;这些过程集成开发环境在点击编译按钮后都做完了&#xff0c;如果编译没有出错&#xff0c;即可生成可执行文件。本文将以…

树莓派装系统,配置,换源,远程操控

一、树莓派装系统&#xff0c;配置&#xff0c;换源&#xff0c;远程操控 1.装系统 省略 2.各种协议的使能&#xff0c;配置 参考树莓派教程文档 3.换源 3.1系统更新源的更换 sudo nano /etc/apt/sources.list #注释掉原始国外源&#xff0c;即原始文件第一行的代码 #添加…

sqlite查询乘以某列如果是null就换成_大数据之Hive group by with cube/rollup分组查询...

group bysql 查询时&#xff0c;我们常将聚合函数和group by 结合起来对某一个或多个字段进行分组查询&#xff0c;例如&#xff1a;select addcode,count(distinct sbtid)uv from tb_hive_window group by addcode;---------------| addcode | uv |---------------| 0002 …

Windows下MYSQL的安装与配置

配置&#xff1a; 1. 安装MySQL服务 cmd(管理员模式)下切换到MySQL的bin目录&#xff0c;运行 mysqld install 2. 输入 net start mysql 启动服务 3. 输入 mysql -uroot -p 进入&#xff0c;默认无密码 4. 设置密码 mysqladmin -uroot -p 新密码 &#xff08;会提示输入密码&am…

可以操作excel吗_Excel快速填充,这四种方法你会吗?操作逆天告别加班

在Excel的表格制作中&#xff0c;仅仅会复制粘贴可是不够的&#xff0c;还需要掌握更多的技能&#xff0c;来提升我们的工作效率&#xff01;我们在进行Excel报表制作的时候&#xff0c;如果要批量填充序号&#xff0c;有多少种方法呢&#xff1f;下面给大家简单介绍一下这四种…

我的一个树莓派小车项目

如何使用该程序进行开发 1.寻找串口 查看识别串口号 ls -l /dev/tty*找到相应的串口并在程序里修改 ser serial.Serial("/dev/ttyUSB0",9600)2.摄像头 括号里是0还是1取决于摄像头是内部还是外部 不确定的话就挨着尝试&#xff0c;反正就是二选一嘛 #视频捕获…

2G---5G与未来天线技术

本文来源&#xff1a;滤波器过去二十年&#xff0c;我们见证了移动通信从1G到4G LTE的转变。在这期间&#xff0c;通信的关键技术在发生变化&#xff0c;处理的信息量成倍增长。而天线&#xff0c;是实现这一跨越式提升不可或缺的组件。按照业界的定义&#xff0c;天线是一种变…

python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件

前言 本教程学习在Python中使用CSV文件。CSV&#xff08;逗号分隔值&#xff09;格式是在电子表格和数据库中使用的非常流行的导入和导出格式。Python语言包含该模块&#xff0c;该模块具有用于读取和写入CSV格式的数据的类。csv 使用csv.reader&#xff08;&#xff09;读取CS…

leancloud的技术面试指南

面试流程 通常我们的面试分为一次电话面试和一次现场面试。在少数难以决定的时候会多增加一轮电话或现场面试。 面试中的沟通问题 尊重候选人&#xff0c;平等交流&#xff1a;让候选人自我介绍前&#xff0c;先介绍自己和公司&#xff1b;交流的时候双方处于平等的地位&#x…

基于STM32的高精度频率计设计

前言 本文记录了博主完成的一个课设作品&#xff08;学分为3.5分&#xff09;&#xff0c;题目需要利用ARM做出一个高精度频率计。具体要求如下&#xff1a; 1&#xff09;实现对10M以内数字信号频率的高精度测量&#xff0c;频率测量误差不大于0.01%&#xff1b; 2&#xff0…