原标题:如何编写可怕的 Java 代码?

作者:武培轩

我决定告诉你如何编写可怕的Java代码。如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读。

如果你正在寻找有关如何编写良好代码的建议,请查看其它文章!

对一切使用异常

你知道循环对吗?差一错误(英语:Off-by-one error,缩写 OBOE,是在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误,属于逻辑错误的一种)很容易犯。当你迭代一个集合时,很容易出错。让我们看看如何使用 Java 异常处理来解决该问题,而不用担心这些讨厌的差一错误!

publicstaticvoidhorribleIteration(String [] words){

inti = 0;

try{

while( true){

System.out.println(words[i]);

i++;

}

} catch(IndexOutOfBoundsException e){

//iteration complete

}

}

不用担心访问修饰符

你说什么?Java 中的访问修饰符,这不是浪费时间嘛!你是否知道将属性/方法等设为私有只是一个建议?如果你想修改它,那就去做吧!没什么能阻止你(除了缺乏知识之外)。如果是这种情况,请看如下代码。

publicstaticvoidreadPrivatethrows NoSuchFieldException, IllegalAccessException{

Field f = System. class.getDeclaredField( "lineSeparator");

f.setAccessible( true);

String separator = (String) f.get(System. class);

System.out.println( "Line separator is "+ separator + ".");

}

我们在这里读取 lineSeparator,这并没有什么。但是修改 lineSeparator 会带来更多乐趣!在我们修改代码中的 lineSeparator 之后,看看 System.out.println 发生了什么:

publicstaticvoidreadWritePrivatethrows NoSuchFieldException, IllegalAccessException{

Field f = System. class.getDeclaredField( "lineSeparator");

f.setAccessible( true);

String separator = (String) f.get(System. class);

System.out.println( "Line separator is "+ separator + ".");

f. set(System. class, "!!!");

System.out.println( "Line one");

System.out.println( "Line two");

System.out.println( "Line three");

}

输出为:

Line separator is

WARNING: All illegal access operations will be denied in a future release

.

Line one!!!Line two!!!Line three!!!

看起来不错!

在 Java 中没有什么是真正的 final

一些开发人员认为他们通过将 final 关键字放在变量前面来以说明不会去更改这个值。事实是——有时候你真的想要改变一个 final 字段的值,所以这是如何做的:

publicstaticvoidnotSoFinalthrows NoSuchFieldException, IllegalAccessException, InterruptedException{

ExampleClass example = newExampleClass( 10);

System.out.println( "Final value was: "+ example.finalValue);

Field f = example.getClass.getDeclaredField( "finalValue");

Field modifiersField = Field. class.getDeclaredField( "modifiers");

modifiersField.setAccessible( true);

modifiersField.setInt(f, f.getModifiers & ~Modifier.FINAL);

f.setInt(example, 77);

System.out.println( "Final value was: "+ example.finalValue);

}

publicstaticclassExampleClass {

final intfinalValue;

publicExampleClass( intfinalValue){

this.finalValue = finalValue;

}

}

注意,在构造函数中提供最终值时,这对我很有用。如果你在类中设置了 final 值,那么它将不起作用。(可能是一些编译器级别的优化破坏了所有的乐趣)

使用 Java 序列化,干就对了

这很简单,用 Java 序列化,玩得开心,好好享受。

好吧,我想你想要一些理由。我看到 Java 平台首席架构师 Mark Reinhold 表示,他们后悔将序列化引入到 Java。显然,Java 中大约 1/3 的安全漏洞仅来自于序列化。

将对象用于一切

你知道类吗?浪费时间!你是否想看到代码重用的巅峰之作?你去!

publicstaticvoidprintThings(List things){

inti = 0;

try{

while( true){

System.out.println(things.get(i));

i++;

}

} catch(IndexOutOfBoundsException e){

//iteration complete

}

}

List superList = newArrayList;

superList.add( 7);

superList.add( "word");

superList.add( true);

superList.add(System. class);

printThings(superList);

您可以相信我们一直以来都拥有这种力量吗?另外,组合两个模式还有额外的好处!

这只是你使用 Object 进行操作的开始。如果有疑问,请记住-使用对象。如果需要,你随时可以使用这种惊人的模式进行回退!

publicstaticvoidprintThingsUppercaseStrings(List things){

inti = 0;

try{

while( true){

Object o = things.get(i);

System.out.println(o);

if(o.getClass == String. class){

String so = (String) o;

so = so.toUpperCase;

System.out.println(so);

}

i++;

}

} catch(IndexOutOfBoundsException e){

//iteration complete

}

}

这还是类型安全的,多么健壮的解决方案。

充分拥抱便捷编程的艺术

你知道比尔·盖茨更喜欢懒惰的开发人员吗?比尔·盖茨说过:

