零度非安全 发表于 2017-1-25 18:49:40

【Java 教程(原创)】018.类(下)

本帖最后由 零度非安全 于 2017-2-24 13:29 编辑

点击图片穿越到 索引帖,听说有惊喜!











在上一讲还有 3 个方法没讲到,那么这讲就这 3 个方法说明解决
分别是 构造方法、类方法以及实例方法

构造方法




构造方法是一种特殊的方法
它的名字必须与它所在的类的名字完全相同
而且没有类型,构造方法也可以重载。




例如:
class 梯形{
    float 上底,下底,高;
    梯形(){                               //构造方法
      上底 = 60;
      下底 = 100;
      高 = 20;
    }
    梯形(float x,float y,float h){      //构造方法
      上底 = x;
      下底 = y;
      高 = h;  
    }
}




当用类创建对象时,使用构造方法,下一讲非安全会讲到,不急哈!




类方法和实例方法

成员变量可分为实例变量和类变量,同样,类中的方法也可分为实例方法和类方法。
在声明方法时,方法类型前面不加关键字 static 修饰的实例方法,加 static 修饰的是类方法(静态方法)

例如:
class A{
    int a;
    float max(float x,float y){             //实例方法
      .
      .
      .
    }
    static float jerry(){                   //类方法
      .
      .
      .
    }
    static void speak(String s){            //类方法
      .
      .
      .
    }
}




A 类中的 jerry 方法和 speak 方法是类方法,max 方法是实例方法。需要注意的是,static 需放在方法的类型的前

面。在学习过对象之后,鱼油即可知道实例方法和类方法区别。





几个值得注意的问题

对成员变量的操作只能放在方法中
方法可以对成员变量和该方法中声明的局部变量进行操作
在声明类的成员变量时可以同时赋予初值。

例如:
class A{
    int a = 12;
    float b = 12.56f;
}
但是不可以这样做:
class A{
    int a;
    float b;
    a = 12;             //非法,这是赋值语句(语句只能出现在方法体中),不是变量的声明
    b = 12.56f;         //非法
}
这是因为类体的内容由成员变量的声明和方法的定义两部分组成,下面这个才是正确的。
class A{
    int a;
    float b;
    void f(){
      int x,y;
      x = 34;
      y = -23;
      a = 12;
      b = 12.56f;
    }
}
实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。例如:
class A{
    int a;
    static b;
    void f(int x,int y){
      a = x;                  //合法
      b = y;                  //合法
    }
    static void g(int x){
      b = 23;               //合法
      a = z;                  //非法
    }
}
一个类中的方法可以互相调用,实例方法可以调用该类中的其他方法;类中的类方法只能调用该类的类方法,不能调用实例

方法。例如:
class A{
    float a,b;
    void sum(float x,float y){                        //这是一个实例方法
      a = max(x,y);                                 //合法(调用类方法)
      b = min(x,y);                                 //合法(调用实例方法)
      System.out.print(a + b);
    }
    static float getMaxSquare(float x,float y){         //这是一个类方法
      return max(x,y) * max(x,y);                     //合法(调用类方法)
    }
    static float getMinSquare(float x,float y){         //这是一个类方法
      return min(x,y) * min(x,y);                     //非法(调用实例方法)
    }
    static float max(float x,float y){                  //这是一个类方法
      return a > b ? a : b;
    }
    float min(float x,float y){                         //这是一个实例方法
      return a < b ? a : b;
    }   
}

【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。


☞点我前往上一讲☜
☞点我前往下一讲☜



835413444 发表于 2017-2-18 22:44:50

本帖最后由 835413444 于 2017-2-18 22:48 编辑

{:10_256:}

零度非安全 发表于 2017-2-19 09:54:36

835413444 发表于 2017-2-18 22:44


每天一个极度纯洁的微笑

无艸忘居 发表于 2017-2-24 08:02:51

{:10_256:}

pyt1 发表于 2017-2-24 12:33:49

第17行,类方法的话,不应该去掉 static ?

零度非安全 发表于 2017-2-24 12:46:57

pyt1 发表于 2017-2-24 12:33
第17行,类方法的话,不应该去掉 static ?

帖子中难免有错误,可能是手敲太快了,感谢指正!!!

pyt1 发表于 2017-2-24 12:47:41

a,b 是实例变量,第4行,把类方法的返回值给 a, 提示语法错误,不合法啊。

这是我改正之后的代码:
class A{
        static float a,b;
        void sum(float x,float y){
                a = max(x,y);
                System.out.println(a);
                b = min(x,y);
                System.out.println(a);
                System.out.println(x+y);
        }
        static float getMaxSqu(float x, float y){
                return max(x,y) * min(x,y);
        }
        static float getMinSqu(float x, float y){
                return min(x,y);
        }
        static float max(float x,float y){
                return x > y? a:b; //静态方法只能访问静态变量
        }
        static float min(float x,float y){
                return x<y?a:b;
        }
        }

零度非安全 发表于 2017-2-24 13:05:58

pyt1 发表于 2017-2-24 12:47
a,b 是实例变量,第4行,把类方法的返回值给 a, 提示语法错误,不合法啊。

这是我改正之后的代码:


我上面给的代码第 12 行非法

dongyuguo6 发表于 2017-4-28 10:01:56

第15行是非法的吧,因为类方法只能操作类变量,而上面操作的是实例变量。是否如此?

零度非安全 发表于 2017-4-28 11:08:01

dongyuguo6 发表于 2017-4-28 10:01
第15行是非法的吧,因为类方法只能操作类变量,而上面操作的是实例变量。是否如此?

是的,是这样,类方法只能操作类变量,上面 return 后是非法的
页: [1]
查看完整版本: 【Java 教程(原创)】018.类(下)