Java面向对象/类/对象/方法

来源:互联网 发布:英雄无敌 mac 10.13 编辑:程序博客网 时间:2024/06/06 01:01

面向对象和面向过程:

面向对象是当今编程领域中最优秀的编程思想,而Java的实际开发,主要是根据面向对象的思想来进行研发的,想要了解什么是面向对象,面向对象有什么优势,有什么好处,就应该从与面向对象相对的面向过程思想来进行学习。

理解面向过程:

顾名思义,面向过程的编程方式,则是在编程过程中,去想做一件事情,首先要做什么,其次要做什么。例如,笔者的梦想的到美国看一场圣安东尼奥马刺队的比赛,如果使用面向过程的思想,应该如何实现呢?下面来看详细过程:
1.了解马刺队在某年某月与某队有一场比赛,并且这场比赛是在马刺队主场进行的。
2.确定了时间,则确定如何到达目的地,首先需要写好代码,应该如何步行,步行到哪里,怎么走,(如果是一个程序,应该详细到先买哪条腿,迈出一条腿可以行走多少米,应该以什么样的速度行走,当出现紧急情况应该怎么样等等等等)走到车站(汽车站或者火车站)。然后计算出所需时间以及其他代价。
3.到达车站后应该乘坐那趟车,可以到达相应的机场。此时需要写出,某趟车的路线是什么?什么时间出发?什么时候到达?最重要的,这趟车如何行进?例如火车,火车需要怎么动起来?速度是怎么样的?等等等等。
4.终于到了目的地(一般是北京),从火车站应该怎么到达机场?使用什么交通工具?地铁?地铁是怎么样造出来的?怎么运行的?之后省略千字。
看吧?这么跟你说你已经开始不耐烦了,好麻烦!没错,这是最理想的情况下你应该设计出的条件,甚至你需要考虑,当你乘坐的飞机,因为恶略天气无法降落怎么办(无法登机才是万恶的)?你理想的酒店没有位置了怎么办?通常这种情况下,你的程序可能需要重写。什么?你告诉我只要重写出现问题以后的地方就可以了?万一你出门崴脚怎么办(程序从你起始位置处BUG怎么办?)?
好了,啰嗦这么多,只是想和你推荐一种更优秀的思想也就是本文的主题,面向对象编程。

理解面向对象:

在详细的给你介绍面向对象之前,我觉得如果使用面向对象思想来考虑怎么样我才能踏踏实实看一场球,后面你的理解应该会容易很多。废话不多说(你的废话还不够多吗?)。先来确定一下我们要来做什么?对,是看球。看谁的球呢?看马刺队的,马刺队里都有谁?他们怎么打球?和谁打?(劳资还要设计这些?那不比面向过程还难了?)怎么打?OK,轻拍,这些东西,现实中我们控制不了,程序中我们也控制不了(其实是可以改的,比如游戏程序中的GM啥的。),这不,有NBA官方给出的API,我们的程序直接对接这个API就可以了,当我们到达马刺队主场的时候,就可以看他们打球啦!
然后我们要考虑怎么到达圣安东尼奥呢?我们需要步行、乘坐汽车、火车、飞机等等交通工具,(啥?你让我考虑怎么样制造一个汽车?还能正确的跑到目的地?这也就算了,你还让我造火车飞机?有点过分了吧?)NONONO~现实中你不会造汽车、火车、飞机,那么在程序中你也没办法制造(任性DIY大神另议),我们都有专门的制造企业或者各路大神给出的API,他们制造好的交通工具,你选择你需要的,拿来用就可以了(如果是面向过程,你甚至需要学习怎么开火车开飞机ORZ)。
交通工具已经解决了,我们也到达目的地了,那么住到哪里呢?以你对面向对象的了解来看,肯定不需要你制造一个住宿的地方和怎么解决吃饭的问题了(吃不惯西餐的另议)。对!没错,我们有酒店给出的食宿一体API。
到酒店了才想起来,我们没有办签证护照,这被美国移民局遣送回国怎么办,刚刚啰嗦半天就白麻烦了(我确实忘记了。)。如果是面向过程编程,那么可能需要将刚刚写好的NBA、交通工具、食宿问题全部推翻重写了(即是不重写,改动逻辑关系也是很麻烦的),幸好我们是面向对象,现在也不算晚。我们只需要拿到你户口当地公安局给办理的签证护照就可以了(我想吐槽当地办理的速度)。又有API了!
好了,剩下的事情我想你以你对面向对象的理解都可以写出来了,包括看球你需要学习英语(要不然一个人去美国无法交流太郁闷了!)等等,你都只需要记录下来,大部分都有官方或者大神写好的“类”也就是前面提到的API,你只需要调用就可以了。当你把所有需要的东西都准备好以后,我们就可以开始把这些东西(其实是类)组装起来了!

