Java漫谈3
上次我们说道Java中的Hello World(以下简称HW)是什么样子的,还写了一段HW的输出程序。不知道你是否会有疑问,难道在Java的环境中只要输入这一句话就能输出HW么。那如果初始的程序如此地简单,第一章的时候又为什么非要谈什么继承、封装、多态,只接谈这个程序不就能更加自然而然地切入么。
对,你猜对了。
事实上,即便你在命令行里面输入HW的代码,在windows下,命令行会提示说这不是内外部命令。而在IDE中点击运行倒是能直接看到结果,不过这是因为IDE已经引导我们把一些事情做好了。IDE也就是专门用来编译Java代码的一款软件中,你可以把它想象成Java程序的制作车间。
目前开发Java程序还是IDE用的比较多,所以在漫谈中默认的就是在IDE中开发的情况。
那这个所谓的Java车间在运行HW那句代码之前都有哪些动作呢。一般我进入IDE之后的顺序是如下:
- 新建一个工程
- 在工程中新建类
- 在类中添加main方法
- 在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类的实例话有些帮助,我们下回见。
- Linux C 编程——互斥锁mutex
- python两个 list 获取交集,并集,差集的方法.
- python——时间与时间戳之间的转换
- Maven 核心原理解析(3)
- String中的null,以及String s;等区别详解
- Shell编程——Shell中的数学运算
- 如何利用微信监管你的TF训练?
- python 安装spark_Spark环境搭建 (Python)
- MongoDB触发oom-killer的简单处理(一)(r7笔记第54天)
- int与integer的区别
- java 自动装箱与拆箱
- python读取文件——python读取和保存mat文件
- python 利用递归实现全排列
- java中 == 与 equal 的区别
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释