鱼C论坛

 找回密码
 立即注册
查看: 6542|回复: 19

[系列教程] 【Java 教程(原创)】016.类(上)

[复制链接]
发表于 2017-1-21 16:50:57 | 显示全部楼层 |阅读模式

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

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

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

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

☟


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

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

离开发打飞机游戏也就进了一步

那我们就开始吧!!!





类是 Java 程序的基本要素(必须的)

类封装了一类对象的 状态 方法,类是用来定义对象的模板。

类的实现包括两个部分,即 类的声明 类体

基本格式如下:
  1. class 类名{
  2.     类体的内容
  3. }
复制代码

class  是个关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的 Java 标识符,两个大括号以及之间

的内容是 类体

类的声明


以下是两个类的声明的例子
  1. class Turtle{
  2.     .
  3.     .
  4.     .
  5. }
  6. class 动物{
  7.     .
  8.     .
  9.     .
  10. }
复制代码
class Turtleclass 动物 被称为类的声明,Turtle动物 分别是类名。类的名字要符合标识符的规定,切记

2.gif


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

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

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

Time、AmricanGame 和 HelloChina 等。



类体


写类的目的是为了描述(抽象)一类事物共有的属性和功能,描述过程由类体来实现

类声明之后的一对大括号“{ ”、“ } ”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。

类体的内容由两部分构成:一部分是变量的声明,用来刻画属性;另一部分是方法的定义,用来刻画功能



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

和 laderArea;方法定义部分,定义了两个方法:“计算面积”和“修改高”。
  1. class 梯形{
  2.     float 上底,下底,高,laderArea;               //变量声明部分
  3.     float 计算面积(){                           //方法定义
  4.         laderArea = (上底 + 下底) * 高 / 2.0f;
  5.         return laderArea;
  6.     }
  7.     void 修改高(float h){                      //方法定义
  8.         高 = h;
  9.     }
  10. }
复制代码


成员变量和局部变量


在变量声明部分声明的变量被称为类的成员变量

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


变量的类型


成员变量和局部变量的类型可以是 Java 中的任何一种数据类型

包括整型、浮点型、字符型等基本类型

以及数组、对象和接口(对象和接口见后续内容)等引用类型


例如:
  1. class People{
  2.     int boy;
  3.     float a[];
  4.     void f(){
  5.         boolean cool;
  6.         Student notSafe;
  7.     }
  8. }
  9. class Student{
  10.     double x;
  11. }
复制代码

People 类的成员变量 a 是类型为 float 的数组;cool 和 notSafe 是局部变量,cool 是 boolean 类型,notSafe 是

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


变量的有效范围(重点)


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

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

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

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

是该循环语句,即仅在该循环语句有效( 好多呀)。


例如:
  1. public class A{
  2.     int m = 10,sum = 0;             //成员变量,在整个类中有效
  3.     void f(){
  4.         if(m > 9){
  5.             int z = 10;             //z仅仅在该复合语句中有效
  6.             z = 2 * m + z;
  7.         }
  8.         for(int i = 0;i < m;i++){
  9.             sum = sum + i;          //i仅仅在该循环语句中有效
  10.         }
  11.         m = sum;                    //合法,因为m和sum有效
  12.         z = i + sum;                //非法,因为i和z已无效
  13.     }
  14. }
复制代码

成员变量的有效性与它在类体中书写的先后位置无关。例如,前面的梯形类也可以写成如下:
  1. class 梯形{
  2.     float 上底,laderArea;             //成员变量的定义
  3.     float 计算面积(){
  4.         laderArea = (上底 + 下底) * 高 / 2.0f;
  5.         return laderArea;
  6.     }
  7.     float 下底;                       //成员变量的定义
  8.     void 修改高(float b){             //方法定义
  9.         高 = h;
  10.     }
  11.     float 高;                         //成员变量的定义
  12. }
复制代码

不提倡把成员变量的定义分散地写在方法之间或类体的最后,人们习惯先介绍属性再介绍功能。


实例变量与类变量


成员变量又分为实例变量和类变量

在声明成员变量时,用关键字 static 给予修饰的变量称为类变量

否则称为实例变量(类变量也称为 static 变量,静态变量)


例如:
  1. class Turtle{
  2.     float x;                        //实例变量
  3.     static int y;                   //类变量   
  4. }
复制代码

