`
aihhd2008
  • 浏览: 25744 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

java方法概述

    博客分类:
  • java
 
阅读更多
检查参数的有效性
非公有的方法我们应该用断言的方法来检查它的参数,而不是使用通常大家所熟悉的检查语句来检测。如果我们使用的开发平台是JDK1.4 或者更高级的平台,我们可以使用assert结构;否则我们应该使用一种临时的断言机制。

有些参数在使用过程中是先保存起来,然后在使用的时候再进行调用,就必须做好检查工作,否则程序可能会抛出一些异常让你摸不着头 脑(如常见的空指针异常),也不能马上定位问题的所在位置,构造函数正是这种类型的一种体现,所以我们通常对构造函数参数的有效 性检查是非常仔细的。

总之,当编写一个方法或者构造函数的时候,应该考虑对应它的参数有哪些限制,并且要把这些限制写到文档中,在方法体的起始处,通 过显示的检查来实施这些限制。

需要时使用保护性拷贝
假设类的使用者会尽一切手段来破坏这个类的约束条件,在这样的前提下,你必须保护性地设计程序。面对客户的不良行为时仍然能保持 健壮性的类。
对于一个非可变类,可以考虑对其构造函数的可变参数采用保护性拷贝,如
public period(Date start, Date end){
 this.start = new Date(start.getTime());
 this.end = new Date(start.getTime());

// 接着做其他逻辑(保护性拷贝要在其他逻辑之前进行,并且有效性检查是针对拷贝后的对象,而不是原始对象)
}
对获取参数的get方法也要采用clone的方式返回,如:
public Date getStart(){
   return (Date)start.clone();
} 

非零长度的数组总是可变的,尽量使用非可变的对象作为内部组件,这样就不必关心保护性拷贝问题.

谨慎设计方法签名
1、谨慎选择方法的名字
    ① 选择易于理解的,并且与同一个包中的其他名字风格一致;
    ② 选择与大众认可的名字一致;
2、不要过于追求提供便利的方法。过多的方法会增加类的学习和使用成本,只有当一个操作被用得非常频繁的时候,才考虑为他提供一个 快加的方法。
3、避免过长的参数列表。太长的参数不便于使用者使用,尤其是参数类型相同的时候,很容易产生参数传递错误的问题。避免此类错误的 方法:
      ① 可以把一个方法分解成多个方法;
      ② 可以创建一个辅助类(helper class)。将参数组织成一个类作为参数传入;
4、对于类型参数,优先使用接口,而不是类。如参数为Map的时候,该方法可以接收Hashtable、HashMap、TreeMap等类型的参数。
5、谨慎使用函数对象

慎用重载
demo:
Public  class CollectionClassifier {
        public    static   String  classify(Set<?> s ) {
            return "set" ;
        }
      public    static   String  classify(List<?> lst) {
            return "List" ;
        }
      public    static   String  classify(Collection<?> c) {
            return "Unknown Collection" ;
        }
Public     static   void  main(String[]args) {
  Collection<?>[]   collections  = {
               new  HashSet<String>,
               new  ArrayList<BigInteger>(),
               new  HashMap<String,String>().values()
    };
for (Collection<?>c:collections)
   System.out.println(Classify(c));
   }
}

预期结果是: "set","List"  ,"Unknown Collection" 但是打印出来的却是三次"Unknown Collection"。在此程序中classify方法被重载了而调用哪个重载方法是在编译时决定的,循环中编译的类型都为Collection<?> ,所以每次调用这个方法。
对于 重载方法的选择是静态的,而对于被重写的方法的选择是动态的。
  class Water {
       String name()  {     return "Water " ;    }
     }
  class Snow  extends Water {
        String name() {  return “Snow”  ;        }
     }
  class Wine extends Water{
           String name() {    return "Wine " ;  }
        }
Public  class  Overriding {
       public     static   void  main(String[]args) {
         Water[ ]   waters= {   new Water(),new Snow(),new Wine()    };
for (Water water:waters)
   System.out.println(water.name()));
   }
}

打印出:"Water "  “Snow”    "Wine "   选择在编译时进行的,完全基于参数的编译时类型。
构造器重载中的特例:在java1.5发行之前,所有的基本类型都根本不同于所有的引用类型,但是在自动封装出现之后就出现了以下的情况:
     
   Public  class  SetList   {
            public  static void main(String[]args) {
               Set<Integer>  set  =new TreeSet<Integer>( );
              List<Integer>  list =new ArrayList<Integer>( );
                 for(int i=-3;i<3;i++) {
                       set.add(i);
                       list.add(i);
                  }
               for(int i=0;i<3;i++)  {
                   set.remove(i);
                   list.remove(i);
               }
System.out.println(set+""+list);
         }
}

实际发生情况是:set.remove(i)调用选择重载方法remove(E),这里的E是集合<Integer>类型,将从int自动装箱到Integer中,这是期望的行为而list.remove(i)调用选择重载方法remove(int i),他从列表指定位置上去除元素,从【-3,-2,-1,0,1,2】开始去除第零个元素,接着去除第一个,第二个,得到【-2,0,2】,要将list.remove的参数转化成Integer,迫使选择正确的重载方法,
for(int i=0;i<3;i++)  {
                   set.remove(i);
                   list.remove((Integer)i  );  // or  remove (Integer.valueOf(i))
}

List<E>接口有两个重载的remove方法:remove(E)和remove(int)在java1.5之前,List接口有一个remove(Object)而不是remove(E),相应的参数类型Object和int则根本不同,但自从有了泛型和自动装箱之后,破坏了List接口,所以自动装箱和泛型成了java语言的一部分之后,需要谨慎重载。

返回零长度的数组而不是null
    如果返回null,对于每次调用到该方法的时候都需要做null判断,否则很容易抛出空指针异常,推荐返回一个零长度的数组,在通常情况 下,这样的做法对性能几乎没有影响。

为所有导出的API元素编写文档注释
需要增加注释的地方:类、接口、构造函数、方法和域声明,方法注释的内容:
调用该方法的前提条件;
调用后的后续处理(如捕获异常);
副作用(如方法启动线程后带来的安全性);
参数@param Describe;
返回@return Describe;
异常@throws  if.....;
注意:注释中可以适用<p><code><tt>等HTML标签,但>,<等标签需要转义。
分享到:
评论

相关推荐

    010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述.rar

    010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述.rar

    XSLT 调用 Java 的类方法

    ### XSLT 调用 Java 的类方法详解 #### 一、背景介绍 XSLT(Extensible Stylesheet Language Transformations)是一种用于XML文档转换的语言。它允许开发者将一个XML文档转换为另一种结构的XML文档或其他格式的文档...

    Java语言概述 ppt

    Java语言概述 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1995年推出。它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性、高效性和多线程等特点,...

    5.java集合概述.zip

    5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5.java集合概述.zip5....

    java语言重要概述

    Java语言重要概述 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。它的设计目标是具有跨平台性、可移植性、安全性和高效性,使得Java成为开发桌面应用、Web...

    Java.方法概述

    那么我们最常见的方法,也是第一个看到的方法就是main方法,那么我们就以main方法为例,讲一下方法结构的组成。 main方法 public static void main(String[] args) { // 方法体 } /* public static :访问权限公共...

    Java实验:方法.docx

    方法概述 在Java中,方法是指一个可以被多次调用的代码块。方法可以接受参数,也可以返回值。方法可以提高代码的可读性和可维护性。 实验内容1:月份天数计算 在这个实验中,读者需要编写一个程序,提示用户输入...

    java语言概述

    java语言概述ppt,第一章java语言概述ppt,第一章,java语言概述ppt,第一章java语言概述ppt,第一章java语言概述ppt,第一章

    java第一章java概述教学课件

    Java语言是一种广泛应用于现代软件开发的高级编程语言,由Sun Microsystems的James Gosling于1991年发起,最初命名为Oak。随着Web的崛起,Java逐渐定位于互联网应用,并在1995年正式发布Java 1.0版本。自那时起,...

    Java的概述与基本语法规则

    一、Java概述 1. **平台无关性**:Java的跨平台特性源于其虚拟机(JVM,Java Virtual Machine),使得Java程序能在任何安装了JVM的设备上运行。 2. **类加载机制**:Java通过类加载器动态加载类,提高了程序的灵活性...

    Java概述Java概述Java概述

    Java 概述 Java 是一种广泛应用于 Internet 和 WWW 的编程语言,它的出现对整个计算机产业产生了深远的影响。Java 语言的诞生是为了在电视、控制烤面包箱等家用消费类电子产品上进行交互式操作,后来逐渐成为 ...

    JAVA概述JAVA概述

    JAVA概述

    004 Java学习 | Java语言概述

    Java语言概述 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1995年推出。它的设计目标是具有跨平台性、可移植性、安全性和高效性,使得Java在各种领域都有广泛应用,...

    Linux上执行带main方法的java文件

    ### Linux环境下执行含main方法的Java文件详解 #### 标题与描述概述 本文主要介绍如何在Linux系统中执行带有`main`方法的Java文件。通常情况下,在开发环境中可以直接通过IDE或其他工具运行Java应用程序;然而,在...

    Java概述PPT课件

    Java程序通常以main()方法作为程序的起点,由Java解释器执行。 总之,Java作为一种强大的编程语言和平台,以其可移植性、安全性和高效性,广泛应用于不同领域的软件开发,从简单的桌面应用到复杂的分布式系统,Java...

    完整版 Java编程基础入门教程 Java语言程序设计 第1章_java概述(共50页).ppt

    完整版 Java编程基础入门教程 Java语言程序设计 第1章_java概述(共50页).ppt 完整版 Java编程基础入门教程 Java语言程序设计 第2章_语言基础(共45页).ppt 完整版 Java编程基础入门教程 Java语言程序设计 第3章_...

    java技术概述_Java概述

    对象模型是Java设计的核心,允许开发者将数据和操作数据的方法封装在一起,形成类,这些类可以被实例化为对象。面向对象的特点还包括继承、封装和多态性,增强了代码的复用性和灵活性。 Java的平台独立性源于其字节...

    Java语言程序设计-1-Java概述

    Java语言程序设计的学习涵盖了从基础概念、面向对象的方法、图形用户界面(GUI)设计等多个方面,是信息技术相关专业的基础课程之一。 计算机是可编程的设备,能够自动执行存储的指令集,进行数值计算和信息处理。它...

    Java课件第一章java概述课件

    Java 语言概述 Java 是一种面向对象的、高级的、平台无关的编程语言,由 Sun Microsystems 公司在1991年推出的研究项目Green中诞生。它的设计初衷是为了简化软件开发,特别是在互联网和分布式计算环境中的应用。Java...

Global site tag (gtag.js) - Google Analytics