零度非安全 发表于 2017-1-21 16:50:57

【Java 教程(原创)】016.类(上)

本帖最后由 零度非安全 于 2017-3-18 13:48 编辑

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











在掌握了前面 000~015 并能独立完成相应大作业后

那么恭喜您,您已经成功迈出了一大步来了

离开发打飞机游戏也就进了一步
那我们就开始吧!!!




类是 Java 程序的基本要素{:10_272:}(必须的)
类封装了一类对象的 状态 和 方法,类是用来定义对象的模板。
类的实现包括两个部分,即 类的声明 和 类体
基本格式如下:
class 类名{
    类体的内容
}
class是个关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的 Java 标识符,两个大括号以及之间

的内容是 类体。

类的声明

以下是两个类的声明的例子
class Turtle{
    .
    .
    .
}
class 动物{
    .
    .
    .
}class Turtle 和 class 动物 被称为类的声明,Turtle 和 动物 分别是类名。类的名字要符合标识符的规定,切记{:10_286:}!






另外在给类命名时,要遵守下列编程风格(这不是语法要求的,但应当遵守):

(1) 如果类名使用了拉丁字母,那么名字的首字母使用大写字母,如 Hello、Time 和 Turtle 等。

(2) 类名最好容易识别、见名知意。当类名由几个“单词”复合而成时,每个单词的首字母使用大写,如:Beijing

Time、AmricanGame 和 HelloChina 等。





类体

写类的目的是为了描述(抽象)一类事物共有的属性和功能,描述过程由类体来实现
类声明之后的一对大括号“{ ”、“ } ”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。
类体的内容由两部分构成:一部分是变量的声明,用来刻画属性;另一部分是方法的定义,用来刻画功能。


下面是一个类名为“梯形”的类,类体内容的变量声明部分给出了 4 个 float 类型的变量;“上底”、“下底”、“高”

和 laderArea;方法定义部分,定义了两个方法:“计算面积”和“修改高”。
class 梯形{
    float 上底,下底,高,laderArea;               //变量声明部分
    float 计算面积(){                           //方法定义
      laderArea = (上底 + 下底) * 高 / 2.0f;
      return laderArea;
    }
    void 修改高(float h){                      //方法定义
      高 = h;
    }
}

成员变量和局部变量

在变量声明部分声明的变量被称为类的成员变量
在方法体中声明的变量和方法的参数被称为局部变量。

变量的类型

成员变量和局部变量的类型可以是 Java 中的任何一种数据类型
包括整型、浮点型、字符型等基本类型
以及数组、对象和接口(对象和接口见后续内容)等引用类型

例如:
class People{
    int boy;
    float a[];
    void f(){
      boolean cool;
      Student notSafe;
    }
}
class Student{
    double x;
}
People 类的成员变量 a 是类型为 float 的数组;cool 和 notSafe 是局部变量,cool 是 boolean 类型,notSafe 是

Student 类声明的变量,即对象。


变量的有效范围(重点)



成员变量在整个类内部有效,局部变量只在声明它的方法内有效。方法的参数在整个方

法内有效,方法内的局部变量从声明它的位置之后开始有效。如果局部(有雨{:10_256:})变

量的声明是在一个复合语句中,那么该局部变量的有效范围是该复合语句,即仅在该复

合语句中有效;如果局部变量的声明是在一个循环语句中,那么该局部变量的有效范围

是该循环语句,即仅在该循环语句有效({:10_269:} 好多呀)。




例如:
public class A{
    int m = 10,sum = 0;             //成员变量,在整个类中有效
    void f(){
      if(m > 9){
            int z = 10;             //z仅仅在该复合语句中有效
            z = 2 * m + z;
      }
      for(int i = 0;i < m;i++){
            sum = sum + i;          //i仅仅在该循环语句中有效
      }
      m = sum;                  //合法,因为m和sum有效
      z = i + sum;                //非法,因为i和z已无效
    }
}
成员变量的有效性与它在类体中书写的先后位置无关。例如,前面的梯形类也可以写成如下:
class 梯形{
    float 上底,laderArea;             //成员变量的定义
    float 计算面积(){
      laderArea = (上底 + 下底) * 高 / 2.0f;
      return laderArea;
    }
    float 下底;                     //成员变量的定义
    void 修改高(float b){             //方法定义
      高 = h;
    }
    float 高;                         //成员变量的定义
}
不提倡把成员变量的定义分散地写在方法之间或类体的最后,人们习惯先介绍属性再介绍功能。


实例变量与类变量

成员变量又分为实例变量和类变量
在声明成员变量时,用关键字 static 给予修饰的变量称为类变量
否则称为实例变量(类变量也称为 static 变量,静态变量)

例如:
class Turtle{
    float x;                        //实例变量
    static int y;                   //类变量   
}
在 Turtle 类中,x 是实例变量,而 y 是类变量。需要注意的是,static 需放在变量的类型的前面。在学习过对象过后,鱼


油们即可知道实例变量和类变量的区别。



成员变量的隐藏

如果局部变量的名字与成员变量的名字相同
则成员变量被隐藏,即这个成员变量在这个方法内暂时失效

