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 条评论
登录 后参与评论

相关文章

来自专栏lhyt前端之路

(VUE!jQuery!插件!)盘点前端群的无脑回答0.前言总结

你是不是在前端群见过很多这种前景:这个怎么做?怎么拿到这些数据?怎么更新整个列表?

994
来自专栏gaoqin31

设计模式之 六大原则

定义: 一个类承担的职责不宜过多,或者说就一个类而言,应该仅有一个引起它变化的原因

793
来自专栏数说工作室

【SAS Says】基础篇:SAS宏初步

特别说明:本节【SAS Says】基础篇:SAS宏初步,用的是数说君学习《The little SAS book》时的中文笔记,我们认为这是打基础的最好选择。 ...

2834
来自专栏北京马哥教育

Python中的时间处理大总结

1304
来自专栏企鹅号快讯

python中的时间处理大总结

北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 ? NVIDIA 深度学习学院 带你快速进入火热的DL领域 正文共485...

18110
来自专栏数据小魔方

左手用R右手Python系列——面向对象编程基础

面向对象编程是程序设计中一种重要且高效的编程规范,它区别于常见的面向过程编程。在R语言以及Python的程序包开发过程中,大量使用了面向对象的编程范式。 百度...

43312
来自专栏小勇DW3

通俗的理解java设计模式的准则

  原文链接:http://blog.csdn.net/lovelion/article/details/7536542

783
来自专栏Albert陈凯

2018-07-19 如何重构“箭头型”代码如何重构“箭头型”代码

原文地址:https://coolshell.cn/articles/17757.html

916
来自专栏枕边书

设计模式,Let's “Go”! (中)

前言 接上篇 设计模式,Let's “Go”! (上), 继续更新设计模式,今天介绍的设计模式有模板模式、迭代器模式、组合模式、状态模式、代理模式、桥接模式和建...

1907
来自专栏跟着阿笨一起玩NET

关于Repository模式

本文转载:http://www.cnblogs.com/dudu/archive/2011/05/25/repository_pattern.html

641

扫码关注云+社区