大家一起和snailren学java-(一)对象导论
OOP,是java语言的特性。面向对象思想贯穿整个java开发。
那什么是面向对象呢?什么是对象?
在面向对象设计语言看来,万事万物都为对象。生活中的一个物体,有自己的属性,有自己的活动。比如一辆汽车,有轮胎,有座椅等等,也可以加速,减速。这在OOP中就是属性和方法。通过编程,将一个个的对象联系起来,通过方法来相互之间传递消息,这样就构成了一套程序。
每个对象,都有自己的类型,比如说宝马车,它的“类”可以为汽车。物体都属于一个大类。因此如果在一特定的类下面,所有的对象都能接受到同样的消息。换句话说,比如属于汽车类下的小轿车,越野车,大客车,是不同的对象,但是如果发出“踩油门”的指令,这几个对象都能接受到该指令并进行自己的处理。每个对象都有接口。也就是每个对象都通过方法来做事。通过方法,对象可以对外提供服务。在设计对象时,如果以“提供服务”的思想来进行设计,可以提高程序的内聚性。
在对程序进行开发使用时,存在两种角色。第一是类的开发者。这种开发者开发的是一个个库,来提供服务。第二种明显就是程序的使用者了。使用者通过对开发者开发的库进行开发应用。因此作为类的开发者或者在开发类的时候,在设计时需要注意隐藏部分的设计。隐藏部分数据或者方法,不仅可以防止使用者在调用时,误操作敏感脆弱的部分。同时使得类的开发者能以对使用者透明的情况下修改隐藏部分的程序。使用public、private、protect等进行访问控制。
在将类创建好了后,那我们就要去用类了。如果我们希望能够减少代码量,或者便于程序的扩展、维护、健壮等等,那就可以用复用类的形式达到目的。复用代码的方式有两种。第一种是“组合”,将现成的类组合成一个新类。一种是继承。通过对现有的类进行扩展和覆盖,也能复用代码。
我们知道,封装、继承、多态是面向对象三大特性。java的多态其实是在代码复用中最重要的特性。多态成就了接口!泛化(generic)是多态的一种体现形式。不同的参数类型,在代码运行的时候,才能具体知道要运行什么代码。这样就和面向过程的程序有很大区别。面向过程的程序在编译阶段,对每个函数都具体到一个绝对地址。这是“前期绑定”。而java是“后期绑定”,当对象发送消息时,才知道要运行什么代码。编译器的作用只是确保要调用的方法存在,以及对参数和返回值进行验证。java通过对象中存储的信息来计算需要调用什么方法。
同时,在java中,所有的对象都是继承与object类。这样的好处就是能保证所有的对象都具备某些共同的功能,能够简化对象的创建以及垃圾回收。java的对象创建时,由new进行分配空间创建,创建于堆中。当对象不可达时,由GC自动进行回收。这里我们可以看出,对象的创建和回收是走的两条不同的路。GC需要通过软指针一直监控着各个对象的情况,这也是java性能不好的原因之一。真是成也GC,败也GC。
大家一起和snailren学java-(一)对象导论的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- 快学Java NIO 续篇
可以先看Java NIO的整体介绍,这篇接着说以下内容,<快学Java NIO>续篇 FileChannel SocketChannel ServerSocketChannel Java ...
- 快学Java NIO
Java NIO Tutorial 地址:http://tutorials.jenkov.com/java-nio/index.html Java NIO系列教程译文地址:http://ifeve.c ...
- (二)一起学 Java Collections Framework 源码之 AbstractCollection
. . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...
- 2018年如何快速学Java
前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...
- 学JAVA第二十天,接触异常处理,自定义异常
1.java.lang.NullPointerException(经常报)(运行时异常) 属于运行时异常,是编译器无法预知的异常,比如你定义了一个引用变量String a,但是你确没有用new关键字去 ...
- 学JAVA第十天,一维数组及二维数组的使用。
今天老师讲了JAVA数组,之前学C#的时候就学过一维数组,至于二维数组当时只是粗略普及了一下. 现在想学JAVA又学到了数组,但是这次不同,注重讲二维数组,因为老师知道我们都了解一维数组了. 所以现在 ...
- 再学Java 之 interface的成员变量
前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...
随机推荐
- rmmod: chdir(/lib/modules): No such file or directory
内核版本:linux3.4.20 交叉编译器:arm-linux-gcc 4.3.3 busybox : busybox 1.20 问题: 使用rmmod会出现 rmmod : chdir(/lib ...
- java:Socket介绍(一)
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单 ...
- Python 同ip网站查询(制作网站接口)
老师专门打电话回来说不让玩电脑~~ 呵呵. LOL把被人坑死了. 五排果然不适合我. 去翻了下曾经的Python项目. 在爬虫文件夹下面找到了这个. 我也就厚脸皮的什么都不改就放上来了: #co ...
- python2 + selenium + eclipse 中,配置好runserver 127.0.0.1:9000,运行的时候,报错
python2 + selenium + eclipse 中,配置好runserver 127.0.0.1:9000,运行的时候,报错,如图: 原因: google发现是WSGI appl ...
- The type org.springframework.core.io.support.ResourcePatternResolver cannot be resolved. It is ind
转自:https://blog.csdn.net/evilcry2012/article/details/49208909 缺包 spring-core-.RELEASE.jar
- Excel中导入到oracle使用merge into 差异性更新数据库
merge into temp1 ausing (select ID from (Select ID from temp1 ...
- [poj2955/nyoj15]括号匹配(区间dp)
解题关键:了解转移方程即可. 转移方程:$dp[l][r] = dp[l + 1][r - 1] + 2$ 若该区间左右端点成功匹配.然后对区间内的子区间取max即可. nyoj15:求需要添加的最少 ...
- SeetaFace教程(一) 在 VS 中的编译安装和环境配置
SeetaFace开源库由FaceDetection.FaceAlignment.FaceIdentification三部分组成.FaceDetection是在一副图片中检测出人脸区域,以一个方形区域 ...
- 虚拟机中的Linux安装VMware Tools
虚拟机中的Linux安装VMware Tools Tools" TITLE="虚拟机中的Linux安装VMware Tools" /> Tools" TI ...
- sqlserver2012——变量declare
1.声明变量病定义类型 赋值操作 ) set @name='小明' select @name 使用select进行赋值 ) select @name='李明' seelelct @name