程序中非空检查或者类型检查应该放在什么地方合适? 5C

问个问题:调用一个方法传入参数,假如参数不允许为null,所以要对参数进行非空检查,那这个检查放在什么地方合适?放在被调用的方法里还是在调用之前进行检查,或者两个地方都进行检查?

0

11个回答

主要看个人习惯吧。我感觉还是方法里比较好,因为可能有其他人调用你写的方法而不检查参数。

1

我写C/C++都是放在函数里面检查
如果在传参进行判断,你每次调用的时候都得判断是否合法,代码冗余而且不整洁
我是这样理解的,传参数时都是认为是合法的,在函数处理的时候,这里是函数内部的模块,需要内部来维护自己的是否接收处理。
其实我们刚开始学一门语言的时候,总想知道一些标准的做法和答案,但实际中,都是自己一路写的过来,最后发现别人代码风格或者一些处理方式比较好
才自己修改过来的。

1

你永远都不知道调别人接口或别人传过来的参数是否为空,除非接口或所传字段有文字说明“不为空“”,否则你应该总是在你本身代码中做非空判断,当然
不判断也可以,如果你考虑到空会触发异常,你可以对你的代码进行异常捕获或异常抛出,以便发生异常后及时处理

1

放在方法里面,方法也是一个单独模块,保证方法逻辑的完整性,对于接受过来的数据,得当成陌生的数据去处理,而不是“我知道这个一定不会是空的”就不做判断,楼上有人说了,如果别人使用你的方法,人家不一样会在之前做校验,而且在你很久之后来修改你的代码,你也可能会忘记在调用和方法前先做校验

1

建议:在方法里检查参数,
1,null 可能也是参数的一种可能,可以有对应的返回;
2,可反馈给调用者信息,或抛错。

1

肯定是进方法之前做控制比较好,JVM的栈中的栈贞就是一个方法,每次执行一个方法都要消耗一定的资源,所以在进入一个新的方法之前做逻辑判断是最好的选择

0
hgq0916
hgq0916 进方法之前是指调用方法之前,还是在方法体最前面?
大约一年之前 回复

按我的理解,放在被调用的方法里面是比较好的,如果程序有多处地方调用你这个方法,难道每一次调用都要做判断吗,何不封装起来放在方法里面,提高方法的可用性,而且也有其他人调用你的方法可能考虑得不周全,没做判断导致程序出错

0

开发时方法的编写者和调用者可能不是同一个人,要这样想问题,在写方法时,要考虑到别人调用你的方法是否会出现问题,怎么解决,很显然在拿到null值时需要抛出异常,空指针异常不能抛,必须是受检查的异常,可以自定义一个异常
public void test(String s) throws MessageException/*自定义异常*/ {
try {
s.replaceAll("","");
} catch(NullPointerException e) {
//捕获空指针异常,抛出自定义异常
throw new MessageException("s不能为null!");
}
}
,当然,小程序不需要太规范可以直接抛出Exception,比如Class类的forname方法抛出ClassNotFoundException,需要调用者自行处理;
在调用方法时,要把方法当成别人写的,你只知道方法名、参数列表,抛出的异常,返回值类型,以及它的功能,就像使用jdk的方法一样,看得懂它的API一样,那么,这个方法抛出了受检查的异常,调用时需要捕获它,在try中写程序正常运行的分支,在catch中写非正常也就是null时的处理。
最后回到这个问题,方法的参数是否为null未知,这就又多了一方,至少有三个人参与,调用方法的一方如果只想程序往正常分支走,可以在调用方法前进行非空判断。

0

参数检查还是自己做,一场可以抛给调用者处理

0

关于这点,你可以多看些jdk的源码,比如下面这段

