java如何编写windows木马_如何编写可怕的 Java 代码?
原标题:如何编写可怕的 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 代码?相关推荐
- java记事本教程_Java实战_手把手编写记事本
Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...
- java自定义错误码类_如何编写和应用Java的自定义异常类
11.7.1编写自定义异常类的模式 编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class Custo ...
- Java编写图像浏览器_浏览器下载图像(JAVA代码)
03-07阅读8103 简介: JavaWeb下载文件通常分为两种类型,一种是浏览器可以识别的文件类型,例如.txt,.excel,.zip等,可以通过使用以下链接来实现标签,但图片下载确实很麻烦. ...
- 我的世界java版和windows版_我的世界基岩版与Java版有什么区别?
我的世界是一款受到非常多玩家喜爱的沙盒建造游戏,玩家可以在三维世界里做任何自己想做的事情.很多小白玩家分不清基岩版和Java版的区别.为此,小编特意收集了资料给大家分享一下本篇教程,希望能够帮助到大家 ...
- java中execution的作用_一文初步了解Java虚拟机
大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...
- java反射获取方法内部_公共技术点之 Java 反射 Reflection
本文为 Android 开源项目源码解析 公共技术点中的 Java 反射 部分 分析者:Mr.Simple,校对者:Trinea,校对状态:未完成 1. 了解 Java 中的反射 1.1 什么是 Ja ...
- 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...
无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...
- java导出数据透视表_使用数据库中的Java流制作数据透视表
java导出数据透视表 来自数据库行和表的原始数据不能为人类读者提供太多了解. 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式 在向我们展示之前. 数据透视表是聚合的一种特定形式,我们可 ...
- java异常没有catch住_今天才真正了解Java的异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 异常发生的原因有很多,通常包含以下几大类: 1.用户输入了非法数据. 2.要打开的文件不存在. 3.网络通信时连接中断 ...
最新文章
- 朱敏:40岁创业如何成就绝代明星?(五)
- [转载]在线文档预览方案-Office Web Apps
- 使用ViewPager加载页面出现空白
- Django从理论到实战(part2)--virtualenvwrapper
- map和hash_map
- matlab调用refprop9.0,Matlab调用REFPROP完全说明
- 结合eXeScope打造个性flash发布后的应用程序exe文件
- html如何实现文章分类功能,HTML文本自动分类技术的研究与工具的实现
- 解决ubuntu16.04插耳机没有声音的问题
- 计算机组成与设计(硬件/软件接口)RISC-V版笔记
- 【CSS】三行实现一个黑白网格背景(渐变)
- 学大伟业Day解题报告
- 安卓 11 非网络以太网切换动态和静态IP无法连接问题
- 什么是串扰crosstalk
- 【Linux】嵌入式·NAND Flash
- 微服务调用异常:error feign.RetryableException: Read timed out executing POST http://xxx.......
- windbg定位死锁
- 南大通用GBase8s 常用SQL语句(八十三)
- 垃圾分类从我做起,垃圾分类PPT模板
- 春招面试经验系列(三)商汤科技