java中的switch的规则_细细讲述Java技术开发的那些不为人知的规则

8fdd2e6ac58eeb63b00b0976a8c82595.png

本文介绍的Java规则的说明分为3个主要级别,中级是平时开发用的比较多的级别,在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。

一、在finally方法里关掉input或者output资源

方法体里面定义了input或者output流的话,需要在finally里面把它关掉。以下这几种调用不需要遵守这条规则,因为colse()方法不起作用:

java.io.StringWriter

java.io.ByteArrayOutputStream

java.io.ByteArrayInputStream

如果再方法返回的时候没有调用close()方法来释放input()和output()的资源的话,会导致一个系统资源泄漏。而且在任何情况下都要确定在返回全调用了close()方法,包括出现异常的时候。所以需要在finally方法里面加入这个方法。这样就保证了在任何情况下都会关闭资源。

错误示例:

public class CIO

{

public void method (java.io.File f)

{

java.io.FileInputStream fis = null;

try

{

fis = new java.io.FileInputStream (f);

fis.read ();

fis.close ();

}

catch (java.io.FileNotFoundException e1)

{

System.out.println("File not found");

}

catch (java.io.IOException e2)

{

System.out.println("I/O Exception");

}

// 如果出现异常,这里就不能保证关闭资源。

}

}

修正后的代码:

public class CIOFixed

{

public void method (java.io.File f)

{

java.io.FileInputStream fis = null;

try {

fis = new java.io.FileInputStream

(f);

fis.read ();

}

catch (java.io.FileNotFoundException e1)

{

System.out.println("File not found");

}

catch (java.io.IOException e2)

{

System.out.println("I/O Exception");

}

finally

{

if (fis != null)

{

try

{

fis.close ();

}

catch (java.io.IOException e)

{

System.out.println("I/O Exception");

}

}

}

}

}

二、else的注意问题

一般总认为如果if语句只有一句的话,那么{}就是可要可不要的了。可是如果if有else嵌套的话,就不一样了,{}是必需的

错误示例:

if (i < 5)

if (i < 2)

i++; else

i--;

修改后:

if (i < 5)

{

if (i < 2)

i++;

} else

{

i--;

}

三、不要再catch()块里什么代码也不放

在catch()块里面放入一些错误处理代码是一个好的习惯。但是如果catch()里面有有关javadoc 的代码,那也是可以的。

错误示例:

try {

System.in.read ();

}

catch (java.io.IOException e)

{

// 错误

}

正确:

try {

System.in.read ();

}

catch (java.io.IOException e)

{

System.out.println("Descriptive error");

}

四、不要在if条件里面附值

如果这样做的话,系统会报告错误。在java的很多条件声明里面用附值是很不明智的,而且系统也会报告错误。很容易引起异常。遵守这条规者能够使维护简单,避免不一致。

错误示例:

if (b = true)

正确的:

if (b == true)

五、for语句需要循环体。

如果没有{}的话,for语句只会执行一次!错误示例:

for (i = 0; i < 10; i++);

System.out.println (i);

这里print() 只会执行一次。正确:

for (i = 0; i < 10; i++)

{

// FIXED

System.out.println (i);

}

六、不要把方法定义成main()

在java里,main()方法是一个特别的方法。所以在自己定义方法的时候不要定义这样的名字,以免引起混扰。

七、不要直接或者间接的定义'Error'和'Throwable'的子类

java.lang.Error只在JVM出现反常的时候覆盖这个方法,如果你定义了直接或者不直接的类继承了类'Error',也就指出了这个错误是JVM内部的,而不是这个类的。所以对于java编译器来说是不可见的,这样就不能检查错误的异常处理了。

java.lang.Throwable'是'java.lang.Exception和java.lang.Error的上级类,用户如果象定义异常类的话应该继承java.lang.Exception。

错误示例:

public class ABC extends Error

正确:

public class ABC extends Exception

八、有关"switch"语句里面的"case"问题

最好在每一个 “case”里都定义一个”return”或者“break”来控制不要走到下面的

“case”里去。如果一个”case”语句在代码的最后没有一个”break”或者”return”句,程序就会走到下一个”case”。如果这个”case”是最后一个的话,那就没什么问题,如果后面还有”case” 的话,看起来就不×××全了。

