编写代码的一些小细节,主要是性能方面的注意吧

1.字符串的拼接  ,  在编写代码时   为了方便 使用 +号去 拼接字符串,  会创建多余的对象,  应该使用StringBuffer 或 StringBuilder

2. 基本类型和封装类型:  基本类型 的运行效率要远远高 过 封装类型  ---  因为 封装类型在运算的时候 是要 拆包 成 基本类型的  运算完成还要 封包  ----  比较影响效率 -- 在没有特殊原因尽量使用基本类型。

3.静态方法要比抽象方法的运行效率高, 还可以避免只是要使用一个类的方法,并不会访问这个类的字段。而去创建一个没有必要的对象。

4.对类的常量,使用static final ,  可以使所有的常量在dex文件的初始化器的进行初始化,就避免了  在使用时采用字段搜索的方式。

/**

*   这里还是扯一下蛋,装个小13

*    /

普通的常量 在jvm第一次加载class文件的时候,回去调用一个 <clinit>的方法 去对普通的常量赋值。

而被final 修饰的常量 是不会去调用 <clinit>方法去赋值的  ,  原因就在于  final 的特殊性。

大家一般会觉得  final 和 static 没有什么区别  ,一个是只是赋值一次, 一个可以多次赋值。我也怎么觉得,后来神经病发了,就发现:

static 作用于成员变量 表示 保存了一份副本。 注意这个副本。

final 作用于成员变量 表示 变量不可变。

我们都知道一件事, 副本是由于 替换值使用。

final 代表  没有副本。  就不会 发生替换值的问题。 也就不会在初始化赋值。  这里 使用的是  初始化赋值。

这就扯到另一个问题了,final 不可变的是什么?

当含有final属性的类被加载进内存并且被实例化的时候,就会为这个final属性分配内存,同时必须对该属性进行初始化,之后不可变。也就是说如果是基本类型的,那么它的值不能再改变;如果是对象,则引用不可变,而对象本身还是可以改变的。 --- 《java编程思想》

也就是static final 修饰的 常量  相当于  “123”;的概念。

这样jvm  就不会采用字段搜索的方式去,初始化了。  而会采用相对轻量级的常量方式。

忘了说 static 修饰的成员变量,的确是静态的  ,不过我们好像 很容易就忽略了 ,他还是变量的问题 ,是变量就一定会在类加载的时候,调用<clinit>方法去初始化赋值的。

常量直接在 jvm加载class文件的时候,初始化完成了。

感觉不会有人看的懂,我写这些鬼。。。。

5.对使用的容器 的数据结构进行了解 ,  根据其数据结构的优缺点选择有效的容器实现 数据操作。

6.在 for的()中 ,尽量不要调用方法,可以提升效率。

《java编程思想》 一本看起有许多意思的书,可以看看。不知道写什么了,拜拜。

----- EndingWar

结尾附上一首诗,来激励自己,细细去体会学习的快乐:

Seven times I have despised my soul

——Kahlil Gibran

第一次,当它本可进取时,却故作谦卑;

第二次,当它在空虚时,用爱欲来填充;

第三次,在困难和容易之间,它选择了容易;

第四次,它犯了错,却借由别人也会犯错来宽慰自己;

第五次,它自由软弱,却把它认为是生命的坚韧;

第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;

第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。

时间: 2024-10-09 00:09:28

编写代码的一些小细节,主要是性能方面的注意吧的相关文章

强壮你的C和C++代码30个小细节

1 初始化局部变量 使用未初始化的局部变量是引起程序崩溃的一个比较普遍的原因, 2 初始化WINAPI 结构体 许多Windows API都接受或则返回一些结构体参数,结构体如果没有正确的初始化,也很有可能引起程序崩溃.大部分Windows API结构体都必须有一个cbSIze参数,这个参数必须设置为这个结构体的大小. 注意:千万不要用ZeroMemory和memset去初始化那些包括结构体对象的结构体,这样很容易破坏其内部结构体,从而导致程序崩溃. 3 检测函数输入参数有效性 在函数设计的时候

写js代码的时候应该注意的一些的小细节

在今天将为大家分享一下,在平时我们写js代码的时候应该注意的一些的小点.img1全局变量了解js的朋友应该知道全局变量就是在任何函数的外面声明的或是未声明直接简单使用的.下面来看一个例子function fn(){var a=b=0;}或许有好多朋友都觉得这两个都是局部变量,但这似乎不是你所想的那样.在这个例子中b是一个全局变量.这是为什么了?肯定有好多朋友也想不通,这是因为在js中赋值运算符是自右往左的,所以上面这个例子实际上是function fn(){var a=(b=0);}因此,在平时

9行代码体现集合框架中的一个小细节

String[] strs = {"string--01", "string--02", "string--03", "string--04"};List<String> strsList = Arrays.asList(strs);//以下语句输出:[string--01, string--02, string--03, string--04]System.out.println(strsList); int[]

Python编写微信打飞机小游戏(四)

之前的工作已经基本上将我方飞机的图形显示工作做的差不多了,这篇博客中我们将开始添加敌方飞机——小型敌机.中型敌机(直升机)和大型敌机(坦克).新建一个enemy.py文件,导入pygame和random模块,开始编写吧(还是要注意文件编码问题,以后就不再啰嗦了). 敌方飞机类与我方飞机模块有一定的相似性,但不会左右移动,不会发射子弹等等.小型敌机是敌方飞机中最基本的类型,一击毙命,没有血量.没有出场音效.中型敌机有一定血量,损毁时附带特殊音效.大型敌机血量最多,出场和损毁时都有特殊音效,游戏中中

mybatis 操作存储过程 小细节错误

项目开发的时候遇到一个错误: <span style="font-size:24px;">org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLException: ORA-06550: 第 8 行, 第 4 列: PLS-00103: 出现符号 ";"在需要下列之一时: . ( ) , * @ % & =

关于if语句中的小细节

if语句都会用,但是有一些小细节并不容易被发现. 比如我们不应该写这样的代码: if(flag==0) flag为布尔变量,布尔变量的值为真或假,用0表示假,真是多少是不一样的. 所以我们应该避免将布尔变量与0或1这样的整型值进行比较. 那么我们也不应该写这样的代码: if(i) i为一个整型变量,但是写成上面那样就会被人误以为是布尔值,良好的编程习惯是这样的: if(i==0)或if(i!=0) 还有重要的一点是,我们不能将float型和double型数据与0这种整型变量进行==或!=. 因为

注意编码工作中的小细节

人们常说"细节决定成败". 编码工作中,同样需要关注细节. 本文将给出3个小实例来说明编码中关注细节的重要性,同时给出作者对如何注意编码细节的一点见解(说的不对,请指正). 例1 这个问题如此地显而易见,竟然没有被发现. List<int> numList = new List<int>(); numList.Add(3); numList.Add(1); numList.Add(4); numList.Add(2); numList.Add(5); numLi

Python 的lambda表达式的一些小细节

温故而知新,无意中发现以前实验lambda的时候写的测试代码,第一个反映就是,这是我写的????!!! 呵呵,想想XX语言刚把lambda正式加进去,python早早支持了,我可以大喊一声”Python是最好的语言“来找找骂吗? 哈哈. 不过,自从有了lambda,很多代码一行搞定.不过还是有很多不为一般人注意的小细节,详见下面代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3

Vue.js 和 MVVM 小细节

Vue.js 和 MVVM 小细节 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定. Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于View 层.它的核心是 MVVM 中的 VM,也就是 ViewModel. ViewModel负责连接 View 和 Mode