鱼C论坛

 找回密码
 立即注册
查看: 8342|回复: 9

[系列教程] 【Java 教程(原创)】018.类(下)

[复制链接]
发表于 2017-1-25 18:49:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

☟


在上一讲还有 3 个方法没讲到,那么这讲就这 3 个方法说明解决

分别是 构造方法、类方法以及实例方法

☠

构造方法



构造方法是一种特殊的方法

它的名字必须与它所在的类的名字完全相同

而且没有类型,构造方法也可以重载。



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

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



类方法和实例方法


成员变量可分为实例变量和类变量,同样,类中的方法也可分为实例方法和类方法。

在声明方法时,方法类型前面不加关键字 static 修饰的实例方法,加 static 修饰的是类方法(静态方法)


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

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;
    }   
}

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

&#10049;

&#9758;点我前往上一讲&#9756;

&#9758;点我前往下一讲&#9756;


&#10049;


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-18 22:44:50 | 显示全部楼层
本帖最后由 835413444 于 2017-2-18 22:48 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-19 09:54:36 From FishC Mobile | 显示全部楼层
835413444 发表于 2017-2-18 22:44

每天一个极度纯洁的微笑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-24 08:02:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-24 12:33:49 | 显示全部楼层
第17行,类方法的话,不应该去掉 static ?

评分

参与人数 1荣誉 +8 鱼币 +20 贡献 +2 收起 理由
零度非安全 + 8 + 20 + 2 感谢指正

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-24 12:46:57 | 显示全部楼层
pyt1 发表于 2017-2-24 12:33
第17行,类方法的话,不应该去掉 static ?


帖子中难免有错误,可能是手敲太快了,感谢指正!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
        }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是我改正之后的代码:

我上面给的代码第 12 行非法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 10:01:56 | 显示全部楼层
第15行是非法的吧,因为类方法只能操作类变量,而上面操作的是实例变量。是否如此?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,是这样,类方法只能操作类变量,上面 return 后是非法的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 07:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表