错误示例:

switch (i) {

case 1:

x = 10;

break;

case 2:

x = 20;

default:

a = 40;

break;

正确:

switch (i) {

case 1:

x = 10;

break;

case 2: // VIOLATION

x = 20;

break;

default:

x = 40;

break;

九、建议不要使用'System.getenv ()'

不建议使用'System.getenv()',这个方法看起来很好用,不过并不是所有的系统都有环境变量的。不用这个方法也可能带来一些不方便。

错误示例:

void method (String name)

{

System.getenv (name);

// 可以用其他方法来代替

}

如果不用这个方法,我们可以用其它的方法来代替。比如:'System.getProperty()’,'getTypeName ()'等,这也可以找到java的系统属性。

十、不要使用’\n’或者'\r'来分行

这两个标记看来很普遍,特别是’\n’。我们经常用来作为分行用。但是不同的系统用不同的分行字符,所以这些字符在某些意义上违背了java的平台无关性。

错误示例:

System.out.println("Hello\n" + name);

我们可以用其它的一些方法来代替,比如println(),这个方法在不同的系统平台上都起到相同的作用。后者推荐大家用这个方法:

System.getProperty("line.separator")

十一、使所有的内部类"private"

Java允许一个类包含另外一个类,带是Java byte code没有这个概念。类被编译器解释成package-private类。从更深的程度来说,包含类的任何内部私有对象能被内部类访问的也能被同一个包内的其他类访问。

错误示例:

public class INNER

{

class INNER_Class

{

void setValue(int i)

{

_value = i;

// 现在包就可以访问了

}

}

private int _value;

}

所以需要加上private class INNER_Class

十二、不要使接口序列化

如果一个字节数组包含了一个被序列化的对象。***者就能读到这个对象的内部状态合字段(包括private的)。

错误示例:

public interface sample extends

java.io.Serializable

爱码仕i:专注于Java开发技术的研究与知识分享!

————END————

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

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

相关文章

华为,百度豪投,这类程序员要再次上榜了!

前不久百度AI开发者大会&#xff0c;李彦宏高调宣布百度AI技术&#xff1b;同时&#xff0c;AI测试权威软件AI Benchmark的测试数据显示&#xff0c;中国华为研发的7nm旗舰手机芯片麒麟810的AI分数&#xff0c;远远超过美国高通骁龙855了&#xff01;早前华为就宣布&#xff1a…

flowable实战(六)flowable的意见表和附件表应用

一、act_hi_comment和act_hi_attachment两表表&#xff0c;前者意见表后者是附件表 意见表它里面有一个类型type字段&#xff0c;分别是comment代表意见(这个type可以自定义,例如自定义为&#xff1a;通过/退回/提前终止&#xff09;&#xff0c;缺省提供了comment&#xff0c…

Serverless在游戏、电商行业的一个运用场景示例

摘要&#xff1a; Serverless 是一种架构理念&#xff0c;具有自己的独特的优势和适用场景。本文以使用阿里云函数计算为例&#xff0c;构建一个简单具体的microservice为例&#xff0c;看看这种架构是如何达到快速开发和节约运维成本的。 点此查看原文&#xff1a;http://clic…

SDN精华问答 | SDN的核心技术是什么?

SDN火热了好一阵子&#xff0c;无论运营商、政府企业、投资机构&#xff0c;一段时间&#xff0c;不知道SDN、不能甩几个SDN相关的名词术语&#xff0c;似乎都落后于时代了。今天&#xff0c;就来看看关于SDN的精华问答吧。1Q&#xff1a;SDN的目的是什么&#xff1f; A&#x…

RocksDB 写入流程详解

摘要&#xff1a; 最初的写入流程&#xff0c;继承自 leveldb&#xff0c;多个 写线程组成一个 group&#xff0c; leader 负责 group 的 WAL 及 memtable 的提交&#xff0c;提交完后唤醒所有的 follwer&#xff0c;向上层返回。 支持 allow_concurrent_memtable_write 选项&a…

Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)

摘要&#xff1a; 标签 PostgreSQL , Greenplum , varbitx , roaring bitmap , pilosa , varbit , hll , 多阶段聚合 背景 roaring bitmap是一个压缩比很高同时性能不错的BIT库&#xff0c;被广泛使用&#xff08;例如Greenplum, ES, InfluxDB. 点此查看原文 标签 PostgreSQL ,…

容器快速入门完全指南

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | JUSTIN来源 | RancherLabs介 绍容器&#xff0c;以及Docker和Kubernetes之类的容器技术已经日益成为许多开发人员工具包中常见的工具。容器化的核心目标是提供一种更好的方式&#xff0c;以可预测和便于管理的方式在不同的环…

Java错误提示框口怎么使用_如何在Swing中显示错误消息对话框?

以下示例展示了如何在基于swing的应用程序中显示错误消息警告。使用以下API -JOptionPane - 创建标准对话框。JOptionPane.showMessageDialog() - 显示消息警告。JOptionPane.ERROR_MESSAGE - 将警报消息标记为错误。示例package com.yiibai.swingdemo;import java.awt.BorderL…

PostgreSQL Oracle 兼容性之 - rownum

摘要&#xff1a; 标签 PostgreSQL , rownum , Oracle 兼容性 , row_number 窗口 , limit , PPAS , EDB 背景 Oracle ROWNUM是一个虚拟列&#xff0c;每输出一行递增1。 点此查看原文&#xff1a;https://yq.aliyun.com/articles/405183?spma2c4e.11153959.teamhomeleft.24.8W…

PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND, spin lock, SLEEP进程)