下面是我总结的,我们看一场球都需要什么东西。我们来将他们组装起来。
1.马刺队/对手球队(有API)
2.交通工具(有API)
3.食宿问题(有API)
4.钱(需要你去赚)
5.沟通条件(导游API,口语超厉害(这个代码自己写))
6.签证护照(有API)

现在我们来看看球这个程序是怎么运行的。当用户启动看球程序后,他需要了解比赛时间、场次、对手,这些NBA的API中已经给出了,然后根据场次和对手来选择是否到现场观看,然后确定时间。确定时间后,到户口当地(又想吐槽户籍制度了)公安局办理签证,这个公安局给出了API,我们调用就可以了(不需要考虑公安局流程),只需要等待办理。在等待过程中,程序完成交通、食宿、钱(没有这玩意你想出国?先出门吧!)沟通等先决条件,比如确定路线、订酒店、找一个导游或者学习英语等等,除了学习英语,这些都有官方给出的API,你只需要调取就可以了。当你选择学习英语以后,这里面详细的程序就需要你自己写了。当办理好签证,路线住宿等问题都解决了,那么只需要等待你将英语的代码写完就可以了(总算有需要自己做的事情了,要不然就太简单(太假了!))。
然后从理论上来讲,你这个程序就可以实际运行了,但是你发现,我们还是有很多东西没有考虑到,比如,忘记买球票了等等,不要着急,面向对象编程的模块化,当你因为忽略了某个代码块出现了BUG,你只需要修改那个模块就可以了(前提是你找的到,这又是门学问),并不需要你将整个程序推翻重写。怎么样?比起面向过程,要容易的多吧(实际写程序也这么简单?你别骗我!)?当然,在实际编程中,你需要掌握很多知识,也会出现很多让你苦恼的事情,这时候,发挥伟大的程序员精神,解决他们吧!

类:

当你打算写一个程序的时候,总得选择让程序做点什么,这就需要方法、变量等等来完成具体操作,而方法和变量是写在哪里呢?没错,就是写到本小节要讲的类中。Java程序是由一个一个的类组成的,来看一段关于空调的代码吧。
  1. import java.util.Scanner;
  2. public class Temperature {
  3. //在类中创建本应用所需的全局变量。
  4. private int ThinkTemperature;
  5. private int NowTemperature;
  6. int UpTemperature = 1;
  7. //你要记得我,你会再回来看我的。
  8. int DownTemperature = 2;
  9. int time = 1;
  10. int time1;
  11. //创建一个方法,在方法中获取当前温度和理想温度。
  12. public void Temperature(){
  13. Scanner Import = new Scanner(System.in);
  14. System.out.println("请输入你现在的室内温度:");
  15. this.NowTemperature = Import.nextInt();
  16. System.out.println("请输入你理想的室内温度:");
  17. this.ThinkTemperature = Import.nextInt();
  18. //当现在温度小于理想温度时,跳转至加热方法中,若现在温度大于理想温度,则跳转制冷方法中。当前温度和理想温度超出实际范围及其他情况输出错误。
  19. if (NowTemperature >= 55) {
  20. System.out.println("你仿佛是在刻意逗我笑!");
  21. return;
  22. }if (NowTemperature <= -35) {
  23. System.out.println("你仿佛是在刻意逗我笑!!");
  24. return;
  25. }if (ThinkTemperature <= -35) {
  26. System.out.println("你仿佛是在刻意逗我笑!!!");
  27. return;
  28. }if (ThinkTemperature >= 55) {
  29. System.out.println("你仿佛是在刻意逗我笑!!!!");
  30. return;
  31. }if (NowTemperature < ThinkTemperature) {
  32. Hot();
  33. }if (NowTemperature > ThinkTemperature) {
  34. Cold();
  35. }
  36. }
  37. public void Hot(){
  38. //使用理想温度减去现在温度,得出需要加热的温度,每次加热1°,也就是加热的次数。
  39. int j = ThinkTemperature - NowTemperature;
  40. //当循环次数小于或等于需加热次数时则执行循环(必须等于,否则不输出结果。)
  41. for (int i = 0; i <= j; i++) {
  42. //当当前温度小于理想温度时,则执行加热,否则跳出循环结束程序。
  43. if (NowTemperature < ThinkTemperature) {
  44. //延迟悬念(一下出结果多没意思。)
  45. try{
  46. Thread.currentThread().sleep(1000);
  47. }catch(Exception e){}
  48. //每次执行循环,都在当前温度上增加,注意增加的形式,你可以修改每次增加的温度,以及增加的温度所需的时间。
  49. NowTemperature = NowTemperature +UpTemperature * time;
  50. //对消耗时间进行一个统计。
  51. time1 = time1 + time;
  52. System.out.println("经过了" + time + "秒的加热,现在的温度是:" + NowTemperature + "°");
  53. }else {
  54. System.out.println("\n总共经过了" + time1 + "秒的加热。");
  55. System.out.println("现在的温度是:" + NowTemperature + "°,而你想要的温度是:" + ThinkTemperature + "°,加热已结束!感谢使用!");
  56. //跳出循环结束程序。
  57. continue;
  58. }
  59. }
  60. }
  61. //与Hot方法一样。
  62. public void Cold() {
  63. int j = NowTemperature - ThinkTemperature ;
  64. for (int i = 0; i <= j; i++) {
  65. if (NowTemperature > ThinkTemperature) {
  66. try{
  67. Thread.currentThread().sleep(1000);
  68. }catch(Exception e){}
  69. NowTemperature = NowTemperature - DownTemperature * time;
  70. time1 = time1 +time;
  71. System.out.println("经过了" + time + "秒的制冷,现在的温度是:" + NowTemperature + "°");
  72. //制冷是每次温度降低2点,所以执行次数上会加倍,每次执行就减一次执行次数。
  73. j--;
  74. }else {
  75. System.out.println("\n总共经过了" + time1 + "秒的制冷。");
  76. System.out.println("现在的温度是:" + NowTemperature + "°,而你想要的温度是:" + ThinkTemperature + "°,制冷已结束!感谢使用!");
  77. continue;
  78. }
  79. }
  80. }
  81. }
