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. C#操作SQL Server中的Image类型数据

    该例子是一个对SQL Server数据类型的一个操作例子,具有写入.读取功能. 1:准备数据库 1)创建数据库 Test 2)创建表 Table_1 (分别有2个字段:id(Int).photo(Im ...

  2. ceph安装对象网关

    1.概述 安装3个网关节点分别是:controller-03.controller-04和controller-05,使用ceph gw自带的Civetweb提供服务,前端使用nginx作为前端代理. ...

  3. 转:isualvm远程监控Tomcat

    一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. JVM 监控工具 Java VisualVM .jvisua ...

  4. windows64下安装MySQLdb连接数据库

    MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: 1.首先要下载:http://www.codegood.com/downloads,由于我的python是2 ...

  5. HDU - 1078 FatMouse and Cheese(记忆化+dfs)

    FatMouse and Cheese FatMouse has stored some cheese in a city. The city can be considered as a squar ...

  6. QDUOJ ycb的ACM进阶之路 二进制多重背包

    ycb的ACM进阶之路 发布时间: 2017年5月22日 14:30   最后更新: 2017年5月22日 14:31   时间限制: 1000ms   内存限制: 128M 描述 ycb是个天资聪颖 ...

  7. Linux绘图函数

    gdk_draw_line () gdk_draw_rectangle () gdk_draw_arc () gdk_draw_polygon () gdk_draw_string () gdk_dr ...

  8. 一些unity资源

    雨凇解包 http://www.xuanyusong.com/archives/3618 http://www.cnblogs.com/lixiang-share/p/5840444.html u3d ...

  9. 5G时代的智慧物流~圆通副总裁相峰

        图片来自“百度百科”   本文是圆通速递CEO.国家工程实验室主任相峰先生在2019全球物流技术大会的演讲,在演讲中,相峰先生主要阐述了自己对5G的看法以及5G在物流领域的应用.   以下是演 ...

  10. jmter介绍及安装

    一.   Apache JMeter介绍 1.       Apache JMeter是什么 Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力 ...