当前位置:编程学习 > JAVA >>

黑马程序员--java编程中一些小建议积累

建议1:

         不要在常量和变量中出现容易混淆的字母:如long i = 1L,表示long类型,后面的l最好大写

建议2:

         不要让常量蜕变成变量,常量应该在编译期就确定。

         如:publicstatic final int RAND_CONST = new Random().nextInt();

建议3:

         三元操作符的类型务必一致

如:


 

public class Suggest3 { 
 
    public static void main(String[] args) { 
        int i = 80; 
        String s = String.valueOf(i < 100 ? 90 : 100); 
// 100.0为float类型,返回值时,90会被自动提升为90.0,所以两个String不是同一个对象  
        String s1 = String.valueOf(i < 100 ? 90 : 100.0); 
        System.out.println(s == s1); 
        /*
         *  上面提到三元运算符的一个类型转换问题 
         *  1,若两个操作数不可转换,则不转换,返回Object
         *  2,若连个数都是明确的表达式,则int转long,long转float
         *  */ 
    } 
} 

public class Suggest3 {

 public static void main(String[] args) {
  int i = 80;
  String s = String.valueOf(i < 100 ? 90 : 100);
// 100.0为float类型,返回值时,90会被自动提升为90.0,所以两个String不是同一个对象
  String s1 = String.valueOf(i < 100 ? 90 : 100.0);
  System.out.println(s == s1);
  /*
   *  上面提到三元运算符的一个类型转换问题
   *  1,若两个操作数不可转换,则不转换,返回Object
   *  2,若连个数都是明确的表达式,则int转long,long转float
   *  */
 }
}

建议4:  

   使用变长方法时,避免带有变长参数的方法重载:

如:

 

public class Suggest4 { 
 
public static void main(String[] args) { 
    // 执行的是简单折扣的方法,虽然多次折扣的方法也包括了改参数类型  
    // 最好不要用,容易引起混淆  
    calPrice(100, 75); 
    calPrice(100, 75, 80); 
} 
 
public static void calPrice(int price, int discount) { 
    float money = price * discount / 100.0F; 
    System.out.println("折扣后的价是:" + money); 
} 
 
// 方法重载 ,传入可变长参数  
public static void calPrice(int price, int... discount) { 
    float money = price; 
    for (int d : discount) { 
        money = money * d / 100.0F; 
    } 
    System.out.println("多次折扣后的价是:" + money); 
} 

 public class Suggest4 {

 public static void main(String[] args) {
  // 执行的是简单折扣的方法,虽然多次折扣的方法也包括了改参数类型
  // 最好不要用,容易引起混淆
  calPrice(100, 75);
  calPrice(100, 75, 80);
 }

 public static void calPrice(int price, int discount) {
  float money = price * discount / 100.0F;
  System.out.println("折扣后的价是:" + money);
 }

 // 方法重载 ,传入可变长参数
 public static void calPrice(int price, int... discount) {
  float money = price;
  for (int d : discount) {
   money = money * d / 100.0F;
  }
  System.out.println("多次折扣后的价是:" + money);
 }
}

建议5:

   警惕自增的陷阱:

   看下面这段代码

 

public class Suggest5 { 
 
    public static void main(String[] args) { 
        int count = 0; 
        for (int i = 0; i < 10; i++) { 
//          count++是一个表达式,返回count自加前的值  
            count = count++; 
        } 
        System.out.println(count); 
    } 
} 

public class Suggest5 {

 public static void main(String[] args) {
  int count = 0;
  for (int i = 0; i < 10; i++) {
//   count++是一个表达式,返回count自加前的值
   count = count++;
  }
  System.out.println(count);
 }
}

输出count的值是0

建议6:

         避免instanceof非预期结果

/详细分析instanceof()  
public class Suggest6 { 
 
    public static void main(String[] args) { 
        // 判断String对象是否是Object对象的实例  
        // true  
        boolean b1 = "cloud" instanceof Object; 
        // String对象是否是String的实例  
        // true  
        boolean b2 = new String() instanceof String; 
        // Object对象是否是String的实例  
        // false,Object是String的父类,编译可以通过  
        boolean b3 = new Object() instanceof String; 
        // 拆箱类型是否是装箱类型的实例,编译不通过,char类型是基本类型,instanceof只用于对象的判断  
        // boolean b4 = 'A' instanceof Character;  
        // 空对象是否是String的实例  
        // false,规则:如果左操作数是null,则直接返回false不再运算右边  
        boolean b5 = null instanceof String; 
        // 转换类型后的null是否是String类型的对象  
        // false,null没有类型,做类型转换后还是null  
        boolean b6 = (String) null instanceof String; 
        // Data对象是否是String对象的实例,编译不通过,Date类和String没有继承或实现关系  
        // boolean b7 = new Date() instanceof new String;  
    } 
} 

//详细分析instanceof()
public class Suggest6 {

 public static void main(String[] args) {
  // 判断String对象是否是Object对象的实例
  // true
  boolean b1 = "cloud" instanceof Object;
  // String对象是否是String的实例
  // true
  boolean b2 = new String() instanceof String;
  // Object对象是否是String的实例
  // false,Object是String的父类,编译可以通过
  boolean b3 = new Object() instanceof String;
  // 拆箱类型是否是装箱类型的实例,编译不通过,char类型是基本类型,instanceof只用于对象的判断
  // boolean b4 = 'A' instanceof Character;
  // 空对象是否是String的实例
  // false,规则:如果左操作数是null,则直接返回false不再运算右边
  boolean b5 = null instanceof String;
  // 转换类型后的null是否是String类型的对象
  // false,null没有类型,做类型转换后还是null
  boolean b6 = (String) null instanceof String;
  // Data对象是否是String对象的实例,编译不通过,Date类和String没有继承或实现关系
  // boolean b7 = new Date() instanceof new String;
 }
}

 

 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,