`

java基础要点

    博客分类:
  • 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();











还妄对尔等有些用处,如没有,仅当娱乐则已。(资料积累)

分享到:
评论

相关推荐

    java基础要点总汇

    ### Java基础要点总汇 Java作为一门广泛应用的编程语言,其基础要点对于初学者尤为重要,以下是对给定文件中提及的Java基础知识的深入解析。 #### 1. Java历史与学习路径 - **历史**: Java由Sun Microsystems在...

    java基础要点总结学习java必看.pdf

    以下是对"java基础要点总结学习java必看.pdf"文件中提到的一些关键知识点的详细说明: 1. **Java程序结构**:Java程序由一个或多个类(CLASS)组成。编写Java程序时,我们使用`javac`命令进行编译,生成.class文件...

    java基础要点总结学习java必看[文].pdf

    以下是对标题“java基础要点总结学习java必看[文].pdf”和描述中的知识点的详细说明: 1. **Java程序结构**:一个Java程序由一个或多个类(CLASS)组成。编写Java程序时,首先使用`javac`命令进行编译,然后使用`...

    java-基础要点总结-学习java必看.docx

    Java基础要点总结 Java基础知识点总结 1. Java程序的组成 Java程序是由一个或多个class组成的程序。编写Java程序需要使用javac命令进行编译,生成class文件,然后使用java命令对class文件进行执行。 2. 类名的...

    java面试要点集合

    里面包含多个知名公司的面试题目,而且覆盖了ssh、数据库、java基础、js框架的各方面的面试题,总共四十一份 神舟航天软件公司 1、xml解析方式 2、ejb几种类型 3、String和StringBuffer区别 4、jsp有哪些动作标记 5...

    java基础知识要点汇总

    以下是一些关键的Java基础知识要点: 1. **Java语法基础** - **数据类型**:Java分为基本数据类型(如整型、浮点型、字符型和布尔型)和引用数据类型(类、接口和数组)。理解它们的区别和用法是编程的基础。 - *...

    Essential Java,是一本关于Java编程基础的书 《Java编程要点》是一本Java的学习教程,主要介绍Java中应用广泛的部分,其中还包括最新版本Java 8中的新特性,也有教程.zip

    《Java编程要点》Essential Java,是一本关于 Java 编程要点的书。本书还有一个 GitBook 版本 http: //waylau.gitbooks.io/essential-java。《Java编程要点》是一本Java的开源学习教程,主要介绍Java中应用广泛的...

    java基础重点难点

    ### Java基础重点难点详解 #### 一、ArrayList与Vector的区别 **安全性方面:** - `Vector`类在设计上提供了线程安全的实现。 - `ArrayList`类则没有提供线程安全机制。 **同步机制:** - `Vector`类的所有方法都...

    java基础知识要点

    ### Java基础知识要点详解 #### 一、方法重载(Overloading)与方法重写(Overriding) 在Java中,**方法重载**(Overloading)和**方法重写**(Overriding)是两个重要的概念,它们虽然都涉及到方法名称的重复使用,但其...

    Java基础语法)教案

    ### Java基础语法教案知识点解析 #### 一、Java开发环境搭建 **1.1 Java语言概述** - **视频摘要:** 引入Java语言的历史和发展,包括它的起源、发展历程及其广泛的应用场景。通过介绍Java的特点(如面向对象、跨...

    北大青鸟 S1 java 知识要点总结

    北大青鸟 S1 Java 知识要点总结 本文总结了 Java 语言的基础知识点,涵盖了 Java 语言的基本概念、变量、数据类型、运算符、IDE 的使用、环境变量的配置等方面。 Java 基础概念 * 程序是一系列指令的集合,旨在...

    java基础知识要点精华

    根据提供的文档内容,我们可以整理出Java基础知识中的几个关键知识点,并对其进行详细解释: ### 1. 变量初始化 - **静态变量初始化**:在类加载时进行,静态变量默认值为0(对于`int`类型)。 - **非静态变量初始...

    java 学习要点总结

    Java 学习要点总结 Java 学习总结 Unit 1 相关概念: 1. JDK (Java Develop Kit):Java 开发工具包。 2. JRE (Java Runtime Environment):Java 运行环境。 3. J2EE (Java Enterprise Edition):Java 企业版,...

    java笔记java基础笔记

    根据提供的信息,我们可以总结出以下Java基础知识要点: ### Java 基础笔记 #### 位运算符 在Java中,位运算符用于处理整数的二进制位。主要包括左移`、右移`&gt;&gt;`以及无符号右移`&gt;&gt;&gt;`。 - **左移运算符 `**:将一...

    JAVA基础视频全套下载地址(适合初学者)

    根据提供的文件信息,我们可以归纳出一系列与Java基础知识相关的学习要点,尤其针对初学者。下面将对这些要点进行详细的阐述。 ### Java基础知识概览 #### 一、Java编程环境搭建 - **JDK安装**: JDK(Java ...

    Java 基础知识总结(超级经典)

    ### Java基础知识总结(超级经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人发起的Oak项目,最初目标是为了控制嵌入式设备,如有线电视交换盒和个人数字助理(PDA)。...

    java基础知识总结(经典).pdf

    ### Java基础知识总结 #### 一、Java概述 Java是由Sun Microsystems公司(现已被Oracle收购)在1991年由James Gosling领导的团队所开发的一种面向对象的编程语言。最初被命名为Oak,目的是为了控制嵌入式设备和...

    传智播客毕向东Java基础全套视频教程下载地址

    根据提供的信息,我们可以总结出以下关于“传智播客毕向东Java基础全套视频教程”的相关知识点: ### 一、教程概述 #### 1. 教程名称:传智播客毕向东Java基础全套视频教程 - **教程目标**:本教程旨在为初学者...

Global site tag (gtag.js) - Google Analytics