java编程注意

1.使用构造函数 string() 带来的内存性能隐患和缓解

用户自己构建缓存,这种方式的优点是更加灵活。创建HashMap,将需缓存的String作为key和value存放入HashMap。假设我们准备创建的字符串为 key,将Map cacheMap作为缓冲池,那么返回 key 的代码如下:

  private String getCacheWord(String key) { 

     String tmp = cacheMap.get(key); 

     if(tmp != null) { 

            return tmp; 

     } else { 

             cacheMap.put(key, key); 

             return key; 

     } 

  }  

2.在拼接动态字符串时,尽量用StringBuffer或StringBuilder的append,这样可以减少构造过多的临时String对象。

如果知道StringBuilder的大小的话,最好初始化容量

StringBuffer sb = new StringBuffer("Hello" + getWorld());

sb.append("Calling From " + getJava());

正确的做法:

StringBuffer sb = new StringBuffer("Hello");

sb.append(getWorld());

sb.append("Calling From ");

sb.append(getJava());

3.如果只是查找单个字符的话,用charat()代替startswith() .

4.在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话

5.不要在循环中调用synchronized(同步)方法 

6.整合try/catch.将try/catch块移出循环.也尽量不要嵌套

7.用stringtokenizer代替indexof()和substring()

8.使用'system.arraycopy ()'代替通过来循环复制数组

9.不用new关键字创建对象的实例

用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用她的clone()方法。clone()方法不会调用任何类构造函数。

下面是Factory模式的一个典型实现。

public static Credit getNewCredit()

{

    return new Credit();

}

改进后的代码使用clone()方法,

private static Credit BaseCredit = new Credit();

public static Credit getNewCredit()

{

    return (Credit)BaseCredit.clone();

}

10.HaspMap的遍历

Map<String, String[]> paraMap = new HashMap<String, String[]>();

for( Entry<String, String[]> entry : paraMap.entrySet() )

{

    String appFieldDefId = entry.getKey();

    String[] values = entry.getValue();

}

利用散列值取出相应的Entry做比较得到结果,取得entry的值之后直接取key和value

11.尽量指定类为final

如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%.

12.尽量使用局部变量-调用中创建的临时变量都保存在栈(Stack)中,速度较快

13.常常记得将不使用的对象设为null

14.尽量使用方法同步代替代码块同步(在使用同步机制时)

15.尽量减少对变量的重复计算

例如:for(int i = 0;i < list.size(); i ++) { // 每次循环都要计算一次list的size()

             …

}

应替换为:

for(int i = 0,int len = list.size();i < len; i ++) {

             …

}

16.用移位操作替代乘法和除法

 17.array(数组) 和 ArryList的使用:尽可能使用array

array([]):最高效;但是其容量固定且无法动态改变;

ArrayList:容量可动态增长;但牺牲效率;

基于效率和类型检验,应尽可能使用array,无法确定数组大小时才使用ArrayList

 18.尽量使用HashMap 和ArrayList ,除非必要,否则不推荐使用HashTable和Vector ,后者由于使用同步机制,而导致了性能的开销。

 19.在循环外创建变量

 20.用长度为0来判断字符串为空字符串

 21.不要多此一举

StringBuffer buf = new StringBuffer();

buf.append("Hello").append(" ").append("World");

正确的做法:

StringBuffer buf = new StringBuffer();

buf.append("Hello World");

 22.A Thread which is created without specifying a run method does nothing other than a delay in performance.

public void method() throws Exception

{

    new Thread().start();

}

正确的做法:

public void method(Runnable r) throws Exception

{

    new Thread(r).start();

}

 23.Creation of constant immutable objects that are not assigned to static final variables lead to unnecessary memory consumption. 

public class Test

{

protected Object[] getObjects() 

{

        return new Object[0];

      }

 

    publicstatic Integer convertToInt(String s) 

    {

        if (s == null || s.length() == 0)

  {

            return new Integer(-1);

  }else {

            return new Integer(s);

  }

    }

}

修改为:

public class Test 

{

public static final Object[] NO_OBJECTS = new Object[0];

 

    protected Object[] getObjects() 

    {

        return NO_OBJECTS;

    }

 

    private static final Integer INT_N1 = new Integer(-1);

 

    public static Integer convertToIn(String s) {

        if (s == null || s.length() == 0)

{

            return INT_N1;

}else{

            return new Integer(s);

}

    }

}

 24.如果计算可以放到循环外,就尽量放到循环外

 25.避免重复else if的重复判断

 26.使用entrySet()代替keySet()

public void method()

{

Map m = new HashMap();

Iterator it = m.keySet().iterator();

Object key = it.next();

Object v = m.get(key);

}

正确的做法:

public void method()

{

Map m = new HashMap();

Set set = m.entrySet();

Object keyValuePair = it.next();

}

附keySet使用实例:

public void someMethod(HashMap collection)

{

        Set keySet = collection.keySet();

        Iterator keyIter = keySet.iterator();

        while (keyIter.hasNext()) 

{

            keyIter.remove();

        }

}

 27.移除一个集合的某一项

public void someMethod(Collection collection)

{

Iterator iter = collection.iterator();

while (iter.hasNext()) 

{

Object element = iter.next();

collection.remove(element); 

}

}

正确的做法:

public void someMethod(Collection collection)

{

Iterator iter = collection.iterator();

while (iter.hasNext()) 

{

iter.remove();

}

}

 28. Do not declare members accessed by inner class private. 

 

public class Do_not_declare_members_accessed_by_inner_class_private_violation 

{

private int iVar = 0;

class inner

{

int var2;

public void foo()

{

var2 = iVar;

// ...

}

}

}

正确应该是:

public class Do_not_declare_members_accessed_by_inner_class_private_correction 

{

int iVar = 0;

class inner

{

int var2;

public void foo()

{

var2 = iVar;

// ...

}

}

}

29.Use BufferedInputStream and BufferedOutputStream or equivalent buffered methods wherever possible.

 30.Use instanceof only on interfaces and avoid null check before checking instanceof. 

if (o instanceof MyInterface) { }

 31.use .class instead of .getClass()

 32.The inner class that doesn't require the outer class reference, should be declared static.

 33.Instead of calling executeUpdate, use executeBatch. 

 34.Use toArray(Object[]) instead of toArray() on collection.

 35. 避免使用yield()方法,可使用wait()代替。

 36.ArrayList的话初始化容量最好了,不过如果知道大小就不用它了,直接用Array了

 37.优先使用DataSource获取Connection对象,而不是DriverManager

 38.出于性能方面的考虑,尽量不要使用Thread.sleep(),可使用this.wait()代替。

 39.Use char[] representation of the string instead of using String.charAt()

for(int i=0; i<str.length(); i++)

{

System.out.println(str.charAt(i));

}

比较正确的做法:

char[] carr = str.toCharArray();

for(int i=0; i<carr.length; i++)

{

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

}

 40.避免使用java.lang.reflect包

Class c = Class.forName(classname);

Method m = c.getMethod("getData",null);

m.invoke(c.newInstance(), null);   

可优化为:

Class c = Class.forName(classname);

IDataProvider dataprovider = (IDataProvider) c.newInstance();

return dataprovider.getData(); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
04-26
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值