摘要&#xff1a; 标签 PostgreSQL , 分区表 , bind , spin lock , 性能分析 , sleep 进程 , CPU空转 , cache 背景 实际上我写过很多文档&#xff0c;关于分区表的优化&#xff1a; 《PostgreSQL 商用版本EPAS(阿里云ppas) - 分区表性能优化 (堪比pg_pathman)》 《PostgreSQL …

flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析

场景模拟&#xff08;请假流程&#xff09;&#xff1a; 员工申请请假 部门领导审批 人事审批 员工销假 本文用次例介绍在工作流中出现的几个对象及其之间的关系&#xff0c;以及在Activiti中各个对象是如何关联的。 在线演示实例&#xff1a;http://aws.kafeitu.me:8080/kft…

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词&#xff0c;相信大家都非常熟悉。作为信息科技发展的主流趋势&#xff0c;它频繁地出现在我们的眼前。伴随它一起出现的&#xff0c;还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要&#xff1a; 程序员、测试员、项目经理&#xff0c;你们有freestyle吗&#xff1f;阿里云云效&#xff0c;一站式企业协同研发云&#xff0c;“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑&#xff0c;助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图&#xff0c;很简单的流程&#xff0c;就是两个UserTask&#xff1a; 代码如下&#xff1a; DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要&#xff1a; 如何帮助优酷迅速融合到阿里研发体系&#xff1f;如何优化优酷的需求分析流程&#xff1f;针对需求信息不明确&#xff0c;开发出来的功能不是产品想要的痛点如何解决&#xff1f; 点此查看原文&#xff1a;http://click.aliyun.com/m/41381/ 导读&#xff1a…

java float 高效加减_java Double 进行加减乘除

Double 工具类package org.fh.util;import java.io.Serializable;import java.math.BigDecimal;import java.math.RoundingMode;/*** double的计算不精确&#xff0c;会有类似0.0000000000000002的误差&#xff0c;正确的方法是使用BigDecimal或者用整型* 整型地方法适合于货币…

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要&#xff1a; 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型&#xff0c;被广泛应用于 画像系统 &#xff0c; 标签系统。 在一些业务重建中&#xff0c;对数组内容的定义往往包含了多重含义&#xff0c;例如即包含了标签本身&#xff0c…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要&#xff1a; SQL基础有这些操作&#xff08;按照执行顺序来排列&#xff09;&#xff1a; from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表&#xff0c;以为是流程实例表&#xff0c;其实它叫执行实例表&#xff09;&#xff1a;这个表和act_run_task表&#xff0c;一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表&#xff0c;这个表会体现主干与分支…