精华内容
下载资源
问答
  • 主要介绍了浅谈web服务器项目中静态请求和动态请求处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Java的动态分派和静态分派的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 今天小编就为大家分享一篇PyTorch学习:动态和静态图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要给大家介绍了关于如何通过1个文件轻松搞定Asp.net core 3.1动态页面转静态页面的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Asp.net core 3.1具有一定的参考学习价值,需要的朋友们下面来...
  • 主要给大家介绍了关于Nginx + Tomcat实现请求动态数据请求静态资源的分离的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 给大家介绍了JSP下动态INCLUDE与静态INCLUDE的区别分析,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
  • 主要介绍了javascript实现动态导入js与css等静态资源文件的方法,基于回调函数实现该功能,具有一定参考借鉴价值,需要的朋友可以参考下
  • 今天小编就为大家分享一篇C++中静态初始化数组与动态初始化数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了详细介绍linux动态网络和静态网络克隆后的网络配置,具有一定的学习价值,有需要的可以了解一下。
  • 主要给大家介绍了关于vue路由教程之静态路由的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 本篇文章主要介绍了ThinkPHP实现静态缓存和动态缓存示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了 Spring AOP里的静态代理和动态代理用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了JavaScript静态作用域和动态作用域的实例代码,本文通过文字实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了Spring的实例工厂方法和静态工厂方法实例代码,具有一定借鉴价值,需要的朋友可以参考下
  • 主要介绍了动态JSP页生成静态HTML的方法,以实例形式较为详细的分析了JSP生成静态HTML页面的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解,具有一定的参考价值,有需要的可以了解一下。
  • 主要介绍了利用PyQt5+Matplotlib 绘制静态/动态图的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本篇文章主要详细介绍kvm虚拟机静态和动态迁移,具有一定的参考价值,有需要的可以了解一下。
  • 主要介绍了Android Fragment的静态注册和动态注册创建步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 动态网址与静态网址

    千次阅读 2019-08-01 13:56:00
    如果您为了让网址看起来像是静态的,而隐藏那些可以给谷歌提供有价值信息的参数,这样做反而会给该网址的抓取排名带来麻烦。我们的建议是: 请不要将一个动态网址改换格式以使其看起来是静态的 。尽可能地使用静态...
    Dynamic URLs vs. static URLs
    发表于:2008年9月22日,下午3: 20

    在跟网络管理员沟通时经常会出现这种情形,一些广为传播的理念可能在过去是正确的,但是可能已不再切合目前的情况了。当我们最近在跟几个朋友谈及关于网址的结构时就碰到这种情况。其中一个朋友很担心动态网址的使用,甚至认为"搜索引擎无法处理动态网址"。另外一个朋友觉得动态网址对搜索引擎来说完全不是问题,那些都是过去的事了。还有一个甚至说他从来都搞不懂动态网址和静态网址相比有什么区别。对于我们来说,这一刻使我们决定要好好研究一下动态网址和静态网址这个话题。首先,让我们来界定一下我们要谈论的主题:

    什么是静态网址?
    一个静态网址,顾名思义,就是一个不会发生变化的网址,它通常不包含任何网址参数。例如:http://www.example.com/archive/january.htm。您可以在搜索框里输入 filetype:html 在谷歌上搜索静态网址。更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。这也是为什么网站管理员们在处理大型的、经常更新的网站,像在线购物网站、论坛社区、博客或者是内容管理系统时,会使用动态网址的原因。

    什么是动态网址?
    如果一个网站的内容存储于一个数据库,并且根据要求来显示页面,这时就可以使用动态网址。在这种情况下,网站提供的内容基本上是基于模板形式的。通常情况下,一个动态网址看起来像这样: http://code.google.com/p/google-checkout-php-sample-code/issues/detail?id=31。您可以通过寻找像? = & 这样的符号识别出动态网址。动态网址有一个缺陷是不同的网址可以拥有相同的内容。这样导致不同的用户可能链向含有不同参数的网址,但是这些网址却都含有相同的内容。这也是为什么网络管理员有时候想要将这些动态网址重写成静态网址的原因之一。

    我是不是应该让我的动态网址看起来是静态的呢?
    在处理动态网址时,希望您能了解以下几点事实:
    1. 要正确地生成和维护从动态网址到静态化网址的重写转变实际上是一件很难的事情。
    2. 将原始的动态网址提供给我们会比较安全,请让我们来处理诸如探测和避开那些有问题的参数的事情。
    3. 如果您想重写网址,请去掉那些不必要的参数,同时请保持它动态网址的样子。
    4. 如果您想提供一个静态网址代替动态网址,那么您应该切实地生成相应的静态内容。

    静态和动态网址,Googlebot 对于哪一个识别得更好呢?
    我们碰到过很多网站管理员,像我们的朋友那样,认为静态或者看起来是静态的网址对于网站的索引和排名是有优势的。这种看法是基于这样一个假设,即认为搜索引擎在抓取和分析含有会话标识 (session ID) 和来源追踪器 (source tracker) 的网址时是有问题的。然而,事实是,谷歌在这两个方面都有了相当的进展。就点击率来说,静态网址可能略微有些优势,因为用户可以很容易地读懂这个网址。但是,就索引和排名来说,使用数据库驱动网站并不意味着明显的劣势。相比较将参数隐藏以使他们看起来是静态的网址来说,我们更希望网站将动态的网址直接提供给搜索引擎。

    现在,让我们来看一些有关动态网址的广为传播的看法,并且来纠正一些蒙蔽网站管理员的假说。:)

    传说:"动态网址不能被抓取。"
    事实:我们可以抓取动态网址并且解释不同的参数。如果您为了让网址看起来像是静态的,而隐藏那些可以给谷歌提供有价值信息的参数,这样做反而会给该网址的抓取和排名带来麻烦。我们的建议是: 请不要将一个动态网址改换格式以使其看起来是静态的。尽可能地使用静态网址来显示静态内容是可取的,但在您决定展示动态内容的情况下,请不要将参数隐藏起来从而使他们看起来像是静态的,因为这样做会删除掉那些有助于我们分析网址的有用信息。

    传说:"动态网址的参数要少于3个。"
    事实:对于参数的数量是没有限制的。但是,一个好的经验是 不要让您的网址太长(这个适用于所有的网址,不论是静态的还是动态的)。您可以去掉一些对于 Googlebot 来说不重要的参数,给用户一个好看一点的动态网址。如果您不能确定可以去掉哪些参数,我们建议您将动态网址中所有的参数都提供给我们,我们的系统会弄明白哪一些是不重要的。将参数隐藏起来会影响我们正确地分析您的网址,我们也就不能识别这些参数,一些重要信息可能也因此丢失了。

    下面一些是我们认为您可能会存在疑问的一些问题。

    这是否意味着我应该完全避免重写动态网址?
    这是我们的建议,除非您能确保您只是去掉多余的参数,或能够把所有有可能有不良影响的参数完整地删除。如果您把自己的动态网址任意修改使其看起来像是静态的,您要清楚这样做是有风险的,有可能会导致有些信息不能被正常地编译和识别。如果您想给您的网站再增加一个静态的版本,请您一定要提供一个真正意义上的静态的内容,比如生成那些可以通过网站相应路径而获取的文件。如果您仅仅是修改了动态网址的表现形式,而没有真正提供静态的内容,那么您有可能适得其反。请直接把标准的动态URL提供给我们,我们会自动找出那些冗余的参数。

    你能给我举一个例子么?
    如果您有一个像下面这样标准格式的动态网址:foo?key1=value&key2=value2,我们建议您不用改动它,谷歌会决定哪些参数可以去掉;或者您可以为用户去掉那些不必要的参数。不过要慎重,仅仅去掉那些不重要的参数。这里有一个含有多个参数的动态网址的例子:

    www.example.com/article/bin/answer.foo?language=en&answer=3&sid=98971298178906&query=URL
    • language=en – 标明这篇文章的语言
    • answer=3 – 这篇文章含有数字3
    • sid=8971298178906 – 会话标识代码是8971298178906
    • query=URL – 使这篇文章被找到的查询是[URL]
    并不是所有的参数都提供额外的信息。所以将这个网址重写为www.example.com/article/bin/answer.foo?language=en&answer=3 可能不会引起任何问题,因为所有不相关的参数都去掉了。

    下面是一些经过认为修改而看起来像是静态网址的例子。相比较没有重写、直接提供动态网址来说,这些网址可能会引起更多抓取方面的问题。
    • www.example.com/article/bin/answer.foo/en/3/98971298178906/URL
    • www.example.com/article/bin/answer.foo/language=en/answer=3/ sid=98971298178906/query=URL
    • www.example.com/article/bin/answer.foo/language/en/answer/3/sid/ 98971298178906/query/URL
    • www.example.com/article/bin/answer.foo/en,3,98971298178906,URL
    如果您将动态网址重写成如上所述的示例的话,可能会导致我们很多不必要的抓取,因为这些网址中都含有会话标识 (sid) 和查询 (query) 参数的可变值,这无形中生成了很多看起来不同的 URL ,而他们包含的内容却是相同的。这些格式让我们很难理解通过这个网址返回的实际内容和参数URL以及98971298178906是无关的。不过,下面这个重写的例子却将所有无关的参数都去掉了:
    • www.example.com/article/bin/answer.foo/en/3
    尽管我们可以正确地处理这个网址,我们还是不鼓励您使用这样的重写。因为它很难维护,而且一旦一个新的参数被加到原始的动态网址,那么这个网址就需要马上更新。不这样做的话就会再次导致生成一个隐藏了参数的貌似静态网址的 URL 。所以最好的解决方法是通常将动态网址保持他们原来的样子。或者,如果您去掉不相关的参数,请记住一定要保持这个网址是动态的:
    • www.example.com/article/bin/answer.foo?language=en&answer=3
    我们希望这篇文章能够对您和我们的朋友有帮助,使围绕动态网址的各种推测清晰化。如果您有更多的问题的话,欢迎加入我们的 网站管理员支持论坛进行讨论。

    转载于:https://www.cnblogs.com/ricksun/articles/1517704.html

    展开全文
  • 静态价值型投入产出模型实物型投入产出模型.pptx
  • 主要介绍了JAVA中堆、栈,静态方法静态方法的速度问题,堆栈得速度性能分析多角度给大家分析,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 动态代理与静态代理区别

    万次阅读 多人点赞 2018-09-18 09:26:55
    代理类委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。  图1:代理模式  ...

    一、代理概念 

    为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。 

    图1:代理模式 

    从图中可以看出,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject)形成一个“品”字结构。

    根据代理类的生成时间不同可以将代理分为静态代理和动态代理两种。 

    下面以一个模拟需求说明静态代理和动态代理:委托类要处理一项耗时较长的任务,客户类需要打印出执行任务消耗的时间。解决这个问题需要记录任务执行前时间和任务执行后时间,两个时间差就是任务执行消耗的时间。 

    二、静态代理 

    由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 

    清单1:代理接口 

    /**  
     * 代理接口。处理给定名字的任务。 
     */  
    public interface Subject {  
      /** 
       * 执行给定名字的任务。 
        * @param taskName 任务名 
       */  
       public void dealTask(String taskName);   
    }  

    清单2:委托类,具体处理业务。

    /** 
     * 真正执行任务的类,实现了代理接口。 
     */  
    public class RealSubject implements Subject {  
      
     /** 
      * 执行给定名字的任务。这里打印出任务名,并休眠500ms模拟任务执行了很长时间 
      * @param taskName  
      */  
       @Override  
       public void dealTask(String taskName) {  
          System.out.println("正在执行任务:"+taskName);  
          try {  
             Thread.sleep(500);  
          } catch (InterruptedException e) {  
             e.printStackTrace();  
          }  
       }  
    }  

    清单3:静态代理类

    /** 
     * 代理类,实现了代理接口。 
     */  
    public class ProxySubject implements Subject {  
     //代理类持有一个委托类的对象引用  
     private Subject delegate;  
       
     public ProxySubject(Subject delegate) {  
      this.delegate = delegate;  
     }  
      
     /** 
      * 将请求分派给委托类执行,记录任务执行前后的时间,时间差即为任务的处理时间 
      *  
      * @param taskName 
      */  
     @Override  
     public void dealTask(String taskName) {  
      long stime = System.currentTimeMillis();   
      //将请求分派给委托类处理  
      delegate.dealTask(taskName);  
      long ftime = System.currentTimeMillis();   
      System.out.println("执行任务耗时"+(ftime - stime)+"毫秒");  
        
     }  
    } 

    清单4:生成静态代理类工厂

    public class SubjectStaticFactory {  
     //客户类调用此工厂方法获得代理对象。  
     //对客户类来说,其并不知道返回的是代理类对象还是委托类对象。  
     public static Subject getInstance(){   
      return new ProxySubject(new RealSubject());  
     }  
    }  

    清单5:客户类

    public class Client1 {  
      
     public static void main(String[] args) {  
      Subject proxy = SubjectStaticFactory.getInstance();  
      proxy.dealTask("DBQueryTask");  
     }   
      
    }  

    静态代理类优缺点 

    • 优点:
    1. 业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
    • 缺点:
    1. 代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 
    2. 如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。 

    三、动态代理 

    动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。 

    1、先看看与动态代理紧密关联的Java API

    1)java.lang.reflect.Proxy

    这是 Java 动态代理机制生成的所有动态代理类的父类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。 

    清单6:Proxy类的静态方法

    // 方法 1: 该方法用于获取指定代理对象所关联的调用处理器  
    static InvocationHandler getInvocationHandler(Object proxy)   
      
    // 方法 2:该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象  
    static Class getProxyClass(ClassLoader loader, Class[] interfaces)   
      
    // 方法 3:该方法用于判断指定类对象是否是一个动态代理类  
    static boolean isProxyClass(Class cl)   
      
    // 方法 4:该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例  
    static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)   

    2)java.lang.reflect.InvocationHandler

    这是调用处理器接口,它自定义了一个 invoke 方法,用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类的代理访问。每次生成动态代理类对象时都要指定一个对应的调用处理器对象。 

    清单7:InvocationHandler的核心方法

    // 该方法负责集中处理动态代理类上的所有方法调用。第一个参数既是代理类实例,第二个参数是被调用的方法对象  
    // 第三个方法是调用参数。调用处理器根据这三个参数进行预处理或分派到委托类实例上反射执行  
    Object invoke(Object proxy, Method method, Object[] args)  

    3)java.lang.ClassLoader

    这是类装载器类,负责将类的字节码装载到 Java 虚拟机(JVM)中并为其定义类对象,然后该类才能被使用。Proxy 静态方法生成动态代理类同样需要通过类装载器来进行装载才能使用,它与普通类的唯一区别就是其字节码是由 JVM 在运行时动态生成的而非预存在于任何一个 .class 文件中。 

    每次生成动态代理类对象时都需要指定一个类装载器对象

    2、动态代理实现步骤

    具体步骤是:

    1. 实现InvocationHandler接口创建自己的调用处理器
    2. 给Proxy类提供ClassLoader和代理接口类型数组创建动态代理类
    3. 以调用处理器类型为参数,利用反射机制得到动态代理类的构造函数
    4. 以调用处理器对象为参数,利用动态代理类的构造函数创建动态代理类对象

    清单8:分步骤实现动态代理 

    // InvocationHandlerImpl 实现了 InvocationHandler 接口,并能实现方法调用从代理类到委托类的分派转发  
    // 其内部通常包含指向委托类实例的引用,用于真正执行分派转发过来的方法调用  
    InvocationHandler handler = new InvocationHandlerImpl(..);   
      
    // 通过 Proxy 为包括 Interface 接口在内的一组接口动态创建代理类的类对象  
    Class clazz = Proxy.getProxyClass(classLoader, new Class[] { Interface.class, ... });   
      
    // 通过反射从生成的类对象获得构造函数对象  
    Constructor constructor = clazz.getConstructor(new Class[] { InvocationHandler.class });   
      
    // 通过构造函数对象创建动态代理类实例  
    Interface Proxy = (Interface)constructor.newInstance(new Object[] { handler });  

    Proxy类的静态方法newProxyInstance对上面具体步骤的后三步做了封装,简化了动态代理对象的获取过程。

    清单9:简化后的动态代理实现 

    // InvocationHandlerImpl 实现了 InvocationHandler 接口,并能实现方法调用从代理类到委托类的分派转发  
    InvocationHandler handler = new InvocationHandlerImpl(..);   
      
    // 通过 Proxy 直接创建动态代理类实例  
    Interface proxy = (Interface)Proxy.newProxyInstance( classLoader,   
         new Class[] { Interface.class },  handler );   

    3、动态代理实现示例 

    清单10:创建自己的调用处理器 

    /** 
     * 动态代理类对应的调用处理程序类 
     */  
    public class SubjectInvocationHandler implements InvocationHandler {  
       
     //代理类持有一个委托类的对象引用  
     private Object delegate;  
       
     public SubjectInvocationHandler(Object delegate) {  
      this.delegate = delegate;  
     }  
       
     @Override  
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
      long stime = System.currentTimeMillis();   
      //利用反射机制将请求分派给委托类处理。Method的invoke返回Object对象作为方法执行结果。  
      //因为示例程序没有返回值,所以这里忽略了返回值处理  
      method.invoke(delegate, args);  
      long ftime = System.currentTimeMillis();   
      System.out.println("执行任务耗时"+(ftime - stime)+"毫秒");  
        
      return null;  
     }  
    }   

    清单11:生成动态代理对象的工厂,工厂方法列出了如何生成动态代理类对象的步骤。

    /** 
     * 生成动态代理对象的工厂. 
     */  
    public class DynProxyFactory {  
     //客户类调用此工厂方法获得代理对象。  
     //对客户类来说,其并不知道返回的是代理类对象还是委托类对象。  
     public static Subject getInstance(){   
      Subject delegate = new RealSubject();  
      InvocationHandler handler = new SubjectInvocationHandler(delegate);  
      Subject proxy = null;  
      proxy = (Subject)Proxy.newProxyInstance(  
        delegate.getClass().getClassLoader(),   
        delegate.getClass().getInterfaces(),   
        handler);  
      return proxy;  
     }  
    }  

    清单12:动态代理客户类 

    public class Client {  
      
     public static void main(String[] args) {  
      
      Subject proxy = DynProxyFactory.getInstance();  
      proxy.dealTask("DBQueryTask");  
     }   
      
    }  

    4、动态代理机制特点

    首先是动态生成的代理类本身的一些特点。

    • 包:如果所代理的接口都是 public 的,那么它将被定义在顶层包(即包路径为空),如果所代理的接口中有非 public 的接口(因为接口不能被定义为 protect 或 private,所以除 public 之外就是默认的 package 访问级别),那么它将被定义在该接口所在包(假设代理了 com.ibm.developerworks 包中的某非 public 接口 A,那么新生成的代理类所在的包就是 com.ibm.developerworks),这样设计的目的是为了最大程度的保证动态代理类不会因为包管理的问题而无法被成功定义并访问;
    • 类修饰符:该代理类具有 final 和 public 修饰符,意味着它可以被所有的类访问,但是不能被再度继承;
    • 类名:格式是“$ProxyN”,其中 N 是一个逐一递增的阿拉伯数字,代表 Proxy 类第 N 次生成的动态代理类,值得注意的一点是,并不是每次调用 Proxy 的静态方法创建动态代理类都会使得 N 值增加,原因是如果对同一组接口(包括接口排列的顺序相同)试图重复创建动态代理类,它会很聪明地返回先前已经创建好的代理类的类对象,而不会再尝试去创建一个全新的代理类,这样可以节省不必要的代码重复生成,提高了代理类的创建效率。
    • 类继承关系:该类的继承关系如图: 

    图2:动态代理类的继承关系 

    由图可见,Proxy 类是它的父类,这个规则适用于所有由 Proxy 创建的动态代理类。而且该类还实现了其所代理的一组接口,这就是为什么它能够被安全地类型转换到其所代理的某接口的根本原因。 

    接下来让我们了解一下代理类实例的一些特点。每个实例都会关联一个调用处理器对象,可以通过 Proxy 提供的静态方法 getInvocationHandler 去获得代理类实例的调用处理器对象。在代理类实例上调用其代理的接口中所声明的方法时,这些方法最终都会由调用处理器的 invoke 方法执行,此外,值得注意的是,代理类的根类 java.lang.Object 中有三个方法也同样会被分派到调用处理器的 invoke 方法执行,它们是 hashCode,equals 和 toString,可能的原因有:一是因为这些方法为 public 且非 final 类型,能够被代理类覆盖;二是因为这些方法往往呈现出一个类的某种特征属性,具有一定的区分度,所以为了保证代理类与委托类对外的一致性,这三个方法也应该被分派到委托类执行。当代理的一组接口有重复声明的方法且该方法被调用时,代理类总是从排在最前面的接口中获取方法对象并分派给调用处理器,而无论代理类实例是否正在以该接口(或继承于该接口的某子接口)的形式被外部引用,因为在代理类内部无法区分其当前的被引用类型。 

    接着来了解一下被代理的一组接口有哪些特点。首先,要注意不能有重复的接口,以避免动态代理类代码生成时的编译错误。其次,这些接口对于类装载器必须可见,否则类装载器将无法链接它们,将会导致类定义失败。再次,需被代理的所有非 public 的接口必须在同一个包中,否则代理类生成也会失败。最后,接口的数目不能超过 65535,这是 JVM 设定的限制。 

    最后再来了解一下异常处理方面的特点。从调用处理器接口声明的方法中可以看到理论上它能够抛出任何类型的异常,因为所有的异常都继承于 Throwable 接口,但事实是否如此呢?答案是否定的,原因是我们必须遵守一个继承原则:即子类覆盖父类或实现父接口的方法时,抛出的异常必须在原方法支持的异常列表之内。所以虽然调用处理器理论上讲能够,但实际上往往受限制,除非父接口中的方法支持抛 Throwable 异常。那么如果在 invoke 方法中的确产生了接口方法声明中不支持的异常,那将如何呢?放心,Java 动态代理类已经为我们设计好了解决方法:它将会抛出 UndeclaredThrowableException 异常。这个异常是一个 RuntimeException 类型,所以不会引起编译错误。通过该异常的 getCause 方法,还可以获得原来那个不受支持的异常对象,以便于错误诊断。 

    5、动态代理的优点和美中不足 

    • 优点:动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandler.invoke)。这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。在本示例中看不出来,因为invoke方法体内嵌入了具体的外围业务(记录任务处理前后时间并计算时间差),实际中可以类似Spring AOP那样配置外围业务。 
    • 缺点:诚然,Proxy 已经设计得非常优美,但是还是有一点点小小的遗憾之处,那就是它始终无法摆脱仅支持 interface 代理的桎梏,因为它的设计注定了这个遗憾。回想一下那些动态生成的代理类的继承关系图,它们已经注定有一个共同的父类叫 Proxy。Java 的继承机制注定了这些动态代理类们无法实现对 class 的动态代理,原因是多继承在 Java 中本质上就行不通。 

    有很多条理由,人们可以否定对 class 代理的必要性,但是同样有一些理由,相信支持 class 动态代理会更美好。接口和类的划分,本就不是很明显,只是到了 Java 中才变得如此的细化。如果只从方法的声明及是否被定义来考量,有一种两者的混合体,它的名字叫抽象类。实现对抽象类的动态代理,相信也有其内在的价值。此外,还有一些历史遗留的类,它们将因为没有实现任何接口而从此与动态代理永世无缘。如此种种,不得不说是一个小小的遗憾。

     原文链接:动态代理与静态代理区别

    展开全文
  • 主要介绍了PHP动态页生成静态页的3种常用方法,通过三种不同的方法从不同的角度实现这一功能,有很好的参考借鉴价值,需要的朋友可以参考下
  • 在累积前景理论框架下建立了到达时间感知价值函数, 在此基础上假设累积感知价值是由出行收益、出行负效用到达时间感知价值三部分构成, 构建了一个基于累积感知价值静态网络均衡模型, 探讨了均衡解的存在性唯一...
  • 本文给大家分享java版C语言版简单使用静态语言实现动态数组的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
  • 主要介绍了Java动态代理静态代理实例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了python类函数中使用静态变量的方法,实例分析了三种常用的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 动态PE和静态PE计算

    千次阅读 2013-05-30 23:04:35
    P/E是Price/Earnign的缩写,中文称之为市盈率,是用来判断公司价值的常用的方法之一,市盈率有静态和动态之分: 静态市盈率是指用现在的股价除以过去一年已经实现的每股收益,例如万科07年每股收益为0.73元(加权,未...
    P/E是Price/Earnign的缩写,中文称之为市盈率,是用来判断公司价值的常用的方法之一,市盈率有静态和动态之分:
    


    静态市盈率是指用现在的股价除以过去一年已经实现的每股收益,例如万科07年每股收益为0.73元(加权,未加权的每股收益为0.70元),4月18日收盘价为20.30,那幺静态市盈率为:20.30/0.73=27.80倍;


    动态市盈率是指用现在的股价除以未来一年可能会实现的每股收益,但顺便提醒一下,未来一年的每股收益不能用一季度的业绩乘以4这样简单相加的方法,因为不同公司不同行业,每季度的业绩波动往往很大,再以万科为例子:07年一季度每股收益为0.09元,如果简单的四个季度相加,一年的收益也就是0.36元而已,但实际年报披露出来的却是0.73元,这就是房地产行业特殊的年末结算准则造成的.


    市盈率是用来衡量投资者通过现在股价投资,如果每年的每股收益都不变的情况下,收回成本的时间,27.80倍,表示的是需时27.80年,倍数越低,需时越短,总的来说,市盈率是越低越好.
    但是要留意,静态市盈率代表的是过去,参考意义不是很大,关键还是要看成长性,也就是动态市盈率;还有,不同市场,不同行业,不同公司,是不能只靠用市盈率的高低来判断其投资价值高低的,就算是同一市场,同一行业,不同公司,由于公司的基本面不同,市盈率的高低也不会一样,这是不能一概而论的,所以前面才说它是用来判断公司价值的常用的方法之一,而不是唯一. 
    市盈率PE分为静态市盈率PE和动态市盈率PE
    :静态PE=股价/每股收益(EPS)(上一年)        动态PE=股价*总股本/下一年净利润(需要自己预测)
    市盈率把股价和利润连系起来,反映了企业的近期表现。如果股价上升,但利润没有变化,甚至下降,则市盈率将会上升。
    一般来说,市盈率水平为:
    0-13 - 即价值被低估
    14-20 - 即正常水平
    21-28 - 即价值被高估
    28+ - 反映股市出现投机性泡沫
    股市的市盈率
    股息收益率
    上市公司通常会把部份盈利派发给股东作为股息。上一年度的每股股息除以股票现价,是为现行股息收益率。如果股价为50元,去年股息为每股5元,则股息收益率为10%,此数字一般来说属于偏高,反映市盈率偏低,股票价值被低估。
    一般来说,市盈率极高(如大于100倍)的股票,其股息收益率为零。因为当市盈率大于100倍,表示投资者要超过100年的时间才能回本,股票价值被高估,没有股息派发。
    一、怎样计算PE
    PE(市盈率)是一间公司股票的每股市价与每股盈利的比率。其计算公式如下:
    市盈率 =每股市价/每股盈利
    目前,几家大的证券报刊在每日股市行情报表中都附有市盈率指标,其计算方法为:
    市盈率 =每股收市价格/上一年每股税后利润
    对于因送红股、公积金转增股本、配股造成股本总数比上一年年末数增加的公司,其每股税后利润按变动后的股本总数予以相应的摊薄。
    以东大阿派为例,公司1998年每股税后利润0.60元,1999年4月实施每10股转3股的公积金转增方案,6月30日收市价为43.00元,则市盈率为
    43/0.60/(1+0.3)=93.17(倍) 公司行业地位、市场前景、财务状况。
    以市盈率为股票定价,需要引入一个"标准市盈率"进行对比--以银行利率折算出来的市盈率。在1999年6月第七次降息后,我国目前一年期定期存款利率为2.25%,也就是说,投资100元,一年的收益为2.25元,按市盈率公式计算:
    100/2.25(收益)=44.44(倍)
    如果说购买股票纯粹是为了获取红利,而公司的业绩一直保持不变,则股利的收适应症与利息收入具有同样意义,对于投资者来说,是把钱存入银行,还是购买股票,首先取决于谁的投资收益率高。因此,当股票市盈率低于银行利率折算出的标准市盈率,资金就会用于购买股票,反之,则资金流向银行存款,这就是最简单、直观的市盈率定价分析。
    二、正确看待市盈率指标
    在股票市场中,当人们完全套用市盈率指标去衡量股票价格的时候,会发现市场变得无法理喻:股票的市盈率相差悬殊,并没有向银行利率看齐;市盈率越高的股票,其市场表现越好。是市盈率指标没有实际应用意义吗?其实不然,这只是投资者没能正确把握对市盈率指标的理解和应用而已。
    1.市盈率指标对市场具有整体性的指导意义
    市场的资金永远向收益率高的地方流动,就股票市场的整体平均市盈率而言,基本上是与银行利率水平看齐的。在降息以前,我国股市平均市盈率达到35-40倍就显得偏高了,而经过7次降息后,股市平均市盈率上升至40倍,则被视为"恢复性"的上涨。
    2.衡量市盈率指标要考虑股票市场的特性。
    与银行储蓄相比,股票市场具有高风险、高收益的特征。股票投资的收益,除了股息收入外,还存在买卖价差产生的损益。股票定价适当高于银行存款标准,体现了风险与收益成正比的原则。
    3.以动态眼光看待市盈率
    市盈率指标计算以公司上一年的盈利水平为依据,其最大的缺陷在于忽略了对公司未来盈利状况的预测。从单个公司来看,市盈率指标对业绩较稳定的公用事业、商业类公司参考较大,但对业绩不稳定的公司,则易产生判断偏差。以上面提到的东大阿派为例,由于公司市场前景广阔,具有很高的成长性,受到投资者的追捧,股价上升,市盈率居高不下,但以公司每年80%的利润增长速度,以现价购入,一年后的市盈率已经大幅下降;相反,一些身处夕阳产业的上市公司,目前市盈率低到20倍左右,但公司经营状况不佳,利润呈滑坡趋势,以现价购入,一年后的市盈率可就奇高无比了。
    市盈率高,在一定程度上反映了投资者对公司增长潜力的认同,不仅在中国股市如此,在欧美、香港成熟的投票市场上同样如此。从这个角度去看,投资者就不难理解为什么高科技板块的股票市盈率接近或超过100倍,而摩托车制造、钢铁行业的股票市盈率只有20倍了。当然,这并不是说股票的市盈率越高就越好,我国股市尚处于初级阶段,庄家肆意拉抬股价,造成市盈率奇高,市场风险巨大的现象时有发生,投资者应该从公司背景、基本素质等方面多加分析,对市盈率水平进行合理判断。
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,850
精华内容 41,940
关键字:

动态价值和静态价值