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

相关文章

来自专栏ZRJ的专栏

spark 写 gp/tpg 效率优化:写入 237w 行数据耗时从 77 分钟到 34 秒

写这个文章的点主要是分享一下spark 写 gp/tpg 效率优化 ,这个过程中的一些思路历程和细节。

1.5K10
来自专栏老秦求学

汇编语言学习01

汇编语言(8086cpu) 恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个...

30890
来自专栏编程坑太多

作为程序员,有没有让你感到既无语又崩溃的程序命名?

13330
来自专栏一枝花算不算浪漫

Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

615100
来自专栏微信公众号:Java团长

Java的21个技术点,你知道吗?

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下!

12530
来自专栏Golang语言社区

golang语言是如何处理栈的

Go 1.4Beta1刚刚发布,在Go 1.4Beta1中,Go语言的stack处理方式由之前的"segmented stacks"改为了"continuous...

38180
来自专栏数值分析与有限元编程

Python IDLE关联.py文件

为进一步提升Python IDLE可操作性,本文介绍如何在windows操作系统下默认使用python自带的IDLE编辑器关联后缀名为.py的文件。

70410
来自专栏HansBug's Lab

【Ruby on Rails】Model中关于保存之前的原值和修改状态

今天在Rails的Model中遇到了一个问题—— 当我从Model类中获取了一个ActiveRecord对象,对其进行了一系列修改(尚未保存),我该如何确定究竟...

33490
来自专栏java工会

CodeReview常见代码问题

空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的...

16300
来自专栏進无尽的文章

设计模式| 结构型模式

其他同系列的文章还有: 面向对象编程中的六大原则 设计模式| 创建型模式 设计模式| 结构型模式 设计模式| 行为型模式 (上) 设计模式| 行为型模...

9020

扫码关注云+社区

领取腾讯云代金券