public final SelectionKey register(Selector sel, int ops,
Object att)
throws ClosedChannelException
{
synchronized (regLock) {
if (!isOpen())
throw new ClosedChannelException();
if ((ops & ~validOps()) != 0)
throw new IllegalArgumentException();
if (blocking)
throw new IllegalBlockingModeException();
SelectionKey k = findKey(sel);
if (k != null) {
k.interestOps(ops);
k.attach(att);
}
.......


jdk有很多类似的代码,在函数开始的时候,会对对象的状态、函数参数进行一些检查,因为这些可能导致业务的异常,所以在函数开始的时候进行检查并适当的抛出异常或者进行其他赋值操作等,用于保证下面的业务正常进行
希望回答能帮到你

0
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
4.SQL语句之二维表创建以及主键约束、非空约束、检查约束、唯一约束、外键约束
二维表创建 创建表  使用create table 表名(字段名 类型,字段名 类型,...)数据类型:     number类型(数值类型)         整数类型 number(a)  总长度为a         浮点数类型 number(a,b)  总长度为a,小数长度为b,小数位可以不写     varchar2类型(字符类型)         varchar2(ln)   ln表示字...
Oracle约束:非空约束、主键约束、外键约束、唯一约束和检查约束
一、非空约束(只能在列级设置,不能在表级设置) 1、在创建表时设置非空约束 CREATE TABLE table_name( column_name datatype NOT NULL,…… );     2、在修改表时添加非空约束 ALTER TABLE table_name MODIFY column_name datatype NOT NULL;       3、在修...
小程序问题:未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
在新建项目时碰到如下问题: 解决方法: 在创建项目->添加项目时选择的项目目录的文件夹下不能有次级文件夹,如果有次级文件夹 即便是空文件,也会报如上的错误,在选择项目时,应该把程序项目中的顶级文件夹作为项目目录。
SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束
什么是约束? 数据库—由若干张数据表组成(理解为一个类库) 数据表—由行和列组成的一个二维数组(理解为一个类) 列—字段(理解为表中对象的一个属性) 行—理解为表中的一个对象 约束是数据库中保证数据完整性的方法 1.实体完整性 例如:每个表中有一个必须要指定的字段 2.区域完整性 针对表中的某个字段进行特殊化限制 3.参照完整性 表与表之间的一种特殊化关联限制 约束类型(6): 1.主键约束(PR...
鸭子类型(duck typing)
鸭子类型(duck typing)在程序设计中,鸭子类型(duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由 James Whitcomb Riley 提出的鸭子测试,“鸭子测试”可以这样表述:   当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被...
变量定义在哪里好?什么时候该定义为成员变量?
 
mpvue编译时出现 “未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。”错误
修改根目录project.config.json文件的miniprogramRoot属性值。改为dist/wx/,,也就是build后的路径
优雅地实现入参非空判断
空参判断可以设计一个方法类,无论多少参数,参数类型如何,都能对入参进行判断,就能使入参非空校验变得优雅。 利用动态参数、类型判断来操作
微信小游戏 :未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
首先提示的是,之前我已经有开发小程序的经验了 ·最近,觉得无聊所以想接触一下小游戏的开发,毕竟两者太过相近 ·但是我发现,网上找了个小游戏项目导入,并且更改了自己的appID ·竟赫然的报错 "未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译
约束:确保数据的完整性(主键,唯一,检查,默认,非空,外键)
问题: 建立约束代码: --建表 use StudentManager--指定 if exists (select *from sysobjects where name='tbl+student')--判断 drop table tbl_student--有就删除之后创建,没有就创建 create table tbl_student ( id int identity (1,1)
Spring AOP实战开发(一) springmvc参数非空检查
本系列将为大家介绍笔者在开发过程中使用aop的一些功能扩展,有从网上看到的,也有自己想的,如果有相似的代码,敬请海涵。 本章将介绍如果通过AOP来对请求的参数进行自动的非空检查并返回。相信部分同学的代码中会出现如下的例子: if (parameters.get("openId") == null || StringUtils.isBlank(param...
java编程里的非空判断
在java的编程里非空判断少不了,比如最常用的,在方法里,判断参数有效性: 1、public String  method(String a, Integer b){          // 1.            if(a == null) {              return null;           }         // 2.         if (a==...
StringUtils检查字符串是否空或是null
package com.test;import org.apache.commons.lang.StringUtils;public class Test {public static void main(String[] args) {//检查字符串是否为空或是null System.out.println("isEmpty:"+StringUtils.isEmpty(null));//判断字符
NC 元数据增加扩展字段 报错“没有定义查询所有pk的接口或者定义不规范,请检查”
报该错的问题有多种,具体什么原因还跟代码看异常信息是什么。 业务场景:在NC预置单据上增加扩展字段,使用工具UAP6.5。 操作步骤: 1,将modules下对应的bmf文件备份后删除,然后在UAP中重新导入模型文件。 2,对模型文件进行字段添加,保存 发布元数据。 3,修改对应的VO类文件,追加新增字段属性及对应的get set方法。 直接在UAP里发布元数据和在NC客户端选中bmf文件升级是...
MySQL学习笔记:非空约束、默认约束
** 1. --非空约束 ** –修饰的字段不能为空 NULL create table user6( id int, name varchar(20) not null ); +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra ...
编译原理(四)类型检查2
描述类型系统的语言 类型系统主要用来说明编程语言的定型规则,它独立于类型检查算法定义一个类型系统,一种重要的设计目标是存在有效的类型检查算法类型系统的基本概念可用于各类语言,包括函数式语言、命令式语言和并行语言等 我们后面讨论用形式方法来描述类型系统 类型系统的形式化 类型系统是一种逻辑系统  有关自然数的逻辑系统 自然数表达式(需要定义它的语法) a+b,3 良形公式(逻辑断
未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
在网上下载的mpvue项目,用微信开发者工具打开时,报错如下图所示: 解决办法为: 1. 打开文件project.config.json,找到miniprogramRoot 如下图: 2. 改变根目录 "miniprogramRoot": "./dist" 改为: "miniprogramRoot": "./dist/wx/" 再重新编译,就OK!...
检查表单是否为空或者是空格
无标题文档 <!-- function checkaddform() { if(checkspace(document.form1.xingming.value)) { document.form1.xingming.focus(); alert("对不起,请填写姓名!"); return false; } } function checkspace(checkstr)
Oracle中定义常用约束对象的命令
非空约束 唯一性约束 主键约束 外键约束 检查约束
非空检查的问题
我建立了一个数据窗口,有两个字段:bmno和bmmc.我想在增加或者修改记录的时候不能让它们为空,于是在数据窗口的column specification的属性中相应字段的valadition设置为:not isnull(gettext()),valadition message设置为'不能为空',可是在运行的时候当上述字段为空的时候还是能通过啊.请教各位高手应该怎么设置呢?rn我把如下这段代码加到itemchanged和rowfocuschanged事件里面,均能通过编译,但是达不到效果.请问是为什么啊?rnif dw_1.getitemstring(row,1)='' thenrn messagebox('','')rn return 1rnend ifrn我对getitemstring()的理解是:row表示当前行,1表示第一列,所以焦点离开当前行第一列的时候触发事件.可是没有.
input非空检查
[code=VBScrip rn 悬赏科技rn rn rnrnrnrnrnrn rn rn <%rn rn if (request("xuanshang_id")<>"") thenrn rn xuanshang_id=request("xuanshang_id")rn response.Write(bianji_id)rn end ifrn strquery = "select * from shangjinkexuejia where cs_id='"&xuanshang_id&"' "rn set rsa = conn.execute(strquery)rn if rsa.bof and rsa.eof thenrn response.Write"没有记录"rn elsern cs_biaoti=rsa("cs_biaoti")rn cs_biaoti = Replace(cs_biaoti,"<", "<")rn cs_biaoti = Replace(cs_biaoti,">", ">")rn rn yuanbao=rsa("cs_yuanbao")rn rn rn zongfenlei=rsa("cs_zongfenlei")rn zongfenlei = Replace(zongfenlei,"<", "<")rn zongfenlei = Replace(zongfenlei,">", ">")rn rn cifenlei=rsa("cs_cifenlei")rn rn rn email=rsa("cs_email") rn email = Replace(email,"<", "<")rn email = Replace(email,">", ">")rn rn wenti=rsa("cs_wenti") rn wenti = Replace(wenti,"<", "<")rn wenti = Replace(wenti,">", ">")rn rn nicheng=rsa("cs_nicheng")rn nicheng = Replace(nicheng,"<", "<")rn nicheng = Replace(nicheng,">", ">")rn rn rn %>rn rn rn rn 标题rn 悬赏元宝rn 总分类rn 次分类rn emailrn rn rn  <%=cs_biaoti%>rn  <%=yuanbao%>rn  <%=zongfenlei%>rn  <%=cifenlei%>rn  <%=email%>rn rn rn rn rn rn rn rn rn rn width="80" height="80"> <%=nicheng%> rn <%=wenti%> rn rn rn rn rn rnrn rn <%rnsql="select * from xuanshanghuifu where h_xuanshang_id= '"&xuanshang_id&"'"rnset rs = conn.execute(sql)rnIf rs.Eof And rs.Bof Thenrn%>rn rnrn <%rnresponse.write "没有回复"&" "rnelsern'while (not rs.eof)rnn=rs.recordcountrndim array()rnredim array(n)rnif not rs.eof thenrn%>rn rn rn rn rn rn rn rn rn rn rn <% rn rn 'for i=1 to nrn %>rn <%rn huifu = rs("h_huifu")rn huifu = Replace(huifu,"<", "<")rn huifu = Replace(huifu,">", ">")rn huifu = Replace(huifu,"\n","<br>")rn rn huifu = Replace(huifu,CHR(10), " ")rn huifu = Replace(huifu,CHR(32), " ") rn huifu = Replace(huifu," ", " ") rn %>rn rn width="80" height="80"> rn rn <%=rs("h_nicheng")%> rn <%=huifu%>rn rn rn rn rn rn <%=i%>rn 元宝rn rn rn value="0" rn readonly="true"rn title="不能付费给自己" rn rn <% end if%> \>rn rn rn rn rn rn <% rn rn 'rs.MoveNextrn 'nextrn rn %>rn rn rn rn rnrn rn rnrn rn rn rn rn rn<%rnend ifrnrs.ClosernSet rs = NothingrnSet objPage = Nothingrn%>rn rn rn rn rn rn rn <%rn rsa.close rn set rsa = nothingrn %>rn <%end if%>rn <%end if%>rn rn rn回复(200字)rn rn rn rn rn rn rn rn 回复rn rn rn rn rn rn rn rn rnrnrn rn rn rn rnrnrn rn rnrnrn rnrnt][/code]
Java编程中的非空校验
在工作时发现封装的一个简单的非空校验逻方法,大致包括了几个常见的数据类型的校验。 记录如下: &amp;amp;amp;quot;&amp;amp;amp;quot;&amp;amp;amp;quot;Java public static boolean isAnyoneEmpty(Object obj) { if(obj==null) { return obj==null; } else if(obj instanceof Collection&amp;amp;amp;a
MySQL约束:非空约束、主键约束、唯一约束、默认约束、外键约束
保证记录的唯一性 约束分为表级约束和列级约束 约束类型按功能包括有:非空约束、主键约束、唯一约束、默认约束、外键约束、 【自动编号】AUTO_INCREMENT 起始值为1,增量为1。 自动编号的字段必须为数值型,若为浮点数小数位数必须为0。 自动编号必须和主键组合使用,而主键不一定和AUTO_INCREMENT一起使用。 【主键约束】PRIMARY KEY 每张数据表只能
未找到入口app.json文件,或者文件读取失败,请检查后重新编译
mpvue项目显示“未找到入口app.json文件,或者文件读取失败,请检查后重新编译." 项目报错如图: 解决: 1、查看打包后的文件下dist目录下是否有二级目录文件wx。如果有,执行第二步。 2、在 project.config.json 文件中添加属性 "miniprogramRoot": "dist/wx/" 3、然后npm run dev. 来源:https...
ExitWindowsEx放在什么地方合适
为了保证我的程序退出的时候要关闭计算机,我将ExitWindowsEx放在CMainFrame::OnClose(),可以正常关机,不过,会经常弹出内存错误的提示,我跟踪后发现是在CView的析构时,释放一个com组件时报的错误,不知道,在关机的时候是否释放com组件会有问题吗?而且这个错误也不是经常出现,偶尔出现,不过频率挺高的,希望大家能帮我解答一下这个问题,不知道我是否描述清楚了
未找到入口文件,或者文件读取失败,请检查后重新编译。 pages/contact/contact 出现脚本错误或者未正确调用 Page()。
微信小程序 未找到入口文件,或者文件读取失败,请检查后重新编译。 pages/contact/contact 出现脚本错误或者未正确调用 Page()。
phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的
phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码, C:\wamp\alias 你要在本地访问还是远程访问? 需要修改phpmyadmin的配置文件,让其连接到MySQL数据库,用记事本打开 config.inc.php 文件,查找下面几个部分并修改$cfg['Servers'][$i]['host'] = 'localhos
java 判断非空
后台:String type = request.getParameter(&quot;type&quot;); if(!type.equals(&quot;add&quot;)) { } if(!StringUtil.isNullString(ste_createTime) &amp;amp;&amp;amp; !StringUtil.isNullString(lte_createTime)){             sql.append(&quot;a...
编译器对代码的检查
1.C++是静态语言,在编译阶段进行错误检查,对于动态语言来说,他们在执行阶段进行错误检查。对于编译器的检查主要包含三个方面: 语法检查 类型检查 声明检查 2.当然对于编程过程中的各类BUG,编译器不能检查功能性BUG,进行判断算法的正确与否,但可以对代码形式进行检查。但编译器并不是所有的错误都能检查,需要程序员自己在写代码的过程中利用经验,避免一些编译器无法检查出来的错误,但对程序的执
Java的非空处理
导语 我之前太年轻,经常在项目中做很多if/else的空值判断,现在回想之前写的代码感觉像是一坨屎,现在写起来虽然好点,最后还是变成了另一坨屎,会让人觉得很不优雅。这些虽然跟业务逻辑没有多大关系,但就是会让你很头疼。有时候在进行接口对接的时候,要是忘记非空判断就会抛出空指针异常。下面结合几位大佬的结晶,总结梳理一下: 业务中的空值 场景 存在一个UserSearchService用...
采集程序应该放在什么地方?
最近 在自己的机器上写了一个采集程序,还做了一个网站,采集程序把数据采集到数据库里,rn网站从数据库把数据读出来显示到页面上。这些都是在我的机器上做的。rnrn最近买了服务器,把网站的程序上传到服务器了,就是采集程序放在哪里不知道,rn是放在服务器上么?还是放在我的机器上?
产品上线质量评估
产品上线时,应该检查的内容 产品上线时,应该检查的内容
js 完整的非空判断
function isNull(val){ if(val==undefined||val==null||val.toLowerCase()=="null"||val==""||val.replace(/(^s*)|(s*$)/g, "").length ==0) return true; return false; } function getNullStr(val)
Java串口通信程序
Java串口通信程序 对于JVM来说,要正确的识别串口,将这几个文件放在系统中合适的位置使很重要的。 comm..jar应该放在以下目录中 %JAVA_HOME%/lib %JAVA_HOME%/jre/lib/ext win32com.dll应该放在以下目录中
jQuery基础
第一章:JavaScript基础 1.组成 1.ECMAScript 2.BOM 3.DOM 2.在网页中引用JavaScript的方式 1.内部JavaScript文件 2.使用外部JavaScript文件 3.直接在HTML标签中 3.JvaScript核心语法 1.变量的声明和赋值 语法: var 合法的变量名 2.数据类型 undefined(未定义类型) null(空类型) ...
权限检查ABAP
AT SELECTION-SCREEN.   IF SSCRFIELDS-UCOMM = 'ONLI'.     PERFORM AUTHORITY_CHECK.   ENDIF. FORM AUTHORITY_CHECK .   DATA:LT_TVKO LIKE TABLE OF TVKO WITH HEADER LINE.   AUTHORITY-CHECK OB
类型检查
<span style="color:#333333;">做为WEB攻城师必备技术JavaScript,本课程主要讲解JS高级编程中的面向对象、原型、闭包、上下文、作用域、继承等知识点</span>
JAVA 笔记(四) RTTI - 运行时类型检查
运行时类型检查,即Run-time Type Identification。这是Java语言里一个很强大的机制,那么它到底给我们的程序带来了什么样的好处呢? 在了解运行时类型检查之前,我们要首先知道另一个密切相关的概念,即运行时类型信息(Run-time Information - 也可以缩写为RTTI) 运行时类型信息使得你可以在程序运行时发现和使用类型信息。 来自:《Thinking i
类型检查
js 类型检查 js中有5中基本数据类型,分别是: Undefined,Null,Boolean,Number,String 还有一种复杂数据类型: Object ECMAScript是松散类型的,所以使用以上6种数据类型,就可以表示所有数据。那么,如何检测变量的数据类型呢。 下面就介绍几种在业务代码中,常用的几种常用类型检查方法...
java泛型——编译期类型检查的范围
这两天在对比着看《java编程思想》和《Effective JAVA》(第二版)中关于泛型的问题,对里面涉及到的一个泛型转换例子感觉很费解,如下: interface UnaryFunction&amp;amp;lt;T&amp;amp;gt;{ T apply(T arg); } public class MyTestJob{&amp;amp;gt;{ private int i = 1; private sta...