java开发中准则怎么写_Java开发中通用的方法和准则20条

1. 不要在常量和变量中出现易混淆的字母

包名全小写、类名首字母全大写、常量全部大写并下划线分割、变量采用驼峰命名等,这些是最基本的Java编码规范。

public class TestDemo {

public static void main(String[] args) {

long i = 1l;

System.out.println("i的两倍是:" + (i+i)); //2

}

}

字母 "l" 作为长整型标志时,务必大写!

2. 不要让常量变成变量

public class TestDemo {

public static void main(String[] args) {

System.out.println("这次常量值是:" + Const.RAND_CONST); // 每次运行值不一样

}

}

interface Const {

public static final int RAND_CONST = new Random().nextInt();

}

务必让常量的值在运行期保持不变。

3. 三元操作符的类型必须一致

public class TestDemo {

public static void main(String[] args) {

int i = 80;

String s1 = String.valueOf(i < 100 ? 90 : 100);

String s2 = String.valueOf(i < 100 ? 90 : 100.0);

System.out.println(s1 + " " + s2); // 90 90.0

System.out.println("两者是否相等:" + s1.equals(s2)); // false

}

}

保证三元操作符中的两个操作数类型一致,即可减少诸多可能错误的发生。

4. 避免带有变长参数的方法重载

public class TestDemo {

public static void main(String[] args) {

Client client = new Client();

// 499元的货物,75折 == 374.25

client.calPrice(49900, 75); // 简单折扣的价格:374.25

}

}

class Client{

public void calPrice(int price, int discount) {

float knockdownPrice = price * discount / 100.0F;

System.out.println("简单折扣的价格:" + formateCurrency(knockdownPrice));

}

public void calPrice(int price, int... discounts) {

float knockdownPrice = price;

for (int i : discounts) {

knockdownPrice = knockdownPrice * i / 100;

}

System.out.println("复杂折扣的价格:" + formateCurrency(knockdownPrice));

}

// 格式化货币形式

private String formateCurrency(float price) {

return NumberFormat.getCurrencyInstance().format(price/100);

}

}

避免带有变长参数的方法重载,以免陷入某些伤脑筋的小陷阱里。

5. 别让 null 值和空值威胁到变长方法

public class TestDemo {

public static void main(String[] args) {

TestDemo t = new TestDemo();

String[] ss = null;

t.m1("china", ss); // 此处可以编译过

t.m1("aaa", 0);

t.m1("china", "people");

t.m1("china", null); // 此处编译不过,为何?

}

public void m1(String s, Integer... is) {

System.out.println("111");

}

public void m1(String s, String... strs) {

System.out.println("222");

}

}

null值对于可变长参数来说,需要确保让编译器知道其类型,否则会有编译报错。

6. 重写变长方法也循规蹈矩

public class TestDemo {

public static void main(String[] args) {

Base b = new Sub();

b.fun(100, 50);

Sub sub = new Sub();

sub.fun(100, 50); // 报错!!!

}

}

class Base {

void fun(int p, int... d) {

}

}

class Sub extends Base {

void fun(int p, int[] d) {

}

}

重写的方法参数与父类相同,不仅仅是类型、数量,还需要包括显示形式。

7. 警惕自增的陷阱

public class TestDemo {

public static void main(String[] args) {

int count = 0;

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

count = count++;

}

System.out.println("count=" + count); // 0

}

}

后++的操作,赋值时,会先取值,后运算++。因此避免同时++时赋值的操作。

8. 不要让旧语法困扰你

public class TestDemo {

public static void main(String[] args) {

int f = 200;

saveDefault:save(f); // 编译不报错,输出 200

}

static void saveDefault() { }

static void save(int fee) {

System.out.println(fee);

}

}

可读性优先,旧的语法纵然不报错,也得让它随风去吧...

未完待续...

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

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

相关文章

百万年薪程序员的7点能力

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。几周前&#xff0c;微盟爆了个大雷&#xff0c;数据库让内部员工删库跑路。写了篇文章&#xff0c;做了一些我的判断&#xff1a;从微盟36小时故障&#xff0c;谈谈数据…

《C++ Primer》13.1.1节练习

练习13.1: 如果构造函数的第一个参数是自身类类型的引用&#xff0c;且所有其他参数&#xff08;如果有的话&#xff09;都有默认值&#xff0c;则此构造函数是拷贝构造函数。拷贝构造函数在以下几种情况下会被使用&#xff1a; ●拷贝初始化&#xff08;用定义变量&#xff09…

Java将五个整数存入整形数组_异常处理:从命令行输入5个整数,放入一整型数组,然后打印输出。。。...

从命令行输入5个整数&#xff0c;放入一整型数组&#xff0c;然后打印输出。要求&#xff1a;如果输入数据不为整数&#xff0c;要捕获输入不匹配异常&#xff0c;显示“请输入整数”&#xff1b;如果输入数据多余5个&#xff0c;捕获数组越界异常&#xff0c;显示“请输入5个整…

优秀的开发者从命名开始

有人说&#xff0c;命名能力也能体现一个程序员的基本编程素养。我很赞成这句话&#xff01;作为开发人员逃不过起名字这一关的,大到项目名、模块名&#xff0c;小到类名、方法名、参数名、参数名、变量名。而命名又对代码的质量和可读性起到很关键的决定。如何码出高质量的代码…

《C++ Primer》13.1.2节练习

练习13.6&#xff1a; 拷贝赋值运算符本身是一个重载的赋值运算符&#xff0c;定义为类的成员函数&#xff0c;左侧运算对象绑定到隐含的this参数&#xff0c;而右侧运算对象是所属类类型的&#xff0c;作为函数的参数&#xff0c;函数返回指向其左侧运算对象的引用。 当对类对…

PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...

定时扣除用户过期积分&#xff0c;但平台用户量比较大&#xff0c;有没有好的解决方法&#xff1f;最近网站实行用户积分过期制度&#xff0c;只保留用户近三月积分&#xff0c;三月前未使用积分进行扣除但平台用户量比较大&#xff0c;感觉这样做会出问题&#xff0c;有没有好…

【复杂系统迁移 .NET Core平台系列】之认证和授权

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

《C++ Primer》13.1.3节练习

练习13.9: 析构函数完成与构造函数相反的工作&#xff1a;释放对象使用的资源&#xff0c;销毁非静态数据成员。从语法上看&#xff0c;它是类的一个成员函数&#xff0c;名字是波浪号接类名&#xff0c;没有返回值&#xff0c;也不接受参数。 当一个类没有定义析构函数时&…

php冒泡程序讲解,PHP冒泡排序程序代码与源代码

冒泡排序是php中众多排序中的一个最简单的排序方法了下面一聚教程小伙伴就同各位介绍一个冒泡排序的例子&#xff0c;希望能帮助到各位。冒泡排序简介&#xff1a;冒泡排序(Bubble Sort)&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#…

.NET Core开发实战(第30课:领域事件:提升业务内聚,实现模块解耦)--学习笔记...

30 | 领域事件&#xff1a;提升业务内聚&#xff0c;实现模块解耦我们在领域的抽象层定义了领域事件和领域事件处理的接口IDomainEventnamespace GeekTime.Domain {public interface IDomainEvent : INotification{} }这是一个空接口&#xff0c;它只是标记出来某一个对象是否是…

《C++ Primer》8.1.2节练习

练习8.1: #include <iostream> #include <stdexcept> using namespace std;istream &f(istream &in) {int v;while (in >> v, !in.eof()) {if (in.bad())throw runtime_error("IO流错误");if (in.fail()) {cerr << "数据错误&…

mac升级php7,MAC更新自带php版本到7.0

说一下我最近更新mac自带php版本的经历&#xff0c;我是按照网上的教程更新的&#xff0c;主要参考的是这篇博客http://blog.csdn.net/takunha/article/details/52484769&#xff0c;通过Homebrew来安装&#xff0c;安装过程除了速度有点慢之外&#xff0c;其他都还算顺利。可装…

.NET 5 Preview 1的深度解读和跟进

这几天微软.NET 团队发布了.NET 5 Preview 1, 如约而至。很兴奋&#xff0c;因为.NET Core和.NET Framework终于实现了大一统&#xff0c;同时也很期待&#xff0c;期待.NET 5能给我们带来哪些好的新特性。让我们先把时间拨回到2019年...一、2019年.NET 5的提前剧透去年2019年 …

程序员羽化之路--假如需要一百万个对象

点击上方蓝字关注我们菜菜哥&#xff0c;救命呀又被产品经理砍了&#xff1f;这次搞不好真要被砍了&#xff0c;线上一个用户系统内存溢出了&#xff0c;占用内存太高了用户基数大&#xff0c;内存占用高正常高的不太正常了&#xff0c;我觉得可能和我的设计有关那说说你的用户…

iis php打开空白页,windows+IIS+php 访问显示空白页 php版本信息访问正常

10:48:46 A session had already been started - ignoring session_start() in E:\zentaopms\module\common\model.php on line 24 when visiting10:48:46 ERROR: 鎮ㄨ闂殑鍩熷悕 172.25.8.82:8080 娌℃湁瀵瑰簲鐨勫叕鍙搞€&#xfffd; in E:\zentaopms\module\common\mo…

《C++ Primer》8.2.1节练习(部分)

练习8.4: #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std;int main() {//打开文件ifstream in("D:\\CCCCCCCCCCCCCCCCCCC\\yyhaif.txt");if (!in) {cerr << "无法打开输入文…

WTM 3.5发布,VUE来了!

千呼万唤中&#xff0c;WTM的Vue前后端分离版本终于和大家见面了&#xff0c;我曾经跟群里1000多位用户保证过Vue版本会在春天到来&#xff0c;吹过的牛逼总算是圆上了。卧槽&#xff0c;NB啊!我等到花都谢了风太大&#xff0c;吹瞎了朕的双眼我是谁&#xff0c;我在哪儿&#…

《C++ Primer》8.3.1节练习

练习8.9: #include <iostream> #include <sstream> #include <string> #include <stdexcept>using namespace std;istream &f(istream &in) {string v;while (in >> v, !in.eof())//直到遇到文件结束符才停止读取{if (in.bad())throw r…

java 第三方序列化,11.既然有第三方的序列化方式,说明java官方提供的序列化方式应该有一些很明显或者很致命的缺点……...

序列化是什么&#xff1a;把一个java对象转化为二进制对象&#xff0c;并保存到硬盘&#xff0c;或在网络上传输。反序列化就是把序列化的二进制对象读到内存中。 作用&#xff1a;1、减少内存占用或网络传输。比如web容器中的session&#xff0c;当session数量过大比如10W连接…

2020年,我来盘点下微服务架构技术栈

2020年了&#xff0c;很多小伙伴儿对微服务还比较陌生&#xff0c;说起来很多人可能不敢相信&#xff0c;其实微服务这个概念早在2012年就提出来了&#xff0c;经过了这些年的发展&#xff0c;现在已经成为企业非常主流的架构选项了。今天&#xff0c;我就来带大家一起探讨下微…