1,一行代码做一件事,不要在一行代码里面处理多件事。宁愿多声明几个变量,也要保持代码的清晰,因为代码的声明并不会占多少内存。
例如:
String tmpa = errIdList.get(i).toString().substring(2);
String tmpb = errIdList.get(j).toString().substring(2);
long a = Long.parseLong(tmpa, 16);
long b = Long.parseLong(tmpb, 16);
if( a>b )
{
//……
}
宁愿声明临时变量tmpa tmpb a b,也不要把一长串代码放到if的判断语句中。
2,把一个方法拆成几个方法:
类class
{
方法1()
{}
方法2()
{}
主函数main()
{
//调用方法1;
//调用方法2;
}
}
如果上述方法1或者方法2里面有大量代码做了多件事,可以继续细分:
类class
{
方法1.1()
{}
方法1.2()
{//调用方法1.1}
方法1.3()
{//调用方法1.2}
方法2.1()
{}
方法2.2()
{//调用方法2.1}
主函数main()
{
//调用方法1.3;
//调用方法2.2;
}
}
3,缓冲区的使用:
(1)读取文件时可使用BufferedReader;
(2)字符串写入文件 StringBuffer;
如果是将“字符串1”写入文件,可以直接用PrintWriter.print();
根据需要,如果涉及大量字符串拼接操作,使用StringBuffer可以提高效率。如果要将“字符串1”+“字符串2”+“字符串3”写入文件,要么先连接字符串再写入,要么调用三次print()方法连续写入,但是都不可取。可以如下:
//使用字符串缓冲区,按行写文件
StringBuffer strBuff = new StringBuffer(0);
for(int i = 0; i < errIdList.size(); i++)
{
//将需要写入的一整行添加到缓冲区
strBuff.setLength(0);
strBuff.append("字符串1").append("字符串2").append("字符串3");
/*等同于:
strBuff.append("字符串1");
strBuff.append("字符串2");
strBuff.append("字符串3");
*/
//再一次性从缓冲区写入文件
log.println(strBuff.toString());
log.flush();
}
(3)如何清空StringBuffer:
有两种方式:buff.setLength(0);buff.delete(0,buff.length);
(4)什么时候使用StringBuffer:
一般在拼接字符串操作时使用,避免多次产生新的String对象。如果在多线程下的话使用StringBuffer,单线程的话可使用StringBulder。
(5)在对字符串进行插入操作时,也可以考虑使用StringBuffer的insert()方法。
例如:
int end=str.length(); //定位结束位置
StringBuilder strBuffer=new StringBuilder(str);
while(end>3){
strBuffer.insert(end-3,','); //向字符串插入逗号得到类似"1,234,567"的新字符串
end-=3;
}
return strBuffer.toString();
4,有多个并列的for循环时,循环变量i在各自中声明,不要全局定义。
for(int i; )
{}
for(int i;)
{}
for(int i;)
{}
5,colletions.sort()方法的使用
(1)基本变量的比较
(2)自定义对象的比较
6,排序方式的选择:
一般冒泡排序较多;
具体情况具体分析(比如目标序列“基本上是”一个升序)(比如序列元素的多少);
7,properties文件的读取,可以方便地借用Properties类,调用其方法.propertyNames()、.getProperty();
8,文件读取处理:
(1)文件读取,如果是按行读取成字符串,要考虑特殊情况的出现,比如要提取.h文件的宏定义行,请考虑C语言中宏定义的换行(一行宏定义写成两行或者多行);
(2)如果采用.substring()方法对字符串处理,请考虑:标记是否准确,是否会移位,是否会受到注释的干扰。
(3)需要考虑到程序的易用性,当文件格式发生细微变动时,程序依旧能够正常处理。
(4)可以使用.split()方法,结合正则表达式来精确分割字符串。
9,
(1)使用System.arraycopy()对数组进行复制赋值,提高效率,比循环赋值快1倍。
(2)int[] rows = new int[必须指明长度]
(3) int[] a = xxxxx;
int[] b = xxxxx;
a = b; //把数组b的地址传给了a
(4) int[] a = xxxxx;
int[] b = xxxxx;
System.arraycopy(a,0,b,0,length); //把数组b的元素值复制到数组a中。
10,将Object类型转换为int类型:
(1) Integer.parseInt(String.valueOf(Object object)); //先转换为String
(2)Integer.parseInt((Object object).toString());
(3) ((Integer)(Object object)).intValue(); //先转换为Integer
11,replaceAll与replace的区别:
(1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("//d", "*")把一个字符串所有的数字字符都换成星号;
(3)相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用
replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的时,只替换第一次出现的字符串;
(4)另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;
(5)还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的.
举例如下:
String src = new String("ab43a2c43d");
System.out.println(src.replace("3","f"));=>ab4f2c4fd.
System.out.println(src.replace('3','f'));=>ab4f2c4fd.
System.out.println(src.replaceAll("//d","f"));=>abffafcffd.
System.out.println(src.replaceAll("a","f"));=>fb43fc23d.
System.out.println(src.replaceFirst("//d,"f"));=>abf32c43d
System.out.println(src.replaceFirst("4","h"));=>abh32c43d.
12,Long.decode()方法:
Long.decode可以解析以0x,0X,#,0开头的字符串转换为long型,分别表示这个字符串是16或8进制的数字字符串。而valueOf只能解析纯数字的10进制字符串。
例如:
System.out.println(Long.decode("011")); // 8进制,输出9.
System.out.println(Long.decode("#11")); // 16进制,输出17.
System.out.println(Long.decode("0X11"));// 16进制,输出17.
System.out.println(Long.decode("0x11"));// 16进制,输出17.
System.out.println(Long.decode("11")); // 10进制,输出11.
System.out.println(Long.valueOf("011")); // 输出11.
System.out.println(Long.valueOf("#11")); // 出错.
System.out.println(Long.valueOf("0X11"));// 出错.
System.out.println(Long.valueOf("0x11"));// 出错.
System.out.println(Long.valueOf("11")); // 输出11.
13,
清空有两种方式:buff.setLength(0);buff.delete(0,buff.length);
一般在拼接字符串操作时使用,如果在多线程下的话使用StringBuffer,单线程的话使用StringBulder
14,
(1)将数字转换成字符串
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
(2)将字符串转换成数值
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
(3)从字符串转换成数值的第2种办法
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
(4)日期类型转换
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
(5)int转成Integer
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
15,
获取类的唯一实例:
/**
* 获得类的唯一实例
*/
public static synchronized CDTEmfNeMsgProcessor getInstance()
{
if( instance == null)
{
instance = new CDTEmfNeMsgProcessor();
}
return instance;
}
在其它类中要调用此类的方法或者字段,不需要另外再去“CDTEmfNeMsgProcessor cdtEmfNeMsgProcessor = new CDTEmfNeMsgProcessor () ”,可以直接“CDTEmfNeMsgProcessor.getInstance().方法/字段”。
16,
刚刚遇到了一个异常抛出,最后定位发现问题在于——目标JTable会定时刷新,刷新过程会先清空内容然后重新加载一次,异常抛出正是因为在鼠标点击列表选中行时JTable正在清空,所以刷新时间越短,异常抛出的几率越大。
原来的列表清空方法如下:
int count = mainLogTableModel.getRowCount();
for (int i = 0; i < count; i++) {
mainLogTableModel.removeRow(0);
}
查了一些资料提供了其它的列表清空方法:
mainLogTableModel.getDataVector().clear();
mainLogTable.updateUI();
//通知所有侦听器,表的所有行单元格值可能已更改。
mainLogTableModel.fireTableDataChanged();
但是只修改清空方法不能完全解决问题,只是减小了异常抛出的几率,因为后者清空效率高于前者,但是存在鼠标点击选中列表的某一行时,该行因为清空而已经不存在了的情况,从而抛出异常。解决方法还在思考中,但是这一个地方已经值得注意了。
另外,新的清空方法中代码语句mainLogTable.updateUI();的作用是什么?