Java基础篇-起始篇

145 阅读7分钟

一、什么是面对对象?什么是面向过程?

1、面对对象和面向过程的区别

面向过程: 分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就行了;
面向对象: 把构成问题的事物分解成多个对象,建立对象的目的是为了描述某个事物在整个解决问题的步骤中的行为。

分别用两种方式实现五子棋:

  1. 面向过程的设计思路首先是分析问题的步骤:①开始游戏、②黑子落棋、③绘制画面、④判断输赢、⑤白子落棋、⑥绘制画面、⑦判断输赢、⑧回到步骤②、⑨输出最后结果;
  2. 面向对象的设计思路首先是拆分对象:①玩家角色(黑白)、②棋盘系统(绘制画面)、③规则系统(负责判断输赢和违规);

从上面的设计思路来看:面向对象是以功能来划分问题,而不是步骤。同样是绘图,这种行为在面向过程的设计中被分散在多个步骤中,然后很可能会出现不同的绘制版本,因为通常设计人员会考虑到实际情况而进行一些简化。但是在面向对象的设计中,绘图只会在棋盘对象中出现,其他对象不需要关系如何实现它,从而保证了绘图的统一性。

总的来说,面向对象就是将事物抽象化,面向过程就是一种自顶向下、逐步求精的编程。

2、面对对象的特点:

Object.png 面向对象的思想就是将一切事物都看成对象,而对象是由属性和方法构成。属性是是对象的静态特征,方法是对象的动态行为。比如说人这个对象,年龄、体重都是他的特征,而吃饭、睡觉则是他的行为。我们将对象的属性和方法称之为对象成员。
类(Class):类是一个模板,它描述了一类具有相同的属性和方法的对象。

Person jack = new Person();
Person lucy = new Person();

如上:Person是一个类,而被实例化出来的 jack 和 lucy 是一个对象。Java 通过 new 来进行实例化。

3、面向过程和面向对象的优缺点

面向过程设计的程序就像是一份蛋炒饭,鸡蛋和米饭是混在一起的,若想把鸡蛋换成青菜就必须重做;而面向对象设计的程序就像是盖浇饭,各种类型的米饭和菜都准备好了,想要什么盖浇饭,搭配一下就好了。

那么两者究竟孰优孰劣,得要具体情况具体分析,场景不同,优点就会变成缺点,反之亦然。

优缺点总结:

面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源:比如嵌入式开发、Linux/Unix等一般都采用面向过程开发,性能是它们首要考虑条件。
缺点:与面向对象对比--可维护性差、扩展性低,耦合度高。 面向对象: 优点:可维护性好、扩展性高,耦合度低。由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加的灵活、更加易于维护。
缺点:与面向过程对比--性能差。

二、为什么 Java 号称“一次编译,到处运行”?

这句话充分体现了 Java 的跨平台性,而之所以可以做到“一次编译,到处运行”,是因为 JVM(Java 虚拟机)的存在。

计算机只能识别 0/1 组成的机器指令,而不同平台(系统)的机器指令含义可能不同,所以 C、C++ 等语言在不同平台下,可能需要重新编译。

Java 源代码的扩展名为 .java,通过编译器可以将 Java 源文件编译成 .class 字节码文件,而 JVM 则负责将 .class 文件翻译成计算机可识别的机器指令。

Java 实际上是面向 JVM 编程的,只需要在不同平台安装其对应的 JVM,Java 文件经过编译后就能在不同平台上运行了。

总结:

1、JVM 屏蔽了操作系统之间的差异性,但是不同操作系统的 JVM 不同。
2、Java 程序只对 JVM 负责。
3、JVM 的可执行文件是 .class 文件。

三、Java 有哪些好处?

  • 跨平台(JVM)
  • 面向对象(具有封装、继承、多态等特性)
  • 简单(内存自动管理,垃圾回收机制)
  • 健壮(java是强类型语言)
  • 多线程(受操作系统制约,若系统不支持,则无法实现)

线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。C和C++采用单线程体系结构,而Java却提供了多线程支持。
Java在两方面支持多线程:
一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;
另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。
Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。Java的线程还包括一组同步原语。这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。

  • 分布式(数据分布:可以分布在不同主机上、操作分布:把一个计算分散在不同主机上处理)

Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。
Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便得实现Java的分布式特性。

  • 可靠性和安全性

Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。
首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;
其次,Java不支持指针,这杜绝了内存的非法访问;
第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;
第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界;
最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务便于恢复。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。上述几种机制结合起来,使得Java成为安全的编程语言。