OOP,是java语言的特性。面向对象思想贯穿整个java开发。

  那什么是面向对象呢?什么是对象?

  在面向对象设计语言看来,万事万物都为对象。生活中的一个物体,有自己的属性,有自己的活动。比如一辆汽车,有轮胎,有座椅等等,也可以加速,减速。这在OOP中就是属性和方法。通过编程,将一个个的对象联系起来,通过方法来相互之间传递消息,这样就构成了一套程序。

  每个对象,都有自己的类型,比如说宝马车,它的“类”可以为汽车。物体都属于一个大类。因此如果在一特定的类下面,所有的对象都能接受到同样的消息。换句话说,比如属于汽车类下的小轿车,越野车,大客车,是不同的对象,但是如果发出“踩油门”的指令,这几个对象都能接受到该指令并进行自己的处理。每个对象都有接口。也就是每个对象都通过方法来做事。通过方法,对象可以对外提供服务。在设计对象时,如果以“提供服务”的思想来进行设计,可以提高程序的内聚性。

  在对程序进行开发使用时,存在两种角色。第一是类的开发者。这种开发者开发的是一个个库,来提供服务。第二种明显就是程序的使用者了。使用者通过对开发者开发的库进行开发应用。因此作为类的开发者或者在开发类的时候,在设计时需要注意隐藏部分的设计。隐藏部分数据或者方法,不仅可以防止使用者在调用时,误操作敏感脆弱的部分。同时使得类的开发者能以对使用者透明的情况下修改隐藏部分的程序。使用public、private、protect等进行访问控制。

  在将类创建好了后,那我们就要去用类了。如果我们希望能够减少代码量,或者便于程序的扩展、维护、健壮等等,那就可以用复用类的形式达到目的。复用代码的方式有两种。第一种是“组合”,将现成的类组合成一个新类。一种是继承。通过对现有的类进行扩展和覆盖,也能复用代码。

  我们知道,封装、继承、多态是面向对象三大特性。java的多态其实是在代码复用中最重要的特性。多态成就了接口!泛化(generic)是多态的一种体现形式。不同的参数类型,在代码运行的时候,才能具体知道要运行什么代码。这样就和面向过程的程序有很大区别。面向过程的程序在编译阶段,对每个函数都具体到一个绝对地址。这是“前期绑定”。而java是“后期绑定”,当对象发送消息时,才知道要运行什么代码。编译器的作用只是确保要调用的方法存在,以及对参数和返回值进行验证。java通过对象中存储的信息来计算需要调用什么方法。

  同时,在java中,所有的对象都是继承与object类。这样的好处就是能保证所有的对象都具备某些共同的功能,能够简化对象的创建以及垃圾回收。java的对象创建时,由new进行分配空间创建,创建于堆中。当对象不可达时,由GC自动进行回收。这里我们可以看出,对象的创建和回收是走的两条不同的路。GC需要通过软指针一直监控着各个对象的情况,这也是java性能不好的原因之一。真是成也GC,败也GC。

大家一起和snailren学java-(一)对象导论的更多相关文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  2. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  3. 快学Java NIO 续篇

    可以先看Java NIO的整体介绍,这篇接着说以下内容,<快学Java NIO>续篇 FileChannel SocketChannel ServerSocketChannel Java ...

  4. 快学Java NIO

    Java NIO Tutorial 地址:http://tutorials.jenkov.com/java-nio/index.html Java NIO系列教程译文地址:http://ifeve.c ...

  5. (二)一起学 Java Collections Framework 源码之 AbstractCollection

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...

  6. 2018年如何快速学Java

    前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...

  7. 学JAVA第二十天,接触异常处理,自定义异常

    1.java.lang.NullPointerException(经常报)(运行时异常) 属于运行时异常,是编译器无法预知的异常,比如你定义了一个引用变量String a,但是你确没有用new关键字去 ...

  8. 学JAVA第十天,一维数组及二维数组的使用。

    今天老师讲了JAVA数组,之前学C#的时候就学过一维数组,至于二维数组当时只是粗略普及了一下. 现在想学JAVA又学到了数组,但是这次不同,注重讲二维数组,因为老师知道我们都了解一维数组了. 所以现在 ...

  9. 再学Java 之 interface的成员变量

    前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...

随机推荐

  1. CodeFlex AutoUpdate

    http://autoupdaterdotnet.codeplex.com/downloads/get/888100

  2. 爬虫之BeautifulSoup, CSS

    1. Beautiful Soup的简介 2. Beautiful Soup 安装 可以利用 pip 或者 easy_install 来安装,以下两种方法均可 easy_install beautif ...

  3. 条款29:为“异常安全”而努力是值得的

    当异常被抛出时,带有异常安全性的函数: 1.不泄露任何资源 2.不允许数据败坏   异常安全函数提供以下三个保证之一: 1.基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效的状态下.没有任何对 ...

  4. 33.Docker安装Mysql及用户配置

    mysql在官方上有两个镜像 这个是一个优化过的mysql 使用这个命令 安装mysql 演示最简单的方式去安装mysql: 这种方式安装的用户名没有,密码没有 docker run -d -p 33 ...

  5. 正则表达式/i,/g,/ig,/gi,/m的含义

    正则表达式中/i,/g,/ig,/gi,/m的区别和含义 /i (忽略大小写)/g (全文查找出现的所有匹配字符)/m (多行查找)/gi(全文查找.忽略大小写)/ig(全文查找.忽略大小写)

  6. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)

    B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K   腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...

  7. 百度地图API图标、文本、图例与连线

    百度地图开放平台功能强大,使用简单,为地图的自定义提供了非常方便的途径! 本文以绘制一张全国机器辐射图为例记录其基本使用方法,效果如下图: 图中包括了带图标和文本的标注,连线以及图例. 1.关于坐标 ...

  8. 浅析Jupyter Notebook

    一 概述 Jupyter Notebook是以web交互式的编程接口,是IPython notebook的升级版本.主要是针对python,另外支持运行 40 多种编程语言.Jupyter可以在个人机 ...

  9. pandas基础(2)_多重索引

    1:多重索引的构造 >>> #下面显示构造pd.MultiIndex >>> df1=DataFrame(np.random.randint(0,150,size= ...

  10. ue4 模拟tween

    timeline的设置,注意timeLine可以使用外部的曲线,这个比较方便做各种曲线,timeline内部只适合打单个点