Java4android学习之对象导论

简介:

今天开始的这个礼拜,回补java基本知识,再次回炉学习。


1 , 程序员必须建立起在机器模型和设计待解问题的模型之间的关联。建立这种关联是费力的,而且不属于编程语言所固有的功能,使得编程难以编写,并且维护代价高昂,同时也产生了作为副产物的整个“编程方法”行业。


2,对象具有状态,行为和标识。状态:每个对象可以拥有内部数据(它给出了对象的状态);方法:它们产生的行为;并且每个对象都可以和其他对象区分开来,具体就是每个对象在内存中都存在唯一的地址。


3,每个对象都有一个接口。创建抽象数据类型(类)是面向对象程序设计的基本概念之一。类描述了具有相同特性(数据元素)和行为(功能)的对象集合。接口确定了对某一特定对象所能发出的请求。在程序中必须要有满足这些请求的代码,这就是实现。向某个对象发送消息,其实就是产生某个请求,而请求和方法关联,自然就进行了方法的调用。


4,每个对象都提供服务。我们需要构建一个合理的对象来解决我们面临的问题。所以如何将问题分解为对象是我们需要思考的问题。高内聚是软件设计的基本要求之一,这意味着一个软件构件的各个方面“组合”的很好。


5, 被隐藏的具体实现。将程序开发人员按照角色分为“创建者”(那些创建新数据类型的程序员)和“客户端程序员”(那些在应用中使用数据类型的消费者)是大有裨益的。一个类被隐藏的部分意味着创建者可以任意的修改它而不用担心对其他人造成影响。被隐藏的部分也是对象内部脆弱的部分,很容易被粗心的或者不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序的bug。

访问控制的第一个存在原因是让客户端程序员无法触及他们不该触及的部分。第二个存在的原因是允许库设计者可以改变类内部的工作方式而不用担心影响到客户端程序员。


6,复用具体实现。代码复用是面向对象程序设计语言所提供的最了不起的优点之一。组合(composition)和聚合(aggregation)。组合常被视为“has-a”(拥有)关系。组合和聚合的区别是大多数人头痛的问题。聚合更为松散,它是“如果组合是动态发生的,那么它就是聚合”。可能还是很抽象,这我不得不举个《大话》里面的例子。组合,就好比大雁的翅膀和大雁的关系,大雁如果没了,大雁的翅膀肯定也就没了。聚合,就是大雁和雁群的关系,一个大雁它可以随时的加入到一个雁群里面,它还可以离开。关系就松散多了。

还有,能用组合关系就尽量用组合关系,而不是继承。


7,继承。为什么要有继承?因为我们想偷懒,当我们实现了一个类的时候,另外一个跟它类似的类,我们还是要重新定义,我们多么渴望通过拷贝现有的类然后改改就能够定义新的类。于是就有了“继承”。继承有个父类(基类),然后就是子类(导出类)。子类继承父类,父类的改动也会反映到子类。

当继承现有类型时,也就创造了新的类型。这个新的类型不仅包含了现有类型的所有成员(尽管private成员被隐藏起来了,而且不能访问),而且更为重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息都可以发送给导出类的对象。导出类和基类对接口的不同实现,即覆盖(Overriding)。导出类如果添加了新的接口,基类是无法访问的。这种关系虽然是继承,但是不是纯粹替代。叫"is-like-a",而不是“is-a"。


8,伴随多态的可互换对象。在处理类型的层次结构时候,经常把一个对象不当做它所属的特定类型来对待,而是将其当做基类的对象来对待。这使得我们可以编写出不依赖特定类型的代码。泛化(Generic)。添加新的类,并不需要更改调用它的地方,都统一采用基类来看待,来传递消息,却能够根据所传递的对象自身类型执行不同的实现。

那么如何实现这个机制的呢?这就引出了”前期绑定“和”后期绑定“。后期绑定是在程序运行的时候才能够确定它所调用的代码。(C++中采用virtual关键字来实现的,而Java中默认就打开)。把导出类看做是它的基类的过程叫做向上转型(Upcasting)


9,单根继承。C++ 和Java最争论的一个重要问题就是单继承和多继承的问题。这个问题各有各的好处,不过建议就是,如果你公司的代码以前有很多C代码,那么C++ 是比较好的;如果你的项目是从头开始,建议用Java。


10,容器。C++中,容器是标准C++ 类库的一部分,经常被称为标准模板库(Standard Template Library,STL)。Java中,具有满足不同需要的各种容器。在Java SE5之前,之前,容器的对象只有Java中通用类型:Object,这样进了容器,就只知道是Object类型,取出来的时候类型消失了,所以你要自己显式的向下转型,就是将Object转为你的类型,但有个问题,除非你确切的知道放进去的是什么,否则很容易发生放进去的是苹果,结果你非得说人家是凤梨,然后用凤梨在转人家,这样是会发生异常的。。

在Java SE5之后,Java容器增加了参数化类型,Java叫它范型。eg. ArrayList<Shap> shapes=new ArrayList<Shap>();这样就限定了我这个容器,只能够装Shape类型(当然,你懂得它的导出类也就是)。


11,对象的创建和生命期。C++认为效率控制是最重要的议题,所以它给了程序员选择的权利。为了追求最大的执行速度,对象的存储空间和生命期可以在编写程序的时候确定。Java是采用了动态内存分配的方式,在堆(Heap)内存池中动态创建对象。Java具有垃圾回收机制,当没有人引用这个对象的时候,对象会被释放。


12,异常处理:处理错误。异常发生的时候是不可以忽略的,你必须进行相应的处理,你可以在里面选择进一步校正,使得程序再次回到正规,或者你可以输出调试信息。而在C和C++中,经常用返回错误码来表示错误。但是,调用者却可以忽略你的错误码。。。所以,异常是具有强制性的。


13,并发编程。多线程问题。


14,Java和Internet。


相关文章
|
24天前
|
存储 Java
Java中判断一个对象是否是空内容
在 Java 中,不同类型的对象其“空内容”的定义和判断方式各异。对于基本数据类型的包装类,空指对象引用为 null;字符串的空包括 null、长度为 0 或仅含空白字符,可通过 length() 和 trim() 判断;集合类通过 isEmpty() 方法检查是否无元素;数组的空则指引用为 null 或长度为 0。
|
2月前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
2月前
|
安全 Java
Object取值转java对象
通过本文的介绍,我们了解了几种将 `Object`类型转换为Java对象的方法,包括强制类型转换、使用 `instanceof`检查类型和泛型方法等。此外,还探讨了在集合、反射和序列化等常见场景中的应用。掌握这些方法和技巧,有助于编写更健壮和类型安全的Java代码。
53 17
|
2月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
40 10
|
2月前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
144 4
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
40 4
|
2月前
|
Java
java代码优化:判断内聚到实体对象中和构造上下文对象传递参数
通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时
38 15
|
2月前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
56 1
|
4月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
4月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。

热门文章

最新文章

  • 1
    android FragmentManager 删除所有Fragment 重建
    18
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    31
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    36
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    43
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    145
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    47
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    59
  • 8
    Android历史版本与APK文件结构
    164
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    42