例如:
class NotSafe{
    int x = 98,y;
    void f(){
      int x = 3;
      y = x;            //y得到的值是3,不是98,如果方法f中没有int x = 3; ,y的值将是98
    }
}
方法中的局部变量的名字如果和成员变量的名字相同,那么方法就隐藏了成员变量。如果想在该方法中使用被隐藏的成员

变量,必须使用关键字this(这个关键字在后面会讲到),例如:
class 三角形{
    float sideA,sideB,sideC,lengthSum;
    void setSide(float sideA,float sideB,float sideC){
      this.sideA = sideA;
      this.sideB = sideB;
      this.sideC = sideC;
    }
}
this.sideA、this.sideB、this.sideC分别表示成员变量sideA、sideB、sideC。



编程风格

一行只声明一个变量
虽然可以使用一种数据的类型
并用逗号分隔来声明若干个变量
例如:
double height,width;
但是在编码时,却不提倡这样做,其原因是不利于给代码增添注释内容,提倡的风格如下:
double height;            //矩形的高
double width;               //矩形的宽




变量的名字除了符合标识符规定外,名字的首单词的首字母使用小写;如果变量的名字由多个单词组成,从第 2 个

单词开始的其他单词的首字母使用大写。变量名字见名知意,避免使用 m1、n1 等作为变量的名字,尤其是名字中

不要将小写的英文字母 l 和数字 1 相邻接。






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


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

ston77 发表于 2017-1-23 16:55:49

这是要走gui的路子吗?终极目标-- 打飞机 ?

零度非安全 发表于 2017-1-23 17:04:02

ston77 发表于 2017-1-23 16:55
这是要走gui的路子吗?终极目标-- 打飞机 ?

Java 不走 GUI,只是用它来练练手的!!!

ston77 发表于 2017-1-23 17:13:02

零度非安全 发表于 2017-1-23 17:04
Java 不走 GUI,只是用它来练练手的!!!

还以为你这套教程也像 小甲鱼的 python一样,以打飞机的游戏总结运用所有知识

零度非安全 发表于 2017-1-23 17:23:47

ston77 发表于 2017-1-23 17:13
还以为你这套教程也像 小甲鱼的 python一样,以打飞机的游戏总结运用所有知识

打飞机只是其中一个,还有用 Java 怎么实现黑客帝国数字雨,以及愤怒的小鸟,扫雷,华容道,坦克大战等等

网络编程会弄一个本地聊天工具,类似 QQ,将网络编程和 Swing 编程结合到一起

最后会把我大三团队做的项目拿出来分享 --- 网上书店购物系统,java + sql 写的,前端到后台

摆渡终极鉴黄师 发表于 2017-2-21 03:24:32

零度非安全 发表于 2017-1-23 17:23
打飞机只是其中一个,还有用 Java 怎么实现黑客帝国数字雨,以及愤怒的小鸟,扫雷,华容道,坦克大战等等 ...

真是太棒了{:10_257:}我一早起来就开始学了{:10_254:}

零度非安全 发表于 2017-2-21 11:44:59

摆渡终极鉴黄师 发表于 2017-2-21 03:24
真是太棒了我一早起来就开始学了

我每天基本满课,55555555555

pyt1 发表于 2017-2-23 22:55:04

零度非安全 发表于 2017-1-23 17:23
打飞机只是其中一个,还有用 Java 怎么实现黑客帝国数字雨,以及愤怒的小鸟,扫雷,华容道,坦克大战等等 ...

万分期待啊,先谢过楼主

零度非安全 发表于 2017-2-23 22:59:12

pyt1 发表于 2017-2-23 22:55
万分期待啊,先谢过楼主

干巴得{:5_93:}

pyt1 发表于 2017-2-24 19:32:25

成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效

最后半句我怎么理解为:即这个成员变量在这个方法内无效,因为方法内使用的是其内部的变量值,成员变量隐藏不就是无效的意思吗?


sr0701 发表于 2017-2-25 02:15:06

pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

可能是打错字了?成员变量在方法外有效,Java是就近原则,要想用成员产量得用this

six_mao 发表于 2017-3-17 07:41:06

不提倡把成员变量的定义分散地卸载方法之间。错别字

零度非安全 发表于 2017-3-18 13:45:42

pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效
已修改为在这个方法内暂时失效

零度非安全 发表于 2017-3-18 13:49:31

six_mao 发表于 2017-3-17 07:41
不提倡把成员变量的定义分散地卸载方法之间。错别字

卸载已修改为写在,感谢指正!!!

CarpLyy 发表于 2017-3-20 14:51:09

get

赵一锦啊 发表于 2017-4-10 16:34:38

谢谢版主!通俗易懂很实用

龙治 发表于 2017-10-11 22:01:40

void
是什么意思啊
为什么每个class后面都会有

suiyisuixin2017 发表于 2018-4-15 21:27:25

谢谢讲解

惟余莽莽 发表于 2020-10-19 07:47:23

方法的参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。
请问方法变量和方法的参数有什么区别?{:10_245:}

fishc.love 发表于 2022-9-18 16:29:23

{:10_279:}非常好
页: [1]
查看完整版本: 【Java 教程(原创)】016.类(上)