Turtle 类中,x 是实例变量,而 y 是类变量。需要注意的是,static 需放在变量的类型的前面。在学习过对象过后,鱼


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



成员变量的隐藏


如果局部变量的名字与成员变量的名字相同

则成员变量被隐藏,即这个成员变量在这个方法内暂时失效


例如:
  1. class NotSafe{
  2.     int x = 98,y;
  3.     void f(){
  4.         int x = 3;
  5.         y = x;              //y得到的值是3,不是98,如果方法f中没有int x = 3; ,y的值将是98
  6.     }
  7. }
复制代码

方法中的局部变量的名字如果和成员变量的名字相同,那么方法就隐藏了成员变量。如果想在该方法中使用被隐藏的成员

变量,必须使用关键字this(这个关键字在后面会讲到),例如:
  1. class 三角形{
  2.     float sideA,sideB,sideC,lengthSum;
  3.     void setSide(float sideA,float sideB,float sideC){
  4.         this.sideA = sideA;
  5.         this.sideB = sideB;
  6.         this.sideC = sideC;
  7.     }
  8. }
复制代码

this.sideA、this.sideB、this.sideC  分别表示成员变量  sideA、sideB、sideC



编程风格


一行只声明一个变量

虽然可以使用一种数据的类型

并用逗号分隔来声明若干个变量

例如:
  1. double height,width;
复制代码

但是在编码时,却不提倡这样做,其原因是不利于给代码增添注释内容,提倡的风格如下:
  1. double height;              //矩形的高
  2. double width;               //矩形的宽
复制代码

3.gif

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

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

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




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

&#10049;

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

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

&#10049;

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-1-23 16:55:49 | 显示全部楼层
这是要走gui的路子吗?终极目标  -- 打飞机 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-23 17:04:02 | 显示全部楼层
ston77 发表于 2017-1-23 16:55
这是要走gui的路子吗?终极目标  -- 打飞机 ?

Java 不走 GUI,只是用它来练练手的!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-23 17:13:02 | 显示全部楼层
零度非安全 发表于 2017-1-23 17:04
Java 不走 GUI,只是用它来练练手的!!!

还以为你这套教程也像 小甲鱼的 python一样,以打飞机的游戏总结运用所有知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

最后会把我大三团队做的项目拿出来分享 --- 网上书店购物系统,java + sql 写的,前端到后台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

真是太棒了我一早起来就开始学了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 11:44:59 | 显示全部楼层
摆渡终极鉴黄师 发表于 2017-2-21 03:24
真是太棒了我一早起来就开始学了

我每天基本满课,55555555555
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

万分期待啊,先谢过楼主

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 热爱鱼C^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-2-23 22:59:12 | 显示全部楼层
pyt1 发表于 2017-2-23 22:55
万分期待啊,先谢过楼主

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

使用道具 举报

发表于 2017-2-24 19:32:25 | 显示全部楼层
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效

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


评分

参与人数 1鱼币 +4 贡献 +2 收起 理由
零度非安全 + 4 + 2 热爱鱼C^_^

查看全部评分

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

使用道具 举报

发表于 2017-2-25 02:15:06 From FishC Mobile | 显示全部楼层
pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

可能是打错字了?成员变量在方法外有效,Java是就近原则,要想用成员产量得用this
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 07:41:06 From FishC Mobile | 显示全部楼层
不提倡把成员变量的定义分散地卸载方法之间。错别字

评分

参与人数 1贡献 +2 收起 理由
零度非安全 + 2 感谢指正

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-3-18 13:45:42 | 显示全部楼层
pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效
已修改为在这个方法内暂时失效
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-18 13:49:31 | 显示全部楼层
six_mao 发表于 2017-3-17 07:41
不提倡把成员变量的定义分散地卸载方法之间。错别字

卸载已修改为写在,感谢指正!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-20 14:51:09 | 显示全部楼层
get
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-10 16:34:38 From FishC Mobile | 显示全部楼层
谢谢版主!通俗易懂很实用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-11 22:01:40 | 显示全部楼层
void
是什么意思啊
为什么每个class后面都会有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 21:27:25 | 显示全部楼层
谢谢讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-19 07:47:23 | 显示全部楼层
方法的参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。
请问方法变量和方法的参数有什么区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-18 16:29:23 | 显示全部楼层
非常好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 18:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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