开题:EffectiveJava

来源:互联网 发布:手机arp防火墙软件 编辑:程序博客网 时间:2024/05/20 07:50

  相信许多人第一次看见这个书名,都会认为这本书是将高效的Java的,其实不然,其实这本书主要是讲“有效的”Java,之所以在这里打上引号,主要是为了引起重视,何为有效,我认为是简单,明了,健壮,灵活,可维护,从而升华到高效的一种过程。
  正如我本人一样,我并不是Effective的,从两种意义上来说都是的,但是人是会变的,社会带来的也好,自己带来的也好,总之,我决定当一个Effective的人,这些都是空谈,所以在这里写一个开题,来帮助自己更好的学习这本书上的内容。
  这个开题也相当于是对这本书的第一章的一个总结,对自己所重新认识的Java的一个总结。
  Java语言支持的四种类型:

  • 接口(interface)
  • 类(class)
  • 数组(array)
  • 基本类型(primitivee)

  其中前三种是引用类型。
  在本书中,我看到了一个概念,方法的签名(signature),签名是由它的名称和所有参数类型组成,而不包括它的返回类型,这个我以前在C/C++中碰到过,在Java中我认为会是相同的方式,主要是为了解决方法的重载的问题,有异曲同工之妙。这里就给大家展示一下如何去查看方法的签名和自己能够写出方法的签名。
  首先,如果你的电脑已经安装好了Java环境(我的是Windows),那么在CMD中通过输入java - version就可以查看自己的Java版本了,然后在命令行中输入:

javap -s java.util.Date

  就可以查看到Date这个类的各种方法的签名,以下是部分的方法签名,现在就拿出其中几个进行解析:

public java.util.Date();    descriptor: ()V  public java.util.Date(long);    descriptor: (J)V  public java.util.Date(int, int, int);    descriptor: (III)V  public java.util.Date(int, int, int, int, int);    descriptor: (IIIII)V  public java.util.Date(int, int, int, int, int, int);    descriptor: (IIIIII)V  public java.util.Date(java.lang.String);    descriptor: (Ljava/lang/String;)V  public java.lang.Object clone();    descriptor: ()Ljava/lang/Object;  public static long UTC(int, int, int, int, int, int);    descriptor: (IIIIII)J

  解析:

public java.util.Date(int, int, int, int, int);    descriptor: (IIIII)V

  在这个函数中我们可以看到函数名是public java.util.Date(int,int,int,int,int),该函数接收五个int类型的参数,而没有返回值,所以该函数的descriptor即是该方法的描述,即(IIII)V,括号中的没一个字母代表一个参数类型,字母的个数代表参数的个数,括号后面的V则代表该方法的返回值为void。

public java.lang.Object clone();    descriptor: ()Ljava/lang/Object;

  在这里,同样按照上面的方法,可以看出该方法接收0个参数,所以可以写出其参数部分的描述为(),其返回值是java.lang.Object。所以签名为()Ljava/lang/Object。
  下面举几个例子和列出对应关系。

  1. 对应关系
Java 类型 类型签名 boolean Z byte B char C short S int I long L float F double D 类 L全限定名;,比如String, 其签名为Ljava/lang/util/String; 数组 [类型签名, 比如 [B

2. 例子
有方法 1):

public string addUser(String name, int index)

其对应的签名如下:

(Ljava/util/String;I)Ljava/util/String;

方法 2):

public int addPhone(int index, String phone,int[] arr)

其对应的签名如下:

(ILjava/util/String;[I)I
0 0
原创粉丝点击