当前位置: 首页 > news >正文

定制开发微信小程序网站首页关键词如何优化

定制开发微信小程序,网站首页关键词如何优化,网络运营推广平台,哪些编程语言适合网站开发本章概要 为什么需要 RTTI RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息 RTTI 把我们从只能在编译期进行面向类型操作的禁锢中解脱了出来,并且让我们可以使用某些非常强大的程序。对 RTTI …

本章概要

  • 为什么需要 RTTI

RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息

RTTI 把我们从只能在编译期进行面向类型操作的禁锢中解脱了出来,并且让我们可以使用某些非常强大的程序。对 RTTI 的需要,揭示了面向对象设计中许多有趣(并且复杂)的特性,同时也带来了关于如何组织程序的基本问题。

本章将讨论 Java 是如何在运行时识别对象和类信息的。主要有两种方式:

  1. “传统的” RTTI:假定我们在编译时已经知道了所有的类型;
  2. “反射”机制:允许我们在运行时发现和使用类的信息。

为什么需要 RTTI

下面看一下我们已经很熟悉的一个例子,它使用了多态的类层次结构。基类 Shape 是泛化的类型,从它派生出了三个具体类: CircleSquareTriangle(见下图所示)。

在这里插入图片描述

这是一个典型的类层次结构图,基类位于顶部,派生类向下扩展。面向对象编程的一个基本目的是:让代码只操纵对基类(这里即 Shape )的引用。这样,如果你想添加一个新类(比如从 Shape 派生出 Rhomboid)来扩展程序,就不会影响原来的代码。在这个例子中,Shape 接口中动态绑定了 draw() 方法,这样做的目的就是让客户端程序员可以使用泛化的 Shape 引用来调用 draw()draw() 方法在所有派生类里都会被覆盖,而且由于它是动态绑定的,所以即使通过 Shape 引用来调用它,也能产生恰当的行为,这就是多态。

因此,我们通常会创建一个具体的对象(CircleSquare 或者 Triangle),把它向上转型成 Shape (忽略对象的具体类型),并且在后面的程序中使用 Shape 引用来调用在具体对象中被重载的方法(如 draw())。

代码如下:

import java.util.stream.*;abstract class Shape {void draw() {System.out.println(this + ".draw()");}@Overridepublic abstract String toString();
}class Circle extends Shape {@Overridepublic String toString() {return "Circle";}
}class Square extends Shape {@Overridepublic String toString() {return "Square";}
}class Triangle extends Shape {@Overridepublic String toString() {return "Triangle";}
}public class Shapes {public static void main(String[] args) {Stream.of(new Circle(), new Square(), new Triangle()).forEach(Shape::draw);}
}

输出结果:

在这里插入图片描述

基类中包含 draw() 方法,它通过传递 this 参数传递给 System.out.println(),间接地使用 toString() 打印类标识符(注意:这里将 toString() 声明为 abstract,以此强制继承者覆盖该方法,并防止对 Shape 的实例化)。如果某个对象出现在字符串表达式中(涉及"+"和字符串对象的表达式),toString() 方法就会被自动调用,以生成表示该对象的 String。每个派生类都要覆盖(从 Object 继承来的)toString() 方法,这样 draw() 在不同情况下就打印出不同的消息(多态)。

这个例子中,在把 Shape 对象放入 Stream<Shape> 中时就会进行向上转型(隐式),但在向上转型的时候也丢失了这些对象的具体类型。对 stream 而言,它们只是 Shape 对象。

严格来说,Stream<Shape> 实际上是把放入其中的所有对象都当做 Object 对象来持有,只是取元素时会自动将其类型转为 Shape。这也是 RTTI 最基本的使用形式,因为在 Java 中,所有类型转换的正确性检查都是在运行时进行的。这也正是 RTTI 的含义所在:在运行时,识别一个对象的类型。

另外在这个例子中,类型转换并不彻底:Object 被转型为 Shape ,而不是 CircleSquare 或者 Triangle。这是因为目前我们只能确保这个 Stream<Shape> 保存的都是 Shape

  • 编译期,stream 和 Java 泛型系统确保放入 stream 的都是 Shape 对象(Shape 子类的对象也可视为 Shape 的对象),否则编译器会报错;
  • 运行时,自动类型转换确保了从 stream 中取出的对象都是 Shape 类型。

接下来就是多态机制的事了,Shape 对象实际执行什么样的代码,是由引用所指向的具体对象(CircleSquare 或者 Triangle)决定的。这也符合我们编写代码的一般需求,通常,我们希望大部分代码尽可能少了解对象的具体类型,而是只与对象家族中的一个通用表示打交道(本例中即为 Shape)。这样,代码会更容易写,更易读和维护;设计也更容易实现,更易于理解和修改。所以多态是面向对象的基本目标。

但是,有时你会碰到一些编程问题,在这些问题中如果你能知道某个泛化引用的具体类型,就可以把问题轻松解决。例如,假设我们允许用户将某些几何形状高亮显示,现在希望找到屏幕上所有高亮显示的三角形;或者,我们现在需要旋转所有图形,但是想跳过圆形(因为圆形旋转没有意义)。这时我们就希望知道 Stream<Shape> 里边的形状具体是什么类型,而 Java 实际上也满足了我们的这种需求。使用 RTTI,我们可以查询某个 Shape 引用所指向对象的确切类型,然后选择或者剔除特例。

http://www.mmbaike.com/news/32238.html

相关文章:

  • 东莞网站建设 旅游最好用的磁力搜索神器
  • 如何在百度里做推广网站刷推广链接人数的软件
  • 开发公司空置房物业费会计科目关键词排名优化
  • 沈阳做企业网站的公司深圳网站做优化哪家公司好
  • 百度网站改版搜索引擎收录提交入口
  • 模板型网站建设成都疫情最新消息
  • 网络推广员是干什么的最新seo新手教程
  • 郑州网站建设公司电话广告联盟看广告赚钱
  • 广州网站建设 易企建站厦门seo招聘
  • vs连接数据库做网站阿里云免费域名
  • 企业网站建设训爱站网官网
  • 建设网站的价值淄博网站营销与推广
  • 网站建设的架构设计网站模板
  • 微擎可以做企业网站吗广告投放运营主要做什么
  • 国内适合个人做外贸的网站有哪些成品短视频软件大全下载手机版
  • 彩票娱乐网站建设seo入门到精通
  • 张雪峰谈广告学专业网站优化方案怎么写
  • 达州做淘宝网站郑州靠谱seo整站优化
  • 制作简易网站模板seo网站关键词优化快速官网
  • 网页设计规划优化营商环境条例全文
  • 个人做医疗类网站违法推广方案有哪些
  • ps网站banner怎么做贴吧推广
  • 一键生成淘宝主图的软件网站怎么优化关键词排名
  • 优秀的个人网站百度推广有哪些形式
  • 住房与城乡建设管理委员会网站seo网络排名优化
  • axure怎么做长页面网站aso优化教程
  • 焦作专业做网站公司百度引擎提交入口
  • 海口哪里做网站优化内容
  • 网站建设需要哪些软件优化搜索曝光次数的方法
  • 聊城手机网站建设巩义网站优化公司