QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
2191
查看: 1085|回复: 16

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

[复制链接]
最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全 发表于 2017-1-21 16:50:57 108516 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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 相邻接。




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




本帖被以下淘专辑推荐:

楼层
跳转到指定楼层
最佳答案
0 
累计签到:644 天
连续签到:21 天
ston77 发表于 2017-1-23 16:55:49 | 显示全部楼层
这是要走gui的路子吗?终极目标  -- 打飞机 ?
最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-1-23 17:04:02 | 显示全部楼层
ston77 发表于 2017-1-23 16:55
这是要走gui的路子吗?终极目标  -- 打飞机 ?

Java 不走 GUI,只是用它来练练手的!!!
最佳答案
0 
累计签到:644 天
连续签到:21 天
ston77 发表于 2017-1-23 17:13:02 | 显示全部楼层
零度非安全 发表于 2017-1-23 17:04
Java 不走 GUI,只是用它来练练手的!!!

还以为你这套教程也像 小甲鱼的 python一样,以打飞机的游戏总结运用所有知识
最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-1-23 17:23:47 | 显示全部楼层
ston77 发表于 2017-1-23 17:13
还以为你这套教程也像 小甲鱼的 python一样,以打飞机的游戏总结运用所有知识

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

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

最后会把我大三团队做的项目拿出来分享 --- 网上书店购物系统,java + sql 写的,前端到后台
最佳答案
0 
累计签到:160 天
连续签到:1 天
摆渡终极鉴黄师 发表于 2017-2-21 03:24:32 | 显示全部楼层
零度非安全 发表于 2017-1-23 17:23
打飞机只是其中一个,还有用 Java 怎么实现黑客帝国数字雨,以及愤怒的小鸟,扫雷,华容道,坦克大战等等 ...

真是太棒了我一早起来就开始学了
最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-2-21 11:44:59 | 显示全部楼层
摆渡终极鉴黄师 发表于 2017-2-21 03:24
真是太棒了我一早起来就开始学了

我每天基本满课,55555555555
最佳答案
0 
累计签到:20 天
连续签到:1 天
pyt1 发表于 2017-2-23 22:55:04 | 显示全部楼层
零度非安全 发表于 2017-1-23 17:23
打飞机只是其中一个,还有用 Java 怎么实现黑客帝国数字雨,以及愤怒的小鸟,扫雷,华容道,坦克大战等等 ...

万分期待啊,先谢过楼主

评分

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

查看全部评分

最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-2-23 22:59:12 | 显示全部楼层
pyt1 发表于 2017-2-23 22:55
万分期待啊,先谢过楼主

干巴得
最佳答案
0 
累计签到:20 天
连续签到:1 天
pyt1 发表于 2017-2-24 19:32:25 | 显示全部楼层
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效

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


评分

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

查看全部评分

最佳答案
0 
累计签到:3 天
连续签到:1 天
sr0701 发表于 2017-2-25 02:15:06 From FishC Mobile | 显示全部楼层
pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

可能是打错字了?成员变量在方法外有效,Java是就近原则,要想用成员产量得用this
最佳答案
0 
累计签到:197 天
连续签到:1 天
six_mao 发表于 2017-3-17 07:41:06 From FishC Mobile | 显示全部楼层
不提倡把成员变量的定义分散地卸载方法之间。错别字

评分

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

查看全部评分

最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-3-18 13:45:42 | 显示全部楼层
pyt1 发表于 2017-2-24 19:32
成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个 ...

成员变量的隐藏那儿:
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内有效
已修改为在这个方法内暂时失效
最佳答案
42 
累计签到:941 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-3-18 13:49:31 | 显示全部楼层
six_mao 发表于 2017-3-17 07:41
不提倡把成员变量的定义分散地卸载方法之间。错别字

卸载已修改为写在,感谢指正!!!
最佳答案
0 
累计签到:52 天
连续签到:1 天
CarpLyy 发表于 2017-3-20 14:51:09 | 显示全部楼层
get
最佳答案
0 
累计签到:24 天
连续签到:1 天
赵一锦啊 发表于 2017-4-10 16:34:38 From FishC Mobile | 显示全部楼层
谢谢版主!通俗易懂很实用
最佳答案
0 

尚未签到

龙治 发表于 2017-10-11 22:01:40 | 显示全部楼层
void
是什么意思啊
为什么每个class后面都会有

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-12-17 16:08

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