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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/ren-jie/p/5296820.html

大家一起和snailren学java-(一)对象导论相关推荐

  1. 【零基础学Java】—对象的向上和向下转型(二十七)

    [零基础学Java]-对象的向上转型(二十七) 对象的向上转型,其实就是多态的写法 格式:父类名称 对象名=new 子类名称(): 含义:右侧创建一个子类对象,把它当做父类来看待使用 注意事项:向上转 ...

  2. 【零基础学Java】—对象数组(十三)

    [零基础学Java]-对象数组(十三) /*** @author :CaiCai* @date : 2022/4/7 11:08*/ public class demo05 {public stati ...

  3. 【零基础学Java】—对象的内存图(八)

    [零基础学Java]-对象的内存图(八) 一.一个对象的内存图 二.两个对象的内存图 三.使用对象类型作为方法的参数 public class PhoneParam {public static vo ...

  4. 【0基础学java】教学日志:javaSE-面向对象6-面向对象前4章上机作业点评,主要涉及继承、封装、多态三个章节的内容

    目录 一.面向对象第一章上机作业参考答案(略) 二.面向对象第二章上机作业参考答案: 三.面向对象第三章上机作业参考答案: 1.上机练习1已在第三章博客中编写,请参考: 2.上机练习2 四.面向对象第 ...

  5. 教妹学Java(二十三):怎么理解 Java 中对象和类的概念?

    你好呀,我是沉默王二,CSDN 排名前十的博客专家.这是<教妹学 Java>专栏的第二十三篇,我们来理解一下 Java 中的对象和类,以及它们俩的概念--什么是对象?什么又是类? 本专栏中 ...

  6. java查看对象锁级别_对象级别锁 vs 类级别锁(Java)

    前言 对于多线程(并发)和Spring Boot这两块在同步进行学习中,在看到使用synchronized关键字使操作同步时,看到和C#中不一样的东西,所以这里呢,就深入学习了下,若有错误之处,还望指 ...

  7. 模具和java哪个好_93年,本科毕业一年(模具专业),想学Java转行怎么样?

    谢邀. 行. 首先,楼主本科学历,可以认为学习能力是足够的 其次,刚毕业一年,职业生涯是最具弹性的阶段,完全可以有更多的可能. 楼主既然有了明确的转行Java开发,那应该是对Java的行情有过了解的吧 ...

  8. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

    http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA         从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...

  9. [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[JDBC](1)

    MIS信息管理系统实战开发之使用MySQL实现保存 开发背景 ID.姓名.年龄为公共信息,而学生有成绩,工人有工资 定义一个抽象类Person(ID.姓名.年龄),学生是其子类,有成绩,工人是其子类有 ...

最新文章

  1. linux的一些机制Signal, Fork,
  2. 如何学习网络协议(学习笔记)
  3. 为什么分类对象越多训练时间越长?
  4. ios 标准 #pragma mark的用法
  5. boost::spirit模块实现错误处理的测试程序
  6. Java代码总结【1】_查询手机号码归属地
  7. owasp maven_OWASP依赖性检查Maven插件–必须具备
  8. Seata 与 Nacos Config配置中心整合_03
  9. Java中堆内存和栈内存详解(转)
  10. java 下载工具_java_java编写Http服务器下载工具,这个工具比较简单,用于配合 - phpStudy...
  11. HttpComponents组件探究 - HttpClient篇
  12. LeetCode-179:数组自动排序工具Arrays.sort(),比较器Comparator的正确打开方式
  13. 【ANSYS命令流】为什么是命令流?
  14. 新西兰留学再移民,哪些专业好就业?
  15. Docker存储配置切换loop-lvm到direct-lvm
  16. 利用Mono.Cecil动态修改程序集来破解商业组件
  17. 应届毕业生求职,注意事项
  18. 下载json文件,解决浏览器对JSON文件链接直接打开问题
  19. 全国高校恋爱关系图谱:北大受宠爱,浙大最孤独
  20. spss下载过程中无法解压的问题

热门文章

  1. PowerDesigner设计的数据库 ORA-0092
  2. [原创]ExtAspNet秘密花园(十六) — 表格之排序与分页
  3. AWS 云技术专栏系列文章
  4. FD.io/VPP — IPSec
  5. Go 语言编程 — Overview
  6. VMware 虚拟机的虚拟磁盘编程知识点扫盲之一
  7. NR 5G UE和5G网络功能之间的安全流程
  8. 算法(第四版)之快速排序
  9. 简述Linux 文件系统的目录结构
  10. Redis分布式锁 Spring Schedule实现任务调度