Java编程思想——那些易被忽视的关键点(三)

时间:2021-11-12 19:27:20

1.Java数组:声明有俩种方式---"int[] a;"---"int a[];",在实际开发中Java常用第一种,表示一个int类型的数组a。如果创建了一个非基本类型的数组则称此数组为引用数组,在数组中需要注意以下几个方面:

{
  int[] a={1,2,3,4,5};//第一种初始化方式,只能紧随定义的数组之后
//------------------------------------
  int[] b=new int[5];//第二种初始化方式,可以在定义后的任意位置进行操作
  for(int i=0;i<5;i++){
     b[i]=i+1;
  }
//------------------------------------
  Random rand=new Random(30);
  int[] c=new int[rand.nextInt(20)];//为数组c申请20以内的随机数的内存空间
//------------------------------------
  c=b;//及将b引用指向的数组也让c指向,此时c和b中数组的数字实际为同一份
}

2.可变参数的使用:Java中的可变参数是依靠Java的一个特征,即所有的对象都继承Object类,所以只要参数类型为Object就可以接收任意类型的参数,可变参数有俩种书写方式,如下:

class Test{
   public void f(Object[] o){}//方法一
   public void d(Object... s){}//方法二,注意这里必须是"..."结构
}

在书写为第二中方式后,实际经过编译器编译后的结果仍为第一种的数组格式,当然参数列表中的Object可以换成任意类型,可以是基本类型也可以是引用类型,只是此时只能传递指定类型的任意个数的参数,效果如下:

class Test{
  public static void f(Object... o){
    System.out.println("Object--");
    for(Object ob:o){
       System.out.print(" "+ob);
    }
  }
  public static void d(int... i){
    System.out.println("int--");
    for(int in:i){
       System.out.print(" "+in);
    }
  }
  public static void main(String[] args)
  {
     f(1,2,3,4,5);
     f("abc","java","j2ee");
     d(1,2,3);
  }
}
out:
Object--
 1 2 3 4 5
Object--
 abc java j2ee
int--
 1 2 3
对于在 重载方法中使用可变参数,由于编译器较难识别,如若处理不当往往会报错【CompileTimeError】,所以可以尽量选择不用, 但是如果要用,最好在参数列表中都添加其他非可变参数来区分
class Test{
  public static void f(Object... o){ }
  public static void f(int... i){ }
  public static void main(String[] args)
  {
     f(1,2,3,4,5);
     f("abc","java","j2ee");
  }
}
//以上代码会报错,因为不能确定该调用哪个重载方法,此时产生歧义性
//------------------------------------
//通过添加非可变参数进行重载方法的区别
class Test{
  public static void f(int i,Object... o){ 
    System.out.println("first");
  }
  public static void f(String st,int... i){
  System.out.println("second"); 
  }
  public static void main(String[] args)
  {
     f(5,1,2,3,4,5);
     f(4,"abc","java","j2ee");
     f("java",1,2,3);
  }
}
out:
first
first
second

3.Java中的枚举-enum:首先,要清楚枚举类型并不是Java所特有的,C和C++中都有枚举类型。其次,枚举类型其实不算一种新的数据类型,其与其他的普通类的区别是在编译时会产生一些其他的行为。还要知道的是,枚举类型的实例是常量,因此其命名一般采用全大写字母表示(如果有多个单词需用下划线’_‘隔开)。

public enum EnumTest{
   //创建枚举类型
   JAVA,J2EE,JAVASE,ANDROID
}
public class TestEnum{
  public static void main(String[] args)
  {
     EnumTest e=EnumTest.JAVA;
     System.out.print(e);
  }
}
out:
JAVA

Java中在创建枚举引用时会自动添加一些方法,如下:

  • toString()——方便像上边例子一样显示枚举实例的名字。
  • ordinal()——可通过此方法查看枚举常量声明的顺序。
  • static values()——用来按照枚举常量的声明顺序产生由这些常量构成的数组。
public class TestEnum{
  public static void main(String[] args)
  {
    for(EnumTest e=EnumTest.values())
    {    
       System.out.println(e+"——"+e.ordinal);
    }
   
  }
}
out:
JAVA——0
J2EE——1
JAVASE——2
ANDROID——3

此外,enum最常使用场景为与switch的结合:

{
   //EnumTest en;
   switch(en){
      case JAVA:
      case J2EE:
      ...
   }
}

到此为之,根据阅读《Java编程思想》的顺序(第四版p1-p108),Java中的一些易被忽视或者易被遗忘的重点、关键点就全部总结完成,由于Java语言博大精深,这些知识点还是比较浅的,接下来随着对此书的学习会更加深入的整理总结Java内容,希望我的记录可以对我和读者们有一些帮助。