jdk7中switch表达式可以是String。这算不算

解决方案 »

  1.   

    我们打印字符串的时候一直只知道有System.out.print和System.out.println两个函数,我也是最近才知道,原来java还有提供类似c语言的printf函数。
    String name = "张三";
    int age = 20;
    System.out.printf("您的姓名是:%s,年龄是:%d", name, age);
      

  2.   

    说一个可能大家都知道的:java最大的特性是与平台的无关性,因为java是运行在java虚拟机上,即jvm(Java Virtual Machine),它是通过在实际计算机上仿真模拟各种计算机功能来实现的。它负责与操作系统交互,用来屏蔽操作系统环境,供java运行,使得Java程序只需生成能在Java虚拟机上运行的字节码即可。
      

  3.   

    java火起来的很大一部分跟他的跨平台有关系,但现在感觉跨平台已经不是他的优势了。.net貌似也可以跨平台了
      

  4.   

    使用enum来实现单例类,以前不知道enum中还可以定义方法!enum Singleton {
    INSTANCE;
    public void dosth() {
    System.out.println("do sth....");
    }
    }public class Test {
    public static void main(String[] args) {
    Singleton singleton = Singleton.INSTANCE;
    singleton.dosth();
    }
    }
      

  5.   

    String 对象不可变,相加时先转化为StringBuffer,调用append方法,最后再转化为String,原先的String再引用它
      

  6.   

    .net是用什么方式实现跨平台的呢?
      

  7.   

    类成员变量加载顺序为:父类静态块(静态变量) --> 然后是子类静态块(静态变量) --> 父类成员变量 --> 父类构造函数块 --> 子类成员变量 --> 子类构造函数块
      

  8.   

    静态方法调用的限定表达式是可以计算的,但是它的值将被忽略。无非空限制
    System.out.println(((Math) null).random());
      

  9.   

    可变参数的应用(C,CPP都有这种语法,最典型的就是字符串format的实现):
    public PrintWriter format(String format, Object ... args);
      

  10.   


    其实如果是少量字符串的拼接操作,可以使用+操作。如果拼接比较频繁,就可以按照你的讲法来实现了。

    现在使用StringBuilder。 + 操作会被编译器转成 StringBuilder的append
      

  11.   

    顶一个,这个好玩~
    猜测静态方法,只和类有关,无需判断对象。
    值将被忽略是啥意思啊?我试了下如下代码,是可以正确取得结果的:
            Math m = null;
            System.out.println(m.random());
    打印一串小数。
    看上哪个回复,点下“对我有用”呗?其实如果是少量字符串的拼接操作,可以使用+操作。如果拼接比较频繁,就可以按照你的讲法来实现了。

    我说的是+的内部实现过程
    我懂你的意思,学习啦~
    请问,这种操作符的内部处理,有没有相关的博文或者书籍呀?
    其实如果是少量字符串的拼接操作,可以使用+操作。如果拼接比较频繁,就可以按照你的讲法来实现了。

    现在使用StringBuilder。 + 操作会被编译器转成 StringBuilder的append
    多谢分享。~
    StringBuilder线程不安全,因此大家在使用+操作拼接字符串的时候,要注意线程安全问题。
      

  12.   

    String 的 + 操作,写段代码,编译后,用 javap -c 查看。
      

  13.   

    String 的 + 操作,写段代码,编译后,用 javap -c 查看。
    Nice~
      

  14.   

    推荐看下 Thinking in Java 里面讲的东东 看的我不知所云, 唉 .
    求看后感...
      

  15.   

    printf这个很好,还可以格式化输出。。和C语言的printf很像
    System.out.printf("%s,%d,%.2,%n(换行)");
      

  16.   

    我们一般在编写java代码的时候,一般都是用英文字母、下划线、数字等作为类名、变量名等,但是实际上java完全可以支持使用中文作为这些名称。
    如下代码,也是可以运行的。public class 测试 {
    public static void main(String[] args) {
    String 姓名="张三";
    int 年龄=30;
    System.out.printf("姓名:%s,年龄:%d",姓名,年龄);
    }
    }
      

  17.   


    c的性能比java高,那得看是做什么类型的应用。现在java的性能已经不是问题了,虽然说理论上肯定没有c的性能高,但是在有些应用,如web,java的性能会表现的非常高,因为用c来开发这种应用,会消耗大量的开发成本且不一定效率就比java高多少,用c稍微处理不好的话(不是所有的程序员都能保证程序中没有失误)还不如java。另外把用java开发降低成本的钱多买台服务器,做个集群,比c写的性能肯定更好。
      

  18.   


    静态方法绑定会绕过对具体 reference 的检查,这个以前真不知道。
    专门去查了 JLS 7 编译时方法绑定的部分,于是有了下面的代码,猜猜看能不能编译,如果能,这些方法调用都输出什么:
    public class MethodDeterminationTest {
      
      public static void main(String[] args) {
        
        Object o = "abc";
        
        MethodDeterminationTest.print(o);
        
        MethodDeterminationTest.<String>print("abcd");
        
        MethodDeterminationTest.<Integer>print(5);
        
        MethodDeterminationTest.<Integer>print("abcd");
        
        ((MethodDeterminationTest)null).<Number>print(5.0);
      }
      
      public static <E> void print(E e) {
        
        System.out.println("generic " + e);
      }
      
      public static void print(String s) {
        
        System.out.println(s);
      }
    }
    其实知道这些大概也很少用到,不过可能极少数的情况当你debug别人糟糕至极的overloading代码的时候,知道这些脑子里至少会有一根警惕的弦。
      

  19.   


    静态方法绑定会绕过对具体 reference 的检查,这个以前真不知道。
    专门去查了 JLS 7 编译时方法绑定的部分,于是有了下面的代码,猜猜看能不能编译,如果能,这些方法调用都输出什么:
    public class MethodDeterminationTest {
      
      public static void main(String[] args) {
        
        Object o = "abc";
        
        MethodDeterminationTest.print(o);
        
        MethodDeterminationTest.<String>print("abcd");
        
        MethodDeterminationTest.<Integer>print(5);
        
        MethodDeterminationTest.<Integer>print("abcd");
        
        ((MethodDeterminationTest)null).<Number>print(5.0);
      }
      
      public static <E> void print(E e) {
        
        System.out.println("generic " + e);
      }
      
      public static void print(String s) {
        
        System.out.println(s);
      }
    }
    其实知道这些大概也很少用到,不过可能极少数的情况当你debug别人糟糕至极的overloading代码的时候,知道这些脑子里至少会有一根警惕的弦。加两条:
        MethodDeterminationTest.print(null);
        
        MethodDeterminationTest.<Integer>print(null);
      

  20.   


    静态方法绑定会绕过对具体 reference 的检查,这个以前真不知道。
    专门去查了 JLS 7 编译时方法绑定的部分,于是有了下面的代码,猜猜看能不能编译,如果能,这些方法调用都输出什么:
    public class MethodDeterminationTest {
      
      public static void main(String[] args) {
        
        Object o = "abc";
        
        MethodDeterminationTest.print(o);
        
        MethodDeterminationTest.<String>print("abcd");
        
        MethodDeterminationTest.<Integer>print(5);
        
        MethodDeterminationTest.<Integer>print("abcd");
        
        ((MethodDeterminationTest)null).<Number>print(5.0);
      }
      
      public static <E> void print(E e) {
        
        System.out.println("generic " + e);
      }
      
      public static void print(String s) {
        
        System.out.println(s);
      }
    }
    其实知道这些大概也很少用到,不过可能极少数的情况当你debug别人糟糕至极的overloading代码的时候,知道这些脑子里至少会有一根警惕的弦。
    求指教:
          MethodDeterminationTest.<String>print("abcd");//编译失败,因为下面已经有了print(String s)方法的定义,优先使用类型明确的方法,前面加了泛型判断,所以报错了?
          
    是这样的么?
      

  21.   


    静态方法绑定会绕过对具体 reference 的检查,这个以前真不知道。
    专门去查了 JLS 7 编译时方法绑定的部分,于是有了下面的代码,猜猜看能不能编译,如果能,这些方法调用都输出什么:
    public class MethodDeterminationTest {
      
      public static void main(String[] args) {
        
        Object o = "abc";
        
        MethodDeterminationTest.print(o);
        
        MethodDeterminationTest.<String>print("abcd");
        
        MethodDeterminationTest.<Integer>print(5);
        
        MethodDeterminationTest.<Integer>print("abcd");
        
        ((MethodDeterminationTest)null).<Number>print(5.0);
      }
      
      public static <E> void print(E e) {
        
        System.out.println("generic " + e);
      }
      
      public static void print(String s) {
        
        System.out.println(s);
      }
    }
    其实知道这些大概也很少用到,不过可能极少数的情况当你debug别人糟糕至极的overloading代码的时候,知道这些脑子里至少会有一根警惕的弦。
    求指教:
          MethodDeterminationTest.<String>print("abcd");//编译失败,因为下面已经有了print(String s)方法的定义,优先使用类型明确的方法,前面加了泛型判断,所以报错了?
          
    是这样的么?
    你的 Java 是什么版本? 我用 Java 6 (IDE Netbeans 7.2) 编译运行都没问题。
      

  22.   

    .net是用什么方式实现跨平台的呢?framework
      

  23.   


    静态方法绑定会绕过对具体 reference 的检查,这个以前真不知道。
    专门去查了 JLS 7 编译时方法绑定的部分,于是有了下面的代码,猜猜看能不能编译,如果能,这些方法调用都输出什么:
    public class MethodDeterminationTest {
      
      public static void main(String[] args) {
        
        Object o = "abc";
        
        MethodDeterminationTest.print(o);
        
        MethodDeterminationTest.<String>print("abcd");
        
        MethodDeterminationTest.<Integer>print(5);
        
        MethodDeterminationTest.<Integer>print("abcd");
        
        ((MethodDeterminationTest)null).<Number>print(5.0);
      }
      
      public static <E> void print(E e) {
        
        System.out.println("generic " + e);
      }
      
      public static void print(String s) {
        
        System.out.println(s);
      }
    }
    其实知道这些大概也很少用到,不过可能极少数的情况当你debug别人糟糕至极的overloading代码的时候,知道这些脑子里至少会有一根警惕的弦。
    求指教:
          MethodDeterminationTest.<String>print("abcd");//编译失败,因为下面已经有了print(String s)方法的定义,优先使用类型明确的方法,前面加了泛型判断,所以报错了?
          
    是这样的么?
    你的 Java 是什么版本? 我用 Java 6 (IDE Netbeans 7.2) 编译运行都没问题。
    1.5的
      

  24.   


    int i=0;
    i=i++;
    System.out.println(i);输出结果为0;后自增原理:首先声明一个临时变量存储i未自增的值  int temp=i; 即此时 temp=0
    然后i自增加1, i=i+1;  最后返回temp, 即return temp;
    也就是说 在最后执行到i=i++; 的时候  因为++的运算符优先级 高于=, 所以 i会等于 i++;  的返回值,即 i=temp=0;.....在这段程序i的变化时 i...>0.....>1.....>0
      

  25.   

    .net是用什么方式实现跨平台的呢?.net貌似更多的是跨语言
      

  26.   

    许多人时间转换时,自己乘一串数字,其实 java.util.concurrent.TimeUnit 提供了转换方法:如 5天是多少秒 TimeUnit.DAYS.toSeconds(5l); 不必 60l × 60 × 24 × 5
      

  27.   

     null instanceof Xxxx 返回 false
    所以 
     aObject != null && aObject instanceof Xxxx 前面的非null判断是多余的。=============================================Collections.<String,Integer>emptyMap()=============================================
    public class Baz<T extends Foo & Bar> {}==============================================
    List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};Map<String,String> codes = new HashMap<String,String>(){{ 
      put("1","one"); 
      put("2","two");
    }};
      

  28.   

    补充一点,java语言和java虚拟机将来会是两个方向独立发展,因为java虚拟机可以运行字节码文件,而字节码文件不一定只能由java语言生成,事实上,现在已经有一些语言,可以生成字节码,运行于Java虚拟机,如JRuby,Groovy等,期待jvm未来更通用。
      

  29.   

    先顶下,然后我自己做了个样例来理解2、3两点的用法:
    public class Test2
    {    public static void main(String[] args)
        {
            /*Map<String, Integer> map1 = Collections.<String, Integer> emptyMap();
            map1.put("a", 111);
            System.out.println(map1.get("a"));*///空map,有何作用?
            
            Baz baz = new Baz(new MyT());
            baz.showFun();
        }
    }
    class Baz<T extends Foo & Bar>//Bar 必须为接口
    {    private T t;    public Baz(T t)
        {
            this.t = t;
        }    public void showFun()
        {
            t.fooFun();
            t.barFun();
        }
    }
    class Foo
    {    public void fooFun()
        {
            System.out.println("fooFun...");
        }
    }
    interface Bar
    {    void barFun();
    }
    class MyT
        extends Foo
        implements Bar
    {    public void barFun()
        {
            System.out.println("barFun");
        }
    }请问,关于那个空Map的作用,不晓得在什么场景下会用到?(put、get都抛异常的)
      

  30.   

    java四舍五入问题
      double a = 2.5555;
      BigDecimal b = new BigDecimal(a);
      double aa = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
      System.out.println(aa);
      注意:因为小数a本身就在计算机中存储不精确,所有输出结果是2.555;如果要避免这种问题BigDecimal b = new BigDecimal(a);括号的要传入字符串类型即用构造方法Bigdecimal(String s).
      

  31.   


    你知道除了System.out 还有个System.err么
      

  32.   


    你知道除了System.out 还有个System.err么为啥这么问我?
      

  33.   


    你知道除了System.out 还有个System.err么为啥这么问我?我以为你不知道,告诉你一下。