动态

反射基本知识

独自空忆成欢 提交于 2020-01-26 15:55:48
介绍反射之前先介绍静态动态语言的概念 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化,通俗点说就是在运行时代码可以根据某些条件改变自身结构 主要动态语言:Object-C、C#、JavaScript、PHP、Python等 静态语言 与动态语言相对应的,运行结构不可变的语言就是静态语言,如Java、C、C++ Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特征。Java的动态性让编程的时候更加灵活! 反射的基本概念(Java Reflection) Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任何对象的内部属性及方法。例 Class c = Class.forName("java.lang.String"); 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。 所以说,这个对象就像镜子一样,看到这个类的结构,有反射“光线”的作用。 创建方法两种方式: 正常方式: 反射方式: 反射机制提供的功能:

c++ -- 动态数组

不羁的心 提交于 2020-01-26 14:52:00
一、 关于 数组 的使用,有几个特殊的地方需要注意: 1.一维数组名可当做指针 具体应用:一维数组/二维数组的传参(参见博客“c++ --二维数组参数传递 http://www.cnblogs.com/cygalaxy/p/6963789.html ”) 2.动态数组 具体应用:根据实际需要为数组开辟具体大小。 int *p; //声明动态数组p为全局变量,在函数内确定实际长度 int main() { int a=5; p=new int(a*sizeof(int)); //为动态数组p开辟5个int元素空间 for(int i=0;i<5;++i) { p[i]=i*2; //p[i]等价于*(p+i) cout<<p[i]<<" "; } cout<<endl; return 0; } 运行结果: 0 2 4 6 8 二、几种 动态数组 介绍: 1.采用STL中vector<T>,方便,不需要考虑开辟空间 2.采用指针,如上所示,先声明一个指针,然后用new(c语言中用malloc)申请实际需要的内存。 3.c++primer5在介绍数组一节中明确指出声明数组不能使用变量,详细如下: int a=5; int arr[a]={0,1,2,3,4}; //错误,a不是常量 const int b=5; int arr1[b]={0,1,2,3,4}; //正确,b是常量

Java静态分派和动态分派

谁说胖子不能爱 提交于 2020-01-26 12:31:32
/*--> */ /*--> */ 文章参考:https://blog.csdn.net/ns_code/article/details/17965867 public class StaticDispatch { static abstract class Humnan {} static class Man extends Humnan {} static class Woman extends Humnan {} public void hello(Humnan guy) { System.out.println("hello, Humnan"); } public void hello(Man guy) { System.out.println("hello, Man"); } public void hello(Woman guy) { System.out.println("hello, Woman"); } public static void main(String[] args) { Humnan man = new Man(); Humnan woman = new Woman(); StaticDispatch dispatch = new StaticDispatch(); dispatch.hello(man); dispatch.hello(woman)

C++动态数组(vector)

馋奶兔 提交于 2020-01-26 05:23:56
动态数组简介 有时候,我们在做题时会思考数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。这也就出现了所谓的动态数组,动态数组是指在声明时没有确定数组大小的数组。动态数组可以在任何时候改变大小,既灵活又方便,有助于有效管理内存。 但是大部分情况下,我们还是使用静态数组的,尤其是在打比赛的时候。但是有时如果我们用静态数组空间会炸,所以只好用动态数组。但是动态数组又不太好写,因此C++的SLT给出了一个容器vector来帮助我们。 vector容器 所在头文件: vector 定义:(其中Type为类型,如int,char,结构体,string等等) vector < Type > v ; //默认初始化 v为空 vector < Type > v ( v1 ) ; //用v1定义v vector < Type > v ( n ) ; //v有n个值为0的元素 vector < Type > v ( n , x ) ; //v有n个值为x的元素 vector < Type > v [ MAXN + 10 ] ; //第一维大小是(MAXN + 10),第二维是动态的二维数组 常用操作: v [ i ] ; //v的第i个元素 v . clear ( ) //清空v v . push_back ( x ) ; //在尾部添加元素 v . pop

C#中Dynamic关键字

风流意气都作罢 提交于 2020-01-25 23:44:28
dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能。 什么是"动态"?   编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Java经常被认为是静态化类型的语言,而Python、Ruby和JavaScript是动态类型语言。   一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型。这种方法有利有弊:代码编写起来更快、更容易,但无法获取编译器错误,只能通过单元测试和其他方法来确保应用正常运行。   C#最初是作为纯静态语言创建的,但是C#4添加了一些动态元素,用于改进与动态语言和框架之间的互操作性。 C# 团队考虑了多种设计选项,但最终确定添加一个新关键字来支持这些功能:dynamic。   dynamic关键字可充当C#类型系统中的静态类型声明。这样,C#就获得了动态功能,同时仍然作为静态类型化语言而存在。   由于编译时不会去检查类型,所以导致IDE的IntellSense失效。 dynamic、Object还是Var?   那么,dynamic、Object和var之间的实际区别是什么?何时使用它们?   先说说var,经常有人会拿dynamic和var进行比较。实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。   var实际上编译器抛给我们的语法糖,一旦被编译

Spring源码分析之——AOP的原理及初始化细节

倖福魔咒の 提交于 2020-01-25 02:46:53
废话不多说!!!!!! AOP 是 Aspect Oriented Programming 的缩写,译为面向切向编程。 原理:Spring AOP的底层源码是基于动态代理和拦截器模式。 对拦截器有疑问的可以看: 设计模式之——拦截器模式 为什么要动态代理? ——答:因为业务类本身是不会主动调用切面逻辑(避免耦合),所以业务类必须被代理,由代理类负责调用业务类,并且调用切面;Spring AOP的JDK动态代理的Invocation类是:JdkDynamicAopProxy,这个类完完整整地实现了动态代理以及后续的拦截器模式的切面调用。 AOP调用切面的原理? ——答:AOP的切面调用本质上是一个拦截器模式,通过解析配置文件把Adivce Bean(切面Bean)封装成一个个拦截器(Interceptor),组成一个调用链(chain),在代理类中调用,调用方式同拦截器模式一模一样。 看上图,切面Bean可以实现MethodBeforeAdvice, AfterReturning, Throwing等接口,实现invoke方法,而Spring通过MethodBeforeAdviceInterceptor,AfterReturningAdviceInterceptor等拦截器类封装业务切面Bean,这样就可以持有业务Advice Bean对象

css的div动态水平垂直居中

依然范特西╮ 提交于 2020-01-24 20:52:48
div动态水平垂直居中,思路如下: (1)先定位。如果相对于距离最近的父元素,用absolute;如果相对于body,用fixed。 (2)然后,top和left都设为50%。 (3)要居中的div的margin-top和margin-left,都设置为该div高度和宽度的一半。 position:absolute; width:200px; height:100px; left:50%; top:50%; border:1px solid red; margin-left:-100px; margin-top:-50px; 如果只是水平居中,只用一个margin就行了。 margin:0 auto; 来源: https://www.cnblogs.com/lsongyang/p/7493712.html

【物联网智能网关-13】Html5:Canvas+WebSocket实现远程实时通信(上)

纵饮孤独 提交于 2020-01-23 10:31:16
在上一篇博文《 网关为核心,互联网为基础构建物联网平台 》中简要介绍了基于.NET Micro Framework如何构建Web Server应用,本篇文章将基于Html5的Canvas和WebSocket技术详细介绍远程实时通信的实现。 无论是windows还是linux平台都已提供现成的Web Server技术,在服务端支持诸如ASP.net、ASP、PHP等动态网页脚本的解析,通过服务端脚本的解析可以非常方便的操作数据库和动态生成网页。不过如果在嵌入式系统也实现类似的功能,那就必须实现脚本解析引擎,否则无法执行网页中服务端的脚本程序,也就无法实现所谓的动态网页了。但是实现或移植一套脚本解析引擎,不仅难度高,并且代码数量大,对资源相对紧张的嵌入式系统来说也是一件划不来的事情,所以对一些无系统或轻量级的嵌入式系统实现Web Server,都是用本地语言(如C/C++)实现CGI接口(可参见百度百科 CGI词条 ),来处理客户端的POST和GET请求,从而实现动态网页。 对于物联网应用领域来说,一个所谓的动态网页,基于用户的需求,其实很简单。一是作为Web Server端的嵌入式设备获取的数据发生了变化,可以在客户端的网页中动态呈现出来;二是用户有控制或配置需求,可以通过网页向服务端发命令,让服务端执行相关请求。 为了让服务端的数据动态在用户客户端(也就是浏览器)显示

Jdk和Cglib 的区别

廉价感情. 提交于 2020-01-23 05:04:21
一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的代理类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了 接口 ,默认情况下会采用 JDK的动态代理 实现AOP。 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP(<aop:aspectj-autoproxy proxy-target-class="true"/>)。 3、如果目标对象没有实现了接口, 必须采用CGLIB库 ,spring会自动在JDK动态代理和CGLIB之间转换。 如何强制使用CGLIB实现AOP? (1)添加CGLIB库,SPRING_HOME/cglib/*.jar。 (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>。 JDK动态代理和CGLIB字节码生成的区别? (1)JDK动态代理只能对 实现了接口的类 生成代理,而不能针对类。 (2)CGLIB是针对 类 实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以该类或者方法最好不要生命成final。 来源: https://www.cnblogs.com/panning/p

贪吃蛇,自动找苹果吃(动态链表实现)(未做到完全躲避蛇身)理论上分数可刷到无限大

家住魔仙堡 提交于 2020-01-23 03:15:32
通过动态链表实现 自定义蛇身长度,速度,地图大小,规则 蛇自动吃苹果时: 无视蛇吃自己死亡规则分数可刷到无限大(蛇可叠加),加上蛇吃自己平均分15分左右 测试版,待改善 以下是演示效果 动态链表贪吃蛇,实现自动追踪食物,分可刷到无限大 规则控制内容 # define LEN 5 //初始长度 int speed = 0 ; //初始速度 int autotexta = 1 ; //蛇吃后是否增长,1为增长 int autotextb = 0 ; //判定蛇吃自己开关,1为打开 /*刷测试模块(及游戏结束后立刻重新开始)*/ int texta = 1 ; //刷测试次数开关,1为开 int times = 100 ; //刷几次 int limit = 0 ; //得分最高限制,仅限于刷次数时有效,0为无限次 int pause = 0 ; //刷测试时结束暂停 /*自动控制模块*/ int autoall = 1 ; //自动控制总开关 int auto1 = 0 ; int auto2 = 0 ; 移动蛇模块 void movesnake ( ) { if ( _kbhit ( ) ) { fflush ( stdin ) ; ch = _getch ( ) ; } struct snake * lsd = tail ; if ( change ) { gotoxy ( lsd