当前位置:文档之家› PHPCMS_V9调用方法

PHPCMS_V9调用方法

PHPCMS_V9调用方法
PHPCMS_V9调用方法

标题限制:{str_cut($r[title],36)} {$r[title]}

简介限制:{str_cut($r[description],112)}

链接:{$r[url]} OR {$r[url]}

缩略图片:{thumb($r[thumb],90,60)}

日期:{date('Y-m-d',$r[inputtime])}

标题{$title}

内容{$content}

日期{$inputtime}

来源{$copyfrom}

{IMG_PA TH}图片路径

{JS_PA TH}JS路径

{CSS_PATH}CSS路径

{siteurl($siteid)}网站域名

一级栏目

{pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"}

  • 首页
  • {loop $data $r}

  • {$r[catname]}
  • {/loop}

    {/pc}

    {推荐位调用方法}

    {pc:content action="position" posid="2" order="listorder DESC" num="4"}

    {loop $data $r}

    {str_cut($r[title],36)}

    {if $n==1}{/if}{str_cut($r

    [description],112)}


    {/loop}

    {/pc}

    去掉程序里的省略号

    phpcms\libs\functions\global.func.php文件里

    某栏目最新文章:

    {pc:content action="lists" catid="6,14,15,16" num="10" order="id DESC" return="info"}

    {/pc}

    在首页调用全站栏目最新,最热门点击,最多回复的文章

    {pc:get sql="select * from v9_news where status=99 order by id desc" num="10"}

    {loop $data $r}

    {$r[title]}

    {/loop}

    {/pc}

    thumb="1" 判断缩略图

    调用有图片的文章

    {pc:content action="lists" catid="6,14,15,16" num="10" thumb="1" order="id DESC"

    return="info"}

    {loop $data $r}

    {/loop}

    {/pc}

    列表页调用

    {pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"}

    {$pages}

    {/pc}

    网站首页{siteurl($siteid)}

    当前位置{catpos($catid)}

    上级栏目:{$CATEGORYS[$CATEGORYS[$catid]['parentid']]['catname']}

    栏目名和链接

    [{$CATEGORYS[$r[catid]][catname]}]

    JS关闭窗口或JS关闭页面的几种代码

    第一种:JS定时自动关闭窗口

    第二种:点击链接没有提示的JS关闭窗口

    关闭窗口

    第三种:窗口没有提示自动关闭的js代码

    js另存为、打印、属性、加入收藏、关闭等代码收藏

    js打开代码

    classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser

    width=0>

    可能提示“权限不足”

    js另存为代码

    >

    id=WebBrowser

    width=0>

    可能提示“权限不足”

    js属性代码

    classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0>

    可能提示“权限不足”

    js打印代码

    classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0>

    可能提示“权限不足”

    打印

    js页面设置代码

    >

    id=WebBrowser

    width=0>

    可能提示“权限不足”

    js刷新代码

    js导入收藏代码

    onClick=window.external.ImportExportFavorites(true,);>

    js导出收藏代码

    onClick=window.external.ImportExportFavorites(false,);>

    js加入收藏代码

    type=button value=加入收藏夹>

    js整理收藏夹代码

    type=button value=整理收藏夹>

    js查看原文件代码

    value=查看源文件>

    js语言设置代码

    value=语言设置>

    js前进代码

    js后退代码

    js关闭代码

    注:上面代码中onclick的值即为命令代码,可以同样使用在链接中,如:关闭

    调用类的方法

    语法如下: 语法 [访问修饰符] 返回值的类型方法名([参数列表]){ //方法体 }

    (1)访问修饰符 已经讲述过类的访问修饰符,其实同理,这里的方法的访问修饰符功能也是一样,public 表示公共的,private 表示私有的。 在程序中,如果将变量或者方法声明为public,就表示其他类可以访问,如果声明为private,

    (2)方法的返回类型。 方法是供别人调用的,调用后可以返回一个值,这个返回值的数据类型就是方法的返回类型,可以是int、float、double、bool、string 等。如果方法不返回任何值,就使用void。

    语法 return 表达式; 如果方法没有返回值,则返回类型应该使用void(空虚;空的),用于说明无返回值。 如:public void Singing() //无返回值 { Console.Write(“在唱歌。。。”); } return 语句做两件事情:表示已经完成,现在要离开这个方法;如果方法产生一个值,这个值放置在return 后面,即<表达式>部分。意思就是“离开该方法,并且将<表达式>的值返回给调用其的程序”。

    注意:在编写程序的时候,一定要注意方法声明中返回值的类型和方法体中真正的返 回的值的类型是否匹配,如果不匹配,后果很严重。比如在下面这个ToString()方法中,返 回类型是String 类型,因此在方法体中必须用return 返回一个字符串,否则编译器将报错。

    (3)方法名 定义一个方法都要有一个名称 注意:方法名主要用于调用这个方法时用,命名方法就像命名变量、类一样,要遵守一定的规则,如必须以字母、下划线“_”或“$”开头,绝对不能以数字开头。

    过程和子过程的定义和调用方法(精)

    实习六 过程和子过程的定义和调用方法 地点:计算机实验室。每名学生一台计算机。 实习时间:90分钟 指导教师:任课教师,实习指导教师 学生分组:每三人为一组。每名教师负责七个组的指导。 实习目的: 1、 掌握自定义函数过程和子过程的定义和调用方法. 2、 掌握形参和实参的对应关系. 3、 掌握值传递和地址的传递方式. 4、 掌握变量、函娄和过程的作用域. 5、 掌握递归概念和使用方法. 熟悉程序设计中的常用算法. 实验6.1 编一子过程ProcMin,求一维数组a 中的最不值,子过程的形参自己确定. 主调程序随机产生10个-300~-400之间的整数,调用ProcMin 子过程,显示 最小值. 实验6.2 编一函数Max(a( )),求一维数组a 中的最大值.主调程序随机产生10个 100~200之间的数,调用Max 函数,显示最大值. 实验6.3 编一个函数过程MySin(x),求 MySin(x)=()()!121...! 7!5!31121753--++-+---n x x x x x n n 当第n 项的精度小于510-时结束计算,x 为弧度.主要程序同时调用MySin 和内

    部函数Sin,进行验证. 【提示】 关键是找部分级数和的通项,通项表示如下: ))2()1/((12+?+???-=+i i x x T T i i ......7,5,3,1=i 实验6.4编一个函数过程HtoD(H),将十六进制字符串H 转换成十进制数.主调程序 调用HorD 函数,再调用内部函数Hex(number)进行逆向验证. 实验6.5 参阅教篇例6.2,编一个子过程DeleStr(s1,s2),将字符串s1中出现s2子字 符串删去,结果还是存放在s1中. 例如:s1=”12345678AAABBDFG12345” s2=”234” 结果:s1=”15678AAABBDFG15” 【提示】 解决此题的方法有以下要点: (1) 在s1字符串中找s2的子字符串,可利用lnStr()函数,要考虑到s1中可能存在多个或不存在s2字符串,用Do While Instr(s1,s2)﹥0循环结构来实现. 若在s1中找到s2的子字符串,首先要确定s1字符串的长度,因s1字符串在进行多次删除时,长度在变化..然后通过Left() 、Mid() 或Rigth()函数的调用达到删除s1中存在的s2字符串. 实验6.6 编一函数过程MaxLength(s),在已知的字符串s 中,找出最长的单词.假定 字符s 内只含有字母和空格,空格发隔不同的单词.程序运行界面如图2.6.1 所示

    JAVA里面方法调用时传对象参数的陷阱

    JAVA里面方法调用时传对象参数的陷阱 类似的问题,又被人问到了几次,决定还是简单总结一下吧。这个问题,一些老手已经很清楚了,但有时也会很不小心的被XX了一把。 其实问题的核心,就是参数虽然是传的引用,但参数就是参数,他自身是一个本地的局部引用而已,设为首页只不过在这个时刻和调用者指向了同一个对象。但并不代表这个局部引用在整个方法调用期间内能始终和调用者保持一致。 下面是2个测试,分别测试可修改的Object和不可修改的 /** * JA V A里面对象参数的陷阱 */ public class Test { public static void main(String[] args) { TestV alue tv = new TestV alue(); tv.first(); TestInteger ti = new TestInteger(); ti.first(); } } class TestV alue { class V alue { public int i = 15; } // 初始化 V alue v = new V alue(); public void first() { // 当然是15 System.out.println(v.i); // 第一次调用 second(v); System.out.println(v.i); third(v); System.out.println(v.i); } public void second(V alue v) { // 此时这里的v是一个局部变量 // 和类属性的v相等 System.out.println(v == this.v); v.i = 20; } public void third(V alue v) { // 重新设置一个对象 v = new V alue();

    12.4.3 包含实例变量的方法调用[共2页]

    COBOL I AM WORKING I AM PLAYING I AM LEARNING COBOL 该段客户程序首先创建了一个基于HUMANCLS类的实例。并且,该程序使用数据部中定义的数据M来引用该实例。其后,该程序通过数据M实现了HUMANCLS类的实例中3个方法的调用。关于HUMANCLS类的原型,同前面章节中的一致。 12.4.3 包含实例变量的方法调用 上一小节仅是使用客户程序实现了最基本的方法调用。在以上所调用的方法中,只包含了一条输出语句,并未涉及到实例中的变量。本节将在此基础上,讨论如何通过客户程序实现包含有实例变量的方法调用。 例如,在HUMANCLS类中有3个实例变量,可分别表示姓名、年龄和心情状态。此处要求通过客户程序,分别调用包含有以上3个实例变量的方法。其中所要实现的功能是能够对实例状态进行设置,并得到该状态的输出信息。 为实现以上功能,首先需要重写HUMANCLS类。不妨将重写后的HUMANCLS类命名为HUMANCLS2。重写后的HUMANCLS2类需要包含6个方法。设置姓名、年龄和心情状态为其中的3个方法。输出姓名、年龄和心情状态信息为另外的3种方法。HUMANCLS2类的代码如下。 IDENTIFICATION DIVISION. CLASS-ID. HUMANCLS2 INHERITS BASECLS. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. REPOSITORY. CLASS BASECLS IS 'BASECLS' CLASS HUMANCLS IS 'HUMANCLS'. * IDENTIFICATION DIVISION. OBJECT. DATA DIVISION. WORKING-STORAGE SECTION. 01 NAME PIC X(10). 01 AGE PIC 999. 01 MOOD PIC X(5). PROCEDURE DIVISION. * IDENTIFICATION DIVISION. METHOD-ID. SETNAME. DATA DIVISION. LINKAGE SECTION. 01 PASS-NAME PIC X(10). PROCEDURE DIVISION USING PASS-NAME. MOVE PASS-NAME TO NAME. END METHOD SETNAME. * IDENTIFICATION DIVISION. METHOD-ID. SETAGE. DATA DIVISION. 25312.4 COBOL中的客户程序

    java方法的调用基础入门

    1 方法 /* 方法:完成特定功能的代码块。 注意:在很多语言里面有函数的定义,而在Java中函数被称为方法。 方法格式: 修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...) { 方法体语句; return 返回值; } 详细解释: 修饰符:目前就用public static。后面我们再详细的讲解其他的修饰符。 返回值类型:就是功能结果的数据类型。 方法名:符合命名规则即可。方便我们的调用。 参数: 实际参数:就是实际参与运算的。 形式参数;就是方法定义上的,用于接收实际参数的。 参数类型:就是参数的数据类型 参数名:就是变量名 方法体语句:就是完成功能的代码。 return:结束方法的。 返回值:就是功能的结果,由return带给调用者。 要想写好一个方法,就必须明确两个东西:

    A:返回值类型 结果的数据类型 B:参数列表 你要传递几个参数,以及每个参数的数据类型 需求:求两个数据之和的案例 方法的执行特点: 不调用,不执行。 如何调用呢?(有明确返回值的调用) A:单独调用,一般来说没有意义,所以不推荐。 B:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。 C:赋值调用,推荐方案。 */ class FunctionDemo { public static void main(String[] args) { int x = 10; int y = 20; //方式1:单独调用 //sum(x,y); //方式2:输出调用 //System.out.println(sum(x,y));

    //System.out.println(30); //方式3:赋值调用 int result = sum(x,y); //result在这里可以进行操作 System.out.println(result); } /* 需求:求两个数据之和的案例 两个明确: 返回值类型:int 参数列表:2个,都是int类型。 */ public static int sum(int a,int b) { //如何实现呢? //int c = a + b; //return c; //c就是a+b,所以,我可以直接返回a+b return a + b; } } 2 方法注意事项

    远程调用的几种方式

    远程调用的几种方式 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB 和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍。 基本原理 要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO 来实现,其中传输协议有tcp、udp等等,tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。 应用级协议 远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如one way request、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端。 原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会提供: 1. 为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式; 2. 网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种方式通知远端计算机。 所以在学习应用级的远程通信协议时,我们可以带着这几个问题进行学习: 1. 传输的标准格式是什么? 2. 怎么样将请求转化为传输的流? 3. 怎么接收和处理流? 4. 传输协议是? 不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标准,至于传输协议则通常都是可选的,在java领域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,来具体的看看这些远程通信的应用级协议:

    【IT专家】js函数常见的写法以及调用方法

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 js函数常见的写法以及调用方法 2017/04/01 0 写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风的js函数的写法。不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考。1.常规写法(最常见的那种) ?//函数的写法function run () { alert(‘常规写法’);//这里是你函数的内容} // 调用run();2.匿名函数写法(可以想成给变量赋一个函数) ?// 匿名函数的写法var run = function(){ alert(‘这是一种声明函数的方式,左边是一个变量,右边是一个函数的表达式,意思就是把一个匿名的函数表达式赋给了变量myfun,只是声明了一个变量指向了一个函数对象。’);//这里是你函数的内容} // 调用run();3.将方法作为一个对象 ?// 作为对象方法,函数写法,这里创建了两个函数外面用{}包裹起来var Test = {run1:function(){ alert(‘这个必须放在一个对象内部,放在外边会出错!’);//这里是你函数的内容},run2:function(){ alert(‘这个必须放在一个对象内部,放在外边会出错!’);//这里是你函数的内容}}//调用Test.run1();//调用第1个函数Test.run2();//调用第2个函数4.构造函数中给对象添加方法javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。 ?// 给对象添加方法var funName = function(){}; funName.prototype.way = function(){ alert(‘这是在funName函数上的原始对象上加了一个way方法,构造函数中用到’); } // 调用var funname = new text();// 创建对象funname.way();//调用对象属性5.自执行函数js自执行函数查到了几种不同写法,放上来给大家看看 ?//方法1:最前最后加括号(function(){alert(1);}()); /*这是jslint推荐的写法,好处是,能提醒阅读代码的人,这段代码是一个整体。例如,在有语法高亮匹配功能的编辑器里,光标在第一个左括号后时,最后一个右括号也会高亮,看代码的人一就可以看到这个整体。*///方法2:function外面加括号(function(){alert(1);})(); //这种做法比方法1少了一个代码整体性的好处。//方法3:function前面加运算符,常见

    函数调用有哪几种方式

    函数调用有哪几种方式 我们知道在进行函数调用时,有几种调用方法,主要分为C式,Pascal式.在C和C++中 C式调用是缺省的,类的成员函数缺省调用为_stdcall。二者是有区别的,下面我们用 实例说明一下:(还有thiscall和fastcall) 1. __cdecl :C和C++缺省调用方式 C 调用约定(即用__cdecl 关键字说明)按从右至左的顺序压参数入栈,由调用者把 参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数 的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。 _cdecl 是C 和C++ 程序缺省的调用方式。每一个调用它的函数都包含清空堆栈的 代码,所以产生的可执行文件大小会比调用_stdcall 函数的大。函数采用从右到左的 压栈方式。VC 将函数编译后会在函数名前面加上下划线前缀。它是MFC 缺省调用约 定。 例子: void Input( int &m,int &n); 以下是相应的汇编代码: 00401068 lea eax,[ebp-8] ;取[ebp-8]地址(ebp-8),存到eax 0040106B push eax ;然后压栈 0040106C lea ecx,[ebp-4] ;取[ebp-4]地址(ebp-4),存到ecx 0040106F push ecx ;然后压栈 00401070 call @ILT+5(Input) (0040100a);然后调用Input函数 00401075 add esp,8 ;恢复栈 从以上调用Input函数的过程可以看出:在调用此函数之前,首先压栈ebp-8,然后压栈ebp-4,然后调用函数Input,最后Input函数调用结束后,利用esp+8恢复栈。由 此可见,在C语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复 堆栈。 下面看一下:地址ebp-8和ebp-4是什么? 在VC的VIEW下选debug windows,然后选Registers,显示寄存器变量值,然后在选debug windows下面的Memory,输入ebp-8的值和ebp-4的值(或直接输入ebp-8和-4), 看一下这两个地址实际存储的是什么值,实际上是变量n 的地址(ebp-8),m的地址(ebp-4),由此可以看出:在主调用函数中进行实参的压栈并且顺序是从右到左。另外,

    JAVA有哪些方法调用语句

    abstract (关键字 ) 抽象 [.bstr.kt] access vt.访问,存取 [.kses](n.入口,使用权) algorithm n.算法 [.lg.riem] annotation [java]代码注释 [.n.utei..n] anonymous adj.匿名的[.n.nim.s](反义:directly adv.直接地,立即[direktli, dairektli]) apply v.应用,适用 [.plai] application n.应用,应用程序 [,.plikei..n] (application crash 程序崩溃) arbitrary a.任意的 [ɑ:bitr.ri] argument n.参数;争论,论据 [ɑ:gjum.nt](缩写 args) assert (关键字) 断言 [.s.:t] (java 1.4 之后成为关键字 ) associate n.关联(同伴,伙伴) [.s.u.ieit] attribute n.属性(品质,特征) [.tribju:t] boolean (关键字) 逻辑的 , 布尔型 call n.v.调用; 呼叫; [k.:l] circumstance n.事件(环境,状况) [s.:k.mst.ns] crash n.崩溃,破碎 [kr..] cohesion内聚,黏聚,结合 [k.uhi:..n] (a class is designed with a single, well-focoused purpose. 应该不止这点) [k.ments] const (保留字) constant n. 常量, 常数, 恒量 [k.nst.nt] continue (关键字) coupling耦合,联结 [k.pli.] making sure that classes know about other classes only through their apis. declare [java]声明 [dikl..] default (关键字) 默认值 ; 缺省值 [dif.:lt] delimiter定义符; 定界符

    Python类方法的调用详解

    在线学习好工作https://www.doczj.com/doc/5111563769.html,/ Python类方法的调用详解 类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通的函数调用类似 1.类的内部调用:self.<方法名>(参数列表)。 2.在类的外部调用:<实例名>.<方法名>(参数列表)。 注意:以上两种调用方法中,提供的参数列表中都不用包括self。 演示一个类: wash.py class Washer: def __init__(self): self.water = 0 self.scour = 0 def add_water(self,water): print('Add water:',water) self.water = water def add_scour(self,scour): self.scour = scour print('Add scour:',self.scour) def start_wash(self): print('Start wash...') if __name__ == '__main__': w = Washer() w.add_water(10) w.add_scour(2)

    w.start_wash() 程序的运行结果为: 修改程序如图所示: washa.py class Washer: def __init__(self): self.water = 10 self.scour = 2 def set_water(self,water): self.water = water def set_scour(self,scour): self.scour = scour def add_water(self): print('Add water:',self.water) def add_scour(self): print('Add scour:',self.scour) def start_wash(self): self.add_water() self.add_scour() print('Start wash...') if __name__ == '__main__': w = Washer() w.set_water(20) w.set_scour(4) w.start_wash() 程序的运行结果为:

    Java远程方法调用

    font size="3">概述 Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件的连接。 RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API的简单的Java 包装程序。Java体现了“编写一次就能在任何地方运行的模式。而RMI 可将Java模式进行扩展,使之可在任何地方运行”。 因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢?务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。 RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI 和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。

    优点 从最基本的角度看,RMI是Java的远程过程调用(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。 RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。 RMI的主要优点如下: 面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。 可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。例如,您可以定义一个检查雇员开支报告

    通过反射方式来调用某个对象的方法的步骤

    通过反射方式来调用某个对象的方法的步骤 通过反射方式来调用某个对象的方法的步骤package com.test;import https://www.doczj.com/doc/5111563769.html,ng.reflect.Constructor; import https://www.doczj.com/doc/5111563769.html,ng.reflect.Method;public class DemoTest2 { public DemoTest2(String s1, String s2) { System.out.println(s1); System.out.println(s2); } public void output(String str) { System.out.println("hello: " + str); } @SuppressWarnings("unchecked") public static void main(String[] args)throws Exception { // 1. 得到该对象所对应的Class对象

    Class<DemoTest2> clazz = DemoTest2.class; //2. 通过该Class对象得到该类的构造方法所对应的Constructor对象 Constructor cons = clazz.getConstructor(new Class[]{String.class, String.class}); //3. 通过该Constructor对象的newInstance方法得到该类的一个实例(对象) DemoTest2 test = (DemoTest2)cons.newInstance(new Object[]{"abc","xyz"}); //4. 通过该Class对象得到该方法所对应的Method对象 Method method = clazz.getMethod("output",new Class[]{String.class}); //5. 通过该Method对象的invoke方法进行调用 method.invoke(test,new Object[]{"zhangsan"});

    iOS 中方法调用的顺序

    iOS 中方法调用的顺序 作者:极链科技-景生善iOS中的方法在Runtime时调用的流程大家都很熟悉,通过objc_msgSend方法查找到对应的方 法的实现,然后运行。但是,如果一个方法同时在类,类的父类,多个Category中存在,这个方法最后怎么执行的呢? 首先,看看一个方法同时在类及类的父类中存在时的执行顺序。 定一个类Person,类Student是Person的子类,Student中重写Person的study。 执行下面的代码

    输出log 可以看出study执行的是Student中的方法,speak执行的是Person中的方法。 这其实与objc msgSend执行有关 1、通过对象的isa指针找到类对象 2、在类对象的objc cache中查找cache的方法,如果查找到,则直接执行,否则执行下一下 3、在类对象的objc method list中查找,如果查找到,则直接执行,并添加到cache,否则执行下一下 4、在类对象的super_class中查找,如果查找到,则直接执行,并添加到cache中 在工程中再添加一个Student的Category Student(pupil) 重新执行上面的代码,结果如下: 可以看到study方法执行的是Category中的方法,speak执行的是Person中的方法 这是因为Category在关联到类的时候会执行attachCategories,整理类得方法、属性和协议列表

    将Category中的方法放到了类中原方法的前面,所以当我们调用的时候会优先调用Category中的方法。 在工程中再添加一个Student的Category Student(junior) 重新执行上面的代码,结果如下: 在Compile Source中修改Student+pupil和Student+junior的顺序

    相关主题
    文本预览
    相关文档 最新文档