Java漫谈3

上次我们说道Java中的Hello World(以下简称HW)是什么样子的,还写了一段HW的输出程序。不知道你是否会有疑问,难道在Java的环境中只要输入这一句话就能输出HW么。那如果初始的程序如此地简单,第一章的时候又为什么非要谈什么继承、封装、多态,只接谈这个程序不就能更加自然而然地切入么。

对,你猜对了。

事实上,即便你在命令行里面输入HW的代码,在windows下,命令行会提示说这不是内外部命令。而在IDE中点击运行倒是能直接看到结果,不过这是因为IDE已经引导我们把一些事情做好了。IDE也就是专门用来编译Java代码的一款软件中,你可以把它想象成Java程序的制作车间。

目前开发Java程序还是IDE用的比较多,所以在漫谈中默认的就是在IDE中开发的情况。

那这个所谓的Java车间在运行HW那句代码之前都有哪些动作呢。一般我进入IDE之后的顺序是如下:

  1. 新建一个工程
  2. 在工程中新建类
  3. 在类中添加main方法
  4. 在main方法中添加HW语句

新建一个工程这个你肯定能理解,在 Java漫谈1的时候说Java中的类就好比是一个模版,不知道你会不会萌生出一个疑问,为什么要直接新建一个“模版”,难道就不能建一个“方法”么?如果你是刚刚进入Java这个领域的,我的回答是——不能,原因是——没有原因,你要做的是把HW程序的功能自己实践出来,尔后在这个程序之上改动1-2个字符,这么一步步地慢慢探索下去,相较于把不懂的点搞懂,把程序实现更重要。如果你已经在这一行浸营已久,我的回答是,Java就是这么规定的,到目前为止并没有看到说人话的解释。如果非要解释的话,可能就是在Java中万物皆对象,类是对象的一种形式。类即模版,如此一来每一个写的类都可以成为另一个模版的一部分,有点儿像乐高积木,便于构件复杂的体系。

现在类有了,不过要在类中写方法。就拿人这个属性来说,你有各种属性,姓名,性别,身高等。如果我们没有方法的话,顶多算是一具蜡像,而就不能和别的人进行聊天,吹牛,说hello等动作。不过这其中有个最重要的方法就是main方法,它是一个程序的运行方法的初始放方法。也就是说,当一台计算机要运行一个程序的时候,它不是从程序的第一行开始执行的,而是会先找到这个程序的main()方法,从main方法的第一行开始执行指令。

写到这儿的时候,我脑子里突然冒出一个好玩儿的想法,如果把段誉比武的的过程用面向对象的Java语言来描述的话会是个什么样子呢。下面我就尝试一下,希望金庸老爷子不要打我…

首先,我会new一个工程,这个工程的名字叫做“武林大会”。然后,我会在这个工程里面新建一个侠客类,用来指代所有参加武林大会的人的一般属性和方法,也就是模版。这些属性有姓名,年龄,武功,等级,角色。通用的方法是出招,比武。再接着,我会new好几个侠客实例,反映在代码上的操作就是new不同的侠客实例,且这些实例都继承自侠客类。由于是继承了侠客类,所以这些实例也就天生拥有了侠客类的属性和方法,于是下一步就是根据不同的角色给这些属性和方法赋予不同的值。就拿段誉和慕容复来说,大概会向下面这个样子:

姓名

段誉

慕容复

年龄

26

28

性别

武功

凌波微步

斗转星移

等级

一流

一流巅峰

角色

参赛选手

参赛选手

而段誉的出招()是返回凌波微步以及凌波微步的伤害值,这里是90。慕容复的出招()则是返回斗转星系以及斗转的伤害值100。之所以要有返回值,是因为比武这个动作抽象来看,就是比较双方出招之后的伤害值的大小,这里先不考虑生命值和伤害值的复合关系,仅仅是谁的伤害值大,谁就赢了。

此外,由于每个实例之所以与别的实例不同,是因为有自己特殊的属性或者方法,在这里,我觉得慕容复还有一个追杀()方法,而相应的段誉有一个逃跑()方法。因为在《天龙八部》的前期,段誉见着慕容复还是要跑的。

最后我们再新建一个类,叫做比武类。为了方便逻辑理解,我们就把main函数放在这个类里面,也就是说程序一启动之后就让他们比武。下面就构造比武的函数就行了。构造这个方法之前,我们需要现将这个比武的过程抽象一下,可以抽象成:找一个对手,相互“出招”,如果我的伤害值不敌对方我就输了,如果比对方强我就胜利,所以大概的方法的样子如下:

比武(侠者1,侠者2){ int 结果 = 侠者1.出招() - 侠者2.出招();//侠者1.出招 VS 侠者2.出招 if(结果>0){ return 侠者1赢了; }else{ return 侠者2赢了;

而main函数里面的执行语句也就是比较清楚了,首先调用

比武()方法,发现慕容复赢了,则慕容复会调用追杀(),而段誉一旦发现慕容复调用追杀(),他就调用逃跑()顺利逃脱,为迎娶王语嫣成功地保住了小命。

这篇文章主要分享了我对Java里面类的实例化的理解,在段誉比武的例子中又稍微谈到了一点儿抽象的的概念,希望这能对你理解Java类的实例话有些帮助,我们下回见。

原文发布于微信公众号 - 怀英的自我修炼(hydzwxl)

原文发表时间:2017-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

HTML+CSS提升小实战

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; ch...

1828
来自专栏互联网开发者交流社区

SEO-站内优化规范

962
来自专栏智能合约

以太坊智能合约开发第五篇:字符串拼接—Solidity

1423
来自专栏UML

用例图示例:包含和扩展用例

用例提供了系统的高级视图。用例建模是与用户和其他利益相关者就系统和目标进行沟通的有效方式。用例描述了系统执行的动作序列,其为特定的actor产生可观察的值结果。...

1759
来自专栏web前端教室

[周末课程]什么是“页面业务流程”分析思维导图?如何编写页面假JSON数据? &下一个前端组件“日历”

大家好,时间飞快一晃又到了周末了,今天要跟大家一起学习的有以下这些内容: -- 什么是“页面业务流程”分析思维导图?如何编写页面假JSON数据? -- 进入下一...

1815
来自专栏java一日一条

关于 Unicode 每个程序员应该知道的 5 件事

上周末,曝出了山寨WhatsApp Android应用程序的新闻,看似由相同的开发者提供作为了官方应用程序。欺诈分子通过在开发者名字中包含unicode非输出空...

582
来自专栏前端萌媛的成长之路

SEO

1632
来自专栏IT大咖说

关于 Unicode 每个程序员应该知道的 5 件事

摘要 Unicode是一个令人难以置信的有用标准,它能使全世界的计算机、智能手机和智能手表以同样的方式显示相同的信息。不幸的是,它的复杂性使它成为了欺诈分子和恶...

2627
来自专栏大数据挖掘DT机器学习

并行爬虫和数据清洗工具(开源)

etlpy是python编写的网页数据抓取和清洗工具,核心文件etl.py不超过500行,具备如下特点 爬虫和清洗逻辑基于xml定义,不需手工编写 基于pyth...

3074
来自专栏编程

使用JavaScript开发一个自修改代码

话说在25年前,我刚刚开始从事软件开发。在工作中,我遇到一个叫Dave的朋友,他曾在一家大型保险公司工作过几年,他的工作重点是开发支持一个名为“个人人寿保险”的...

2067

扫描关注云+社区