"I will always choose a lazy person to do a difficult job...because, he will find an easy way to do it. --Bill Gates"

"我总是会选择一个懒人去完成一份困难的工作...因为,他会找到捷径。" -- 比尔盖茨

因此,有了比尔·盖茨(Bill Gates)的大力支持,我们可以完全接受我们的懒惰。你准备好了吗?那就开始吧!

永远不要编写测试,只是不要编写错误!

将所有都定义为 public -方便访问!

支持全局变量–您可能需要它们!

大型接口优于小型专用接口–可以使用的方法越多越好!

支持继承而不是合成(使用接口中的默认方法从未如此简单)!

始终使用装箱类型–它们也可以用作对象!

尽可能使用最短的名字(a, b, n 最好)!

不要学习任何新知识–你总是最了解

一个程序员最重要的品质就是对自己有信心。相信自己什么都懂,没有什么可学的!

考虑到这一点,请确保不要学习:

新类库

新语言

新框架

这样可以节省你的时间!你永远都不应学习任何新知识,因为你已经是最好的了。

你有能力去做这件事,并不代表你应该做返回搜狐,查看更多

责任编辑:

java如何编写windows木马_如何编写可怕的 Java 代码?相关推荐

  1. java记事本教程_Java实战_手把手编写记事本

    Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...

  2. java自定义错误码类_如何编写和应用Java的自定义异常类

    11.7.1编写自定义异常类的模式 编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class Custo ...

  3. Java编写图像浏览器_浏览器下载图像(JAVA代码)

    03-07阅读8103 简介: JavaWeb下载文件通常分为两种类型,一种是浏览器可以识别的文件类型,例如.txt,.excel,.zip等,可以通过使用以下链接来实现标签,但图片下载确实很麻烦. ...

  4. 我的世界java版和windows版_我的世界基岩版与Java版有什么区别?

    我的世界是一款受到非常多玩家喜爱的沙盒建造游戏,玩家可以在三维世界里做任何自己想做的事情.很多小白玩家分不清基岩版和Java版的区别.为此,小编特意收集了资料给大家分享一下本篇教程,希望能够帮助到大家 ...

  5. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  6. java反射获取方法内部_公共技术点之 Java 反射 Reflection

    本文为 Android 开源项目源码解析 公共技术点中的 Java 反射 部分 分析者:Mr.Simple,校对者:Trinea,校对状态:未完成 1. 了解 Java 中的反射 1.1 什么是 Ja ...

  7. 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...

    无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...

  8. java导出数据透视表_使用数据库中的Java流制作数据透视表

    java导出数据透视表 来自数据库行和表的原始数据不能为人类读者提供太多了解. 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式 在向我们展示之前. 数据透视表是聚合的一种特定形式,我们可 ...

  9. java异常没有catch住_今天才真正了解Java的异常处理

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 异常发生的原因有很多,通常包含以下几大类: 1.用户输入了非法数据. 2.要打开的文件不存在. 3.网络通信时连接中断 ...

最新文章

  1. 朱敏:40岁创业如何成就绝代明星?(五)
  2. [转载]在线文档预览方案-Office Web Apps
  3. 使用ViewPager加载页面出现空白
  4. Django从理论到实战(part2)--virtualenvwrapper
  5. map和hash_map
  6. matlab调用refprop9.0,Matlab调用REFPROP完全说明
  7. 结合eXeScope打造个性flash发布后的应用程序exe文件
  8. html如何实现文章分类功能,HTML文本自动分类技术的研究与工具的实现
  9. 解决ubuntu16.04插耳机没有声音的问题
  10. 计算机组成与设计(硬件/软件接口)RISC-V版笔记
  11. 【CSS】三行实现一个黑白网格背景(渐变)
  12. 学大伟业Day解题报告
  13. 安卓 11 非网络以太网切换动态和静态IP无法连接问题
  14. 什么是串扰crosstalk
  15. 【Linux】嵌入式·NAND Flash
  16. 微服务调用异常:error feign.RetryableException: Read timed out executing POST http://xxx.......
  17. windbg定位死锁
  18. 南大通用GBase8s 常用SQL语句(八十三)
  19. 垃圾分类从我做起,垃圾分类PPT模板
  20. 春招面试经验系列(三)商汤科技

热门文章

  1. Dell及其他电脑开启停电后来电重新开机
  2. golang之基础库
  3. html下拉框代码默认选中状态,select默认不选中 html select 默认不选择
  4. 【李宏毅机器学习】adversarial attack 对抗攻击
  5. 利用对抗变化网络进行对抗训练
  6. Vundle简介安装
  7. 面片双面贴图shader
  8. 欢迎大家关注我的微信公众号——乔志勇笔记
  9. Redis——》内存淘汰策略
  10. 阿里体育CEO张大钟卸任:与大文娱融合打通 戴玮兼任