我是靠谱客的博主 无奈魔镜,最近开发中收集的这篇文章主要介绍Java实践中的规范问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近学习了Java实践排位赛中,对Java使用过程中的一些细节问题的注意。都是平时编程过程中可能不在意的一些小问题,有可能导致大的错误,特此记录一下。
主要包括:

  1. “JAVA基础语句”编程规范
  2. “类的使用”编程规范
  3. “异常处理”编程规范

分为三个部分的编程规范,在以后使用Java做工程项目的时候需要注意。

一、“JAVA基础语句”编程规范

1.switch语句要有default分支,除非switch的条件变量是枚举类型

2.使用break跳出整个switch语句

3.if-else if类型的条件判断,最后应该包含一个else分支

4.不能用浮点数作为循环变量

5.明确地进行类型转换,不要依赖隐式类型转换

二、“类的使用”编程规范

1.使用类名调用静态方法,而不要使用实例调用

总结:使用对象调用类中的静态方法,可能会导致与预期的结果不一致的情况,明确使用类名调用静态方法不容易造成混淆。

2.避免在无关的变量或无关的概念之间重用名字,避免隐藏(hide)、遮蔽(shadow)和遮掩(obscure)

1)覆写(override)存在于子类与父类间
一个实例方法可以覆写在其超类中可访问到(非private)的具有相同签名的实例方法(非static),从而使能动态分派。覆写的好处在于子类可以根据需要,定义特定于自己的行为。

2)重载(overload)存在于子类与父类间
重载:一组相似行为用相同名命名。
在某个类中的方法可以重载(overload)另一个方法,只要它们具有相同的名字和不同的签名。
重载歧义或混淆场景:
可变参数
包装类型,例如int与Integer,这时应该修改方法名称,如果是构造方法,则委托到不同名的静态方法。

3)隐藏(hide)存在于子类与父类间
一个属性、静态方法或内部类可以分别隐藏(hide)在其超类中可访问到的具有相同名字(对方法而言就是相同的方法签名)的所有属性,方法或内部类。上述成员被隐藏后,将阻止其被继承。
在这里插入图片描述

4)遮蔽(shadow)存在于子类与父类间
一个变量、方法或类可以分别遮蔽(shadow)在类内部具有相同名字的变量、方法或类。如果一个实体被遮蔽了,那么就无法用简单名引用到它。
在这里插入图片描述
5)遮掩(obscure)存在于子类与父类间

一个变量可以遮掩具有相同名字的一个类,只要它们都在同一个范围内,如果这个名字被用于变量与类都被许可的范围,那么它将引用到变量上。相似地,一个变量或一个类型可以遮掩一个包。遮掩是唯一一种两个名字位于不同的名字空间的名字重用形式,这些名字空间包括:变量、包、方法或类型。
在这里插入图片描述

3.子类覆写父类方法时应加上@Override注解

方法的覆写:如果父类的方法,不能满足子类的要求,子类可以覆写父类继承的方法,当调用方法的时候会优先调用子类的方法。
语法规则:

  1. 返回值类型
  2. 方法名
  3. 参数列表(类型和个数)

都要与继承父类的方法相同,才叫方法的覆写。
加上@Override可以在编译的时候发现。

4.将对象存入HashSet,或作为key存入HashMap(或HashTable)后,必须确保该对象的hashcode值不变

当一个对象被存储在Hash集合中后,不要修改与计算hashcode有关的字段。

5.在向下类型转换前用instanceof进行判断

向上类型转换(自动类型转换),是从小到大的转换
向下类型转换(强制类型转换),是从大到小的转换
在这里插入图片描述

6.使用集合的toArray()方法将集合转为数组

//List转数组
String[] array = nameList.toArray(new String[nameList.size()]);

7.使用System.arraycopy()进行数组复制

System.arraycopy()作用:从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
在这里插入图片描述
在这里插入图片描述
当原始数组长度较大时,数组复制的方法效率高。

三、“异常处理”编程规范

1.在异常条件下,保证释放已持有的锁

ReentrantLock(重入锁):可重入的互斥锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。

ReentrantLock类能够实现线程之间同步互斥
ReentrantLock类具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。

一个线程中没有正确释放持有的锁会使其它线程无法获取该锁对象,导致阻塞。在发生异常时,要确保程序正确释放当前持有的锁。

Lock接口使用的标准形式:
在这里插入图片描述

2.防止通过异常泄露敏感信息

敏感信息泄露来源:
文本消息:例如FileNotFoundException异常会透漏文件系统的结构信息
异常类型:通过异常本身的类型,可以得知所请求的文件不存在

解决方法:对敏感的异常消息和敏感的异常类型进行过滤

3.在finally块中不要使用return、break或continue使finally块非正常结束

在这里插入图片描述
在这里插入图片描述

最后

以上就是无奈魔镜为你收集整理的Java实践中的规范问题的全部内容,希望文章能够帮你解决Java实践中的规范问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部