鱼C论坛

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

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

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

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

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

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

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

☟


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

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

☠

构造方法



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

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

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



例如:
  1. class 梯形{
  2.     float 上底,下底,高;
  3.     梯形(){                               //构造方法
  4.         上底 = 60;
  5.         下底 = 100;
  6.         高 = 20;
  7.     }
  8.     梯形(float x,float y,float h){        //构造方法
  9.         上底 = x;
  10.         下底 = y;
  11.         高 = h;  
  12.     }
  13. }
复制代码

notice.png

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



类方法和实例方法


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

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


例如:
  1. class A{
  2.     int a;
  3.     float max(float x,float y){             //实例方法
  4.         .
  5.         .
  6.         .
  7.     }
  8.     static float jerry(){                   //类方法
  9.         .
  10.         .
  11.         .
  12.     }
  13.     static void speak(String s){            //类方法
  14.         .
  15.         .
  16.         .
  17.     }
  18. }
复制代码

explain.png

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

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



几个值得注意的问题


对成员变量的操作只能放在方法中

方法可以对成员变量和该方法中声明的局部变量进行操作

在声明类的成员变量时可以同时赋予初值。


例如:
  1. class A{
  2.     int a = 12;
  3.     float b = 12.56f;
  4. }
复制代码

但是不可以这样做:
  1. class A{
  2.     int a;
  3.     float b;
  4.     a = 12;             //非法,这是赋值语句(语句只能出现在方法体中),不是变量的声明
  5.     b = 12.56f;         //非法
  6. }
复制代码

这是因为类体的内容由成员变量的声明和方法的定义两部分组成,下面这个才是正确的。
  1. class A{
  2.     int a;
  3.     float b;
  4.     void f(){
  5.         int x,y;
  6.         x = 34;
  7.         y = -23;
  8.         a = 12;
  9.         b = 12.56f;
  10.     }
  11. }
复制代码

实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。例如:
  1. class A{
  2.     int a;
  3.     static b;
  4.     void f(int x,int y){
  5.         a = x;                  //合法
  6.         b = y;                  //合法
  7.     }
  8.     static void g(int x){
  9.         b = 23;                 //合法
  10.         a = z;                  //非法
  11.     }
  12. }
复制代码

一个类中的方法可以互相调用,实例方法可以调用该类中的其他方法;类中的类方法只能调用该类的类方法,不能调用实例

方法。例如:
  1. class A{
  2.     float a,b;
  3.     void sum(float x,float y){                          //这是一个实例方法
  4.         a = max(x,y);                                   //合法(调用类方法)
  5.         b = min(x,y);                                   //合法(调用实例方法)
  6.         System.out.print(a + b);
  7.     }
  8.     static float getMaxSquare(float x,float y){         //这是一个类方法
  9.         return max(x,y) * max(x,y);                     //合法(调用类方法)
  10.     }
  11.     static float getMinSquare(float x,float y){         //这是一个类方法
  12.         return min(x,y) * min(x,y);                     //非法(调用实例方法)
  13.     }
  14.     static float max(float x,float y){                  //这是一个类方法
  15.         return a > b ? a : b;
  16.     }
  17.     float min(float x,float y){                         //这是一个实例方法
  18.         return a < b ? a : b;
  19.     }   
  20. }
复制代码


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

&#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-4-25 15:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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