Think in Java 笔记【5-7章】

第五章 初始化与清理

  • 方法重载:相同方法名称 + 不同参数列表

  • 构造器重载 成员函数重载

  • 为什么方法签名不包含 方法返回值?

    • void f() {} 与 int f(){ return 1; } 编译器很容易区分。

    • 但是在调用 有返回值的f()方法时,如下都行。 第二行的调用编译器就无法确分这两个方法了

       int aInt = f();
       f();
  • 涉及基本类型的重载
    • 代码

       // boolean can't be automatically converted
          static void prt(String s) {
              System.out.println(s);
          }
          void f1(char x) { prt("f1(char)"); }
          void f1(byte x) { prt("f1(byte)"); }
          void f1(short x) { prt("f1(short)"); }
          void f1(int x) { prt("f1(int)"); }
          void f1(long x) { prt("f1(long)"); }
          void f1(float x) { prt("f1(float)"); }
          void f1(double x) { prt("f1(double)"); }
      
          void f2(byte x) { prt("f2(byte)"); }
          void f2(short x) { prt("f2(short)"); }
          void f2(int x) { prt("f2(int)"); }
          void f2(long x) { prt("f2(long)"); }
          void f2(float x) { prt("f2(float)"); }
          void f2(double x) { prt("f2(double)"); }
      
          void f3(short x) { prt("f3(short)"); }
          void f3(int x) { prt("f3(int)"); }
          void f3(long x) { prt("f3(long)"); }
          void f3(float x) { prt("f3(float)"); }
          void f3(double x) { prt("f3(double)"); }
      
          void f4(int x) { prt("f4(int)"); }
          void f4(long x) { prt("f4(long)"); }
          void f4(float x) { prt("f4(float)"); }
          void f4(double x) { prt("f4(double)"); }
      
          void f5(long x) { prt("f5(long)"); }
          void f5(float x) { prt("f5(float)"); }
          void f5(double x) { prt("f5(double)"); }
      
          void f6(float x) { prt("f6(float)"); }
          void f6(double x) { prt("f6(double)"); }
      
          void f7(double x) { prt("f7(double)"); }
      
    • 入参 - 整型常量时,如f5,f6,f7 int型会自动向上转型(没有精度丢失)

        void testConstVal() {
              prt("Testing with 5");
              f1(5);f2(5);f3(5);f4(5);f5(5);f6(5);f7(5);
          }
      
          //Output
          f1(int)
          f2(int)
          f3(int)
          f4(int)
          f5(long)
          f6(float)
          f7(double)
    • 入参 - char型时,先被转换成int 然后同int型入参结果

        void testChar() {
              char x = 'x';
              prt("char argument:");
              f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
          }
      
          //Output
          f1(char)
          f2(int)
          f3(int)
          f4(int)
          f5(long)
          f6(float)
          f7(double)
    • 入参 - byte型时,自动向上转型

        void testByte() {
              byte x = 0;
              prt("byte argument:");
              f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
          }
      
          //Output
          f1(byte)
          f2(byte)
          f3(short)
          f4(int)
          f5(long)
          f6(float)
          f7(double)
    • 入参 - short型时,自动向上转型

        void testShort() {
              short x = 0;
              prt("short argument:");
              f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
          }
      
          //Output
          f1(short)
          f2(short)
          f3(short)
          f4(int)
          f5(long)
          f6(float)
          f7(double)
    • 如果入参类型表数范围 > 方法入参类型 编译报错

  • 默认构造器 = 空参构造器

    • 当class中构造器为0个时,系统默认提供空参构造
    • 当class中构造器 != 0个时,系统不提供空参构造

猜你喜欢

转载自www.cnblogs.com/houhou87/p/9768145.html