这是一个关于空调的软件,主要根据输入的温度来进行计算,详细的说明注释中都有,当你看完并且做出了这段代码,你应该就会明白,那个叫Temperature的东西就是类,我们需要完成的所有操作都在类中。

对象:

即使你把上面那段代码原原本本的敲出来了,你也会发现,这根本没有办法运行,没错,如果仅仅是有类的话,程序是没办法运行的,也就是说,我们根本没有让他去运行,再来看一段代码。
  1. public class Temperature {
  2. .....省略N条代码。
  3. public static void main(String[] args) {
  4. //将上面定义的类及方法创建成对象,并调用。
  5. Temperature cc = new Temperature();
  6. cc.Temperature();
  7. }
  8. }
在那个叫Temperature的类中,还有一个特殊的方法,叫main方法,这个方法的书写格式是固定的,而我们每个程序在启动的时候,都会先找到main方法,然后根据main方法中的代码来调用不同的类,完成不同的操作。
可以看到,我们把那个叫Temperature的类new(新建)了,并且叫cc,然后运行了叫cc的代码,没错,cc就是本小节的主题:对象,我们把类创建为对象,然后再调用这个对象,上一节中的代码就可以正常运行了,说出来你可能不信,当你只有类,没有对象的时候,你的代码是没办法运行的。而如果你只有对象,并没有类,你的代码也是没办法运行的,我想这很好理解吧?
这就是面向对象,把我们的代码全部都写到类中,当你想使用他们的时候,就可以创建对象来调用他们,而当你这个对象的使命完成以后,JVM就会从内存中把这个对象所占用的内存销毁掉。当然,这是你有多个对象的情况下。还有一个好处,你可以把这段代码调用N次,甚至直到你的内存全部占满了为止,这样就省的你把一段代码重复编写到很多地方了。而且当你想修改对象中的内容的时候,你只要修改类中的代码就可以了,否则你还需要在很多代码中找的你想修改的,然后一次次的修改,这样可能会造成很多莫名其妙的问题呢。

方法:

  1. public class ForTest{
  2. public static void main(String[] args) {
  3. Car cc = new Car("蓝色", 3);
  4. cc.run("拖拉机");
  5. }
  6. }
  7. class Car{
  8. private String color; //全局变量。
  9. private int numLuntai; //全局变量。
  10. public Car(String color , int numLuntai) {
  11. super();
  12. this.color = color;
  13. this.numLuntai = numLuntai;
  14. }
  15. //一个方法,作用是输出一段文字,其中有一个叫brang的局部变量,可以选择在方法中定义,也可以选择在调用方法时,给予形参。
  16. public void run(String brang){
  17. //String brang = "宝马"; //局部变量。
  18. System.out.println(this.numLuntai + "个轮子的" + this.color + brang +"在马路上行驶。");
  19. }
  20. }
在Java中如果想实现某种功能,例如算数功能,可以使用for来实现,在程序中如果想实现多次,可以使用方法的概念,这样可以减少代码的冗余,并且使用形参,在方法中的局部变量需要改变时,在形参中给予及时的改变。例如上例中的拖拉机,可以在调用时随意更改。

以上就是我对面向对象和方法的理解,你不知道你理解了嘛?有不明白的,你可以给我留言,让我们一起学习探讨。
1 0