下传与运行时的类型鉴别

由于“上传”(沿着继承关系向上移动)之后,类的具体信息丢了,因此“用下传——也就是沿着继承关系重新向下移动——来提取类型的信息”就成了顺理成章的事情了。你知道上传总是安全的;基类的接口不可能比派生类的更大。因此它肯定能收到那些通过基类接口发送的消息。但是碰到下传的时候,你就不能肯定“这个形状是不是圆了”(只是举个例子)。它可以是一个三角形,一个矩形或是其它什么形状。

要想解决这个问题,必须要有办法能够确保下传是正确的,这样你就不会把对象误传给另一个类型了,于是也不会向它发送什么它不能接受的消息了,这是相当不安全的。某些语言(像C++)需要经过使用特别处理,才能安全地进行下传。但是Java类型传递要经过检查!所以,尽管看上去只是用一对括号做了些普通的类型转换,但是运行的时候,系统会对这些转换做检查,以确保它确实是你想要的转换类型。如果不是,你就会得到一个classcastException。这种运行时的类型检查被称为“运行时的类型鉴别”。

Java中的常量分组

由于interface的数据成员自动就是static和final的,因此interface是一种非常方便的,创建一组常量的工具。这点同C和C++的enum很相似。注意,Java的编程风格是,用全部大写字母(用下划线分隔同一个标识符里的各个单词)来表示,用常量进行初始化的static和final变量。

Interface的数据成员自动就是public的,因此就不必再注明了。你可以想对别的package那样,用importc08.*或者c08.Months把它引进来,这样就能在这个package的外面用Months.JANUARY之类的表达式来使用这些常量了。当然,你得到的是一个int,因此它没有像C++的enum那样的类型安全,但是这种很常见手法要比直接在程序里面用数字要好得多。这种方法通常被称为使用神奇数字,并且使得代码的维护变得非常困难。

用继承扩展interfere

实现多个接口的时候可能会遇到一些小问题。例如,Can和Action都有一个一模一样的fight()方法。这里没有问题,因为它们使用的是同一个方法。但是,有个难题要归因于覆写、实现和重载的不期而遇,以及“不能仅通过返回值来辨别重载的方法。如果把最后两行的注释去掉,就会出现错误。而且在要并的接口里面放上同名的方法,通常也会破坏程序的可读性,所以别这么做。

你可以用继承,往interface里面添加新的方法,也可以用继承把多个interface合并成一个新的interface。在这两种情况下,你所得到的都只是一个新的interface。但是我们用Dang对Monster做了一点扩展,然后生成一个新的interface,这样就实现了这个接口。

内部类与上传

到目前为止,内部类还没有表现出什么非常惊人的特质。毕竟,如果你所追求的只是隐藏机制,那么Java已经有了——只要赋予类package权限(只能在package内部访问)就行了,何必要把它做成内部类。

但是,当你将它上传到基类,特别是interface的时候,就会发现,内部类还是有它自己的特性的。(实际上,将对象上传给它所实现的接口与将它上传给基类是完全相同。)这样,任何人都不能看到或者访问到内部类了——也就是interface的实现了,于是隐藏实现就变得轻而易举了。你所得到的,只是一个基类或interface的reference。

Closure与回调

Closure是一种能调用的对象,它记录了创建它的那个作用域信息。读过这段定义你就能看出,内部类就是一种面向对象的closure,因为它不仅保存了宿主类的所有信息(创建它作用域),而且还自动保存指向那个宿主类对象的reference,更何况它还有权操控这个对象的所有成员,即使它们是private的。

在要求Java提供指针机制的众多议论中,最具有吸引力一条就是,要让它呢能进行回调。有了回调,你就能给别的对象一段信息,然后在未来某个时点,让它反过来调用发起方对象了。但是,如果是用指针来实现回调,那你就只能指望程序员了,希望它们不要误用指针。正如你所看到的,Java在这个问题上更为谨慎,因此它没有指针,内部类所提供的closure是一个完美的解决方案——它比指针更灵活,也更安全。

加在异常上面的限制

覆写方法的时候,你只能抛出这个方法在基类中的版本所声明的异常。这是一个有用的限制,因为同基类打交道的代码能自动地同它的派生类,包括它抛出地异常打交道。异常方面的限制对构造函数不起作用。你可以从stormyInning看出,派生类的构造函数根本不看基类抛出的是什么类型的异常,它只会根据它自己的需要抛出异常。然而,由于派生类的构造函数总是会以这样或那样的形式调用基类的构造函数(这里调用的是默认的构造函数),派生类的构造函数必须在异常说明中声明,它有可能会抛出其基类构造函数所抛出的异常。注意,派生类的构造函数不能捕获任何由基类构造函数抛出的异常。

内部类与控制框架

内部类还有一种更实际的用法,我把它称为“控制框架”,应用程序框架是一个或一组为解决某种特定类型的问题而设计的类。如果向使用应用程序框架,通常情况下只要继承其中的一个或多个类,再覆写某些方法就可以了。应用程序框架为你提供了一套解决问题的通用方案,而你只要覆写方法就可以根据你的特殊要求定制这个方案了(这就是一种模板方法的设计)。

控制框架是应用程序框架中的一种,主要用于响应事件。如果系统的首要任务就是对事件做出响应,那么它就被称为事件驱动系统。图形用户界面(GUI)是创建应用程序时要解决的最棘手的问题之一,它差不多就是完全由时间驱动的。Java的swing类库就是一个控制框架。它通过频繁的使用内部类,非常潇洒的解决了GUI的难题。

网站建设中颜色心理的运用

网站的风格直接影响着访问者的第一印象,如何运用各种不同的颜色来打造网站的风格,这是每个网站策划师和设计师必须掌握的一个基本技能。
    
    我们知道色彩的直接心理效应来自色彩的物理光刺激对人的生理发生的直接影响。每一种颜色都对应一个心理,我们先来了解一下一些主流颜色所代表的颜色心理。
    
    许多心理学家曾做过一些实验,他们发现在红色环境中,人的脉搏会加快,血压有所升高,情绪兴奋冲动。而处在蓝色环境中,脉搏会减缓,情绪也较沉静。而科学家也发现,颜色能影响脑电波,脑电波对红色反应是警觉,对蓝色的反应是放松。
    
       色彩理论中也明确地肯定了色彩对人心理的影响。冷色与暖色是依据心理错觉对色彩的物理性分类,对于颜色的物质性印象,大致由冷暖两个色系产生。波长长的红光和橙、黄色光,本身有暖和感,因此光照射到任何色都会有暖和感。相反,波长短的紫色光、蓝色光、绿色光,有寒冷的感觉。在冷食或冷的饮料包装上使用冷色,视觉上会引起你对这些食物冰冷的感觉。冬日,把卧室的窗帘换成暖色,就会增加室内的暖和感。
  
       以上的冷暖感觉,并非来自物理上的真实温度,而是与我们的视觉与心理联想有关。总的来说,人们在日常生活中既需要暖色,又需要冷色。 
  
       冷色与暖色除了给我们温度上的不同感觉之外,还会带来其它的一些感受,例如,重量感、湿度感等。比方说,暖色偏重,冷色偏轻;暖色有密度强的感觉,冷色有稀薄的感觉;两者相比较,冷色的透明感更强,暖色则透明感较弱;冷色显得湿润,暖色显得干燥;冷色又很远的感觉,暖色则有迫近感。
  
       一般说来,在狭窄的空间中,若想使它变得宽敞,应该使用明亮的冷调。由于暖色有前进感,冷色有后退感,可在细长的空间中的两壁涂以暖色,近处的两壁涂以冷色,空间就会从心理上感到更接近方形。

如何向百度提交适配地图

       百度站长平台很早就开通了网站地图提交功能,但是该功能需要申请通过才能使用,因此很大一部分站长都没有权限使用该功能,无法向百度提交网站地图。不过百度还有另一项功能:开放适配,我们通过该功能同样可以达到向百度提交网站地图的效果。
  为了提升用户的移动搜索结果浏览体验,百度移动搜索对具有对应手机站的PC站提供“开放适配”服务。站长可以向百度提交PC网站与移动网站的对应关系,从而使手机用户与PC用户能够浏览适应其终端的页面。开放适配有3种:自主适配、标注Meta声明、提交对应关系Sitemap。我们想要达到向百度提交网站地图的效果,需要使用第三种适配方式:提交对应关系Sitemap。

让wordpress网站在2秒钟以内打开的方法

   wordpress是全世界最流行的博客程序之一,模版丰富插件完善,很容易搭建出一个精彩的网站。只是,随着插件、工具、用户的增多,网站会越来越慢,即便是用上高速云主机,都很难在2秒钟以内打开,一定程度上降低了用户体验。
  如果希望网站很精彩,又希望浏览起来很流畅,那么要怎么做才行呢?

  作为一个有三年wordpress使用经历的老站长,为了提升网站速度,尝试过多种方法和技巧,好比使用php加速、开启http缓存、减少插件等;经过大量的尝试,在保证精彩界面的同时,又一次让网站在2秒钟以内打开。下面,本人简单分享几种靠谱的wordpress提速方法。