- 浏览: 86411 次
- 性别:
- 来自: 合肥
最新评论
-
phlsbg:
HOSTS 中加入ip 主机名 也没有成功
CORB开发中遇到的问题 -
phlsbg:
我也遇到类似的问题,我的环境是客户机win,服务器VM中的Li ...
CORB开发中遇到的问题 -
cary:
ziyoo0830 写道请教:C:\WINDOWS\syste ...
CORB开发中遇到的问题 -
ziyoo0830:
请教:C:\WINDOWS\system32\drivers\ ...
CORB开发中遇到的问题 -
maofan:
kong
您好!
我在使用installany ...
installAnyWhere 新手小结
引用
Java Reflection (JAVA反射)
作者: corlin
日期: 04-05-10 10:32
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
1. 一个简单的例子
考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
} catch (Throwable e) {
System.err.println(e);
}
}
}
按如下语句执行:
java DumpMethods java.util.Stack
它的结果输出为:
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized java.lang.Object java.util.Stack.pop()
public synchronized java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized int java.util.Stack.search(java.lang.Object)
这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。
这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。
2.开始使用 Reflection
用于 reflection 的类,如 Method,可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤:第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等。
下面就是获得一个 Class 对象的方法之一:
Class c = Class.forName("java.lang.String");
这条语句得到一个 String 类的类对象。还有另一种方法,如下面的语句:
Class c = int.class;
或者
Class c = Integer.TYPE;
它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。
第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
一旦取得这个信息,就可以进行第三步了——使用 reflection API 来操作这些信息,如下面这段代码:
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString());
它将以文本方式打印出 String 中定义的第一个方法的原型。
在下面的例子中,这三个步骤将为使用 reflection 处理特殊应用程序提供例证。
模拟 instanceof 操作符
得到类信息之后,通常下一个步骤就是解决关于 Class 对象的一些基本的问题。例如,Class.isInstance 方法可以用于模拟 instanceof 操作符:
class A {
}
public class instance1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("A");
boolean b1 = cls.isInstance(new Integer(37));
System.out.println(b1);
boolean b2 = cls.isInstance(new A());
System.out.println(b2);
} catch (Throwable e) {
System.err.println(e);
}
}
}
在这个例子中创建了一个 A 类的 Class 对象,然后检查一些对象是否是 A 的实例。Integer(37) 不是,但 new A() 是。
3.找出类的方法
找出一个类中定义了些什么方法,这是一个非常有价值也非常基础的 reflection 用法。下面的代码就实现了这一用法:
import java.lang.reflect.*;
public class method1 {
private int f1(Object p, int x) throws NullPointerException {
if (p == null)
throw new NullPointerException();
return x;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method1");
Method methlist[] = cls.getDeclaredMethods();
for (int i = 0; i < methlist.length; i++) {
Method m = methlist[i];
System.out.println("name = " + m.getName());
System.out.println("decl class = " + m.getDeclaringClass());
Class pvec[] = m.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = m.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("return type = " + m.getReturnType());
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
这个程序首先取得 method1 类的描述,然后调用 getDeclaredMethods 来获取一系列的 Method 对象,它们分别描述了定义在类中的每一个方法,包括 public 方法、protected 方法、package 方法和 private 方法等。如果你在程序中使用 getMethods 来代替 getDeclaredMethods,你还能获得继承来的各个方法的信息。
取得了 Method 对象列表之后,要显示这些方法的参数类型、异常类型和返回值类型等就不难了。这些类型是基本类型还是类类型,都可以由描述类的对象按顺序给出。
输出的结果如下:
name = f1
decl class = class method1
param #0 class java.lang.Object
param #1 int
exc #0 class java.lang.NullPointerException
return type = int
-----
name = main
decl class = class method1
param #0 class [Ljava.lang.String;
return type = void
-----
4.获取构造器信息
获取类构造器的用法与上述获取方法的用法类似,如:
import java.lang.reflect.*;
public class constructor1 {
public constructor1() {
}
protected constructor1(int i, double d) {
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor1");
Constructor ctorlist[] = cls.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
System.out.println("name = " + ct.getName());
System.out.println("decl class = " + ct.getDeclaringClass());
Class pvec[] = ct.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = ct.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
这个例子中没能获得返回类型的相关信息,那是因为构造器没有返回类型。
这个程序运行的结果是:
name = constructor1
decl class = class constructor1
-----
name = constructor1
decl class = class constructor1
param #0 int
param #1 double
-----
5.获取类的字段(域)
找出一个类中定义了哪些数据字段也是可能的,下面的代码就在干这个事情:
import java.lang.reflect.*;
public class field1 {
private double d;
public static final int i = 37;
String s = "testing";
public static void main(String args[]) {
try {
Class cls = Class.forName("field1");
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
这个例子和前面那个例子非常相似。例中使用了一个新东西 Modifier,它也是一个 reflection 类,用来描述字段成员的修饰语,如“private int”。这些修饰语自身由整数描述,而且使用 Modifier.toString 来返回以“官方”顺序排列的字符串描述 (如“static”在“final”之前)。这个程序的输出是:
name = d
decl class = class field1
type = double
modifiers = private
-----
name = i
decl class = class field1
type = int
modifiers = public static final
-----
name = s
decl class = class field1
type = class java.lang.String
modifiers =
-----
和获取方法的情况一下,获取字段的时候也可以只取得在当前类中申明了的字段信息 (getDeclaredFields),或者也可以取得父类中定义的字段 (getFields) 。
6.根据方法的名称来执行方法
文本到这里,所举的例子无一例外都与如何获取类的信息有关。我们也可以用 reflection 来做一些其它的事情,比如执行一个指定了名称的方法。下面的示例演示了这一操作:
import java.lang.reflect.*;
public class method2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer) retobj;
System.out.println(retval.intValue());
} catch (Throwable e) {
System.err.println(e);
}
}
}
假如一个程序在执行的某处的时候才知道需要执行某个方法,这个方法的名称是在程序的运行过程中指定的 (例如,JavaBean 开发环境中就会做这样的事),那么上面的程序演示了如何做到。
上例中,getMethod 用于查找一个具有两个整型参数且名为 add 的方法。找到该方法并创建了相应的 Method 对象之后,在正确的对象实例中执行它。执行该方法的时候,需要提供一个参数列表,这在上例中是分别包装了整数 37 和 47 的两个 Integer 对象。执行方法的返回的同样是一个 Integer 对象,它封装了返回值 84。
7.创建新的对象
对于构造器,则不能像执行方法那样进行,因为执行一个构造器就意味着创建了一个新的对象 (准确的说,创建一个对象的过程包括分配内存和构造对象)。所以,与上例最相似的例子如下:
import java.lang.reflect.*;
public class constructor2 {
public constructor2() {
}
public constructor2(int a, int b) {
System.out.println("a = " + a + " b = " + b);
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Constructor ct = cls.getConstructor(partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = ct.newInstance(arglist);
} catch (Throwable e) {
System.err.println(e);
}
}
}
根据指定的参数类型找到相应的构造函数并执行它,以创建一个新的对象实例。使用这种方法可以在程序运行时动态地创建对象,而不是在编译的时候创建对象,这一点非常有价值。
8.改变字段(域)的值
reflection 的还有一个用处就是改变对象数据字段的值。reflection 可以从正在运行的程序中根据名称找到对象的字段并改变它,下面的例子可以说明这一点:
import java.lang.reflect.*;
public class field2 {
public double d;
public static void main(String args[]) {
try {
Class cls = Class.forName("field2");
Field fld = cls.getField("d");
field2 f2obj = new field2();
System.out.println("d = " + f2obj.d);
fld.setDouble(f2obj, 12.34);
System.out.println("d = " + f2obj.d);
} catch (Throwable e) {
System.err.println(e);
}
}
}
这个例子中,字段 d 的值被变为了 12.34。
9.使用数组
本文介绍的 reflection 的最后一种用法是创建的操作数组。数组在 Java 语言中是一种特殊的类类型,一个数组的引用可以赋给 Object 引用。观察下面的例子看看数组是怎么工作的:
import java.lang.reflect.*;
public class array1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls, 10);
Array.set(arr, 5, "this is a test");
String s = (String) Array.get(arr, 5);
System.out.println(s);
} catch (Throwable e) {
System.err.println(e);
}
}
}
例中创建了 10 个单位长度的 String 数组,为第 5 个位置的字符串赋了值,最后将这个字符串从数组中取得并打印了出来。
下面这段代码提供了一个更复杂的例子:
import java.lang.reflect.*;
public class array2 {
public static void main(String args[]) {
int dims[] = new int[]{5, 10, 15};
Object arr = Array.newInstance(Integer.TYPE, dims);
Object arrobj = Array.get(arr, 3);
Class cls = arrobj.getClass().getComponentType();
System.out.println(cls);
arrobj = Array.get(arrobj, 5);
Array.setInt(arrobj, 10, 37);
int arrcast[][][] = (int[][][]) arr;
System.out.println(arrcast[3][5][10]);
}
}
例中创建了一个 5 x 10 x 15 的整型数组,并为处于 [3][5][10] 的元素赋了值为 37。注意,多维数组实际上就是数组的数组,例如,第一个 Array.get 之后,arrobj 是一个 10 x 15 的数组。进而取得其中的一个元素,即长度为 15 的数组,并使用 Array.setInt 为它的第 10 个元素赋值。
注意创建数组时的类型是动态的,在编译时并不知道其类型。
发表评论
-
SQL SERVER性能优化综述
2008-09-02 14:58 1206近期因工作需要,希望比较全面的总结下SQL SERVER数据库 ... -
SQL Server数据库开发的二十一条军规
2008-09-02 14:56 899如果你正在负责一个基于SQL Server的项目,或者你刚刚接 ... -
关于GC垃圾回收〔网络整理,并非原创〕
2008-04-15 09:36 2068JVM配置参数中文说明: ------------------ ... -
关于RMI的一些知识
2008-04-09 09:19 1348RMI(Remote Method Invocation ... -
IBATIS 常用的调用方法
2007-12-20 10:28 794【1】获得MAP对象 XML中标签的书写,和基本的SELECT ... -
CORB开发中遇到的问题
2007-12-14 22:05 4763(1)问题一 连接服务问题 系统环境: 服务端是在LINUX ... -
NIO 与 QUEUE 的结合
2007-10-01 15:43 2319写了一段时间的NIO通信 ... -
[转载]JAR中调用资源文件
2007-08-08 11:11 2756可能有不少初学者会有 ... -
逆波兰式计算
2007-02-09 13:54 2372下面的逆波兰式,不支持单目运算,以及{}、〔〕这两类的括号运算 ... -
在网上看到的一些小技术
2007-02-02 14:02 1402都是在网上看到,转载 (1)在web.xml中加一个HttpS ... -
不错的打包工具 fat_jar
2007-01-27 14:20 3680呵呵。一个挺实用的打包工具。基于eclipse 的plugin ... -
怎么利用数字证书完成身份验证、客户和服务器端的加密和解密。
2007-01-24 10:54 14857大家好。我现在在学习数字证书。希望能得到你们的帮助。现在的 ... -
关于事件处理时鼠标状态的说明
2007-01-09 15:42 2877<o:p></o:p> Eclipse ... -
泛型 <T> 详解
2006-12-26 10:44 5426引用。原地址:http://www.java3z.com/c ... -
如何实现RCP与其插件的关系
2006-12-01 13:30 1998在ECLIPSE RCP开发工作中 ... -
eclipse 中调用win office
2006-11-20 17:42 1261http://www.java2s.com/Code/Jav ... -
Hibernate Dao
2006-11-17 14:31 1225import java.io.Serializable; ... -
JAVA 中IP地址的获得
2006-11-04 12:07 1388import java.net.*; public clas ... -
RCP的一些细节部分
2006-11-04 11:43 2048ECLIPSE PLUG-IN RCP 此部分有的是自 ... -
java中如何操作BYTE[]
2006-08-21 18:44 2786/** * 加入附件 * @param String pa ...
相关推荐
MATLAB Simulink搭建电动汽车整车七自由度模型:含七自由度建模细节与模糊控制算法及魔术公式等相关说明文档,MATLAB Simulink搭建电动汽车整车七自由度模型电动汽车七由度模型,包括纵向运动,侧向运动横摆运动,模糊控制算法,轮胎模型,魔术公式等等,包含相关说明文档。 ,核心关键词:MATLAB Simulink; 电动汽车整车七自由度模型; 纵向运动; 侧向运动; 横摆运动; 模糊控制算法; 轮胎模型; 魔术公式; 相关说明文档。,MATLAB Simulink:电动汽车七自由度模型构建与模糊控制算法应用
粒子群优化算法下的电力系统经济调度与经济成本优化策略(基于IEEE30节点六机模型),基于粒子群算法的电力系统最优潮流 以IEEE30节点的六机为对象,建立考虑功率平衡、机组爬坡约束、出力限制约束的电力系统经济调度模型,采用粒子群算法对模型进行求解,得到六个机组的最优运行计划,确定系统最优运行成本。 这段程序主要是一个基于粒子群优化算法(PSO)的电力系统调度程序。它用于优化电力系统中火电、风电和光伏发电机组的出力,以实现最小化发电成本和最小化失负荷量的目标。 该程序的主要功能是根据给定的负荷数据、初始机组出力和风光发电数据,通过PSO算法求解最优的机组出力方案。它涉及到的领域是电力系统调度和优化。 程序的主要思路如下: 1. 首先,定义了一些参数,如最大迭代次数、搜索空间维数、粒子个数等。 2. 然后,加载了电力系统的一些数据,包括机组的发电成本、负荷数据、风电数据和光伏数据。 3. 接下来,使用PSO算法对每个小时的机组出力进行优化,得到最优的机组出力方案。 4. 计算每个小时的发电成本、失负荷量、弃风弃光量等指标。 5. 绘制机组出力曲线、风电出力曲线、光伏出力曲线、负荷曲
西门子200smart恒压供水系统:三拖三配置,精准压力控制,稳定快速PLC内部PID调节,昆仑通态触摸屏操作,适用多场景。,西门子200smart恒压供水(3托3) 功能: 三拖三(3台变频3台水泵),3台水泵循环软启,定时轮工作。 硬件:采用西门子200smart +昆仑通态触摸屏。 优点: 1.一对一变频,一台变频器拖一台泵,解决变频切的繁琐和安全性; 2.适用于大小功率,主要应用于压力精度要求高设备或行业。 3.采用ABB acs510变频器 (也可用其他牌子没有限制) 4.采用plc内部PID,速度快,系统稳定; ,核心关键词:西门子200smart恒压供水;三拖三;水泵循环软启;定时轮换工作;昆仑通态触摸屏;一对一变频;变频切换;压力精度;ABB acs510变频器;PLC内部PID;系统稳定。,西门子200smart智能恒压供水系统:三拖三变频软启与高效能PID控制
1、文件内容:shim-ia32-15-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/shim-ia32-15-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于粒子群算法的配电网重构方案:降低网损与电压偏差,实现放射型网架潮流优化计算。,基于粒子群算法的配电网重构 基于IEEE33节点电网,以网损和电压偏差最小为目标,考虑系统的潮流约束,采用粒子群算法求解优化模型,得到确保放射型网架的配电网重构方案。 这个程序主要是一个潮流计算程序,用于解决电力系统中的潮流问题。潮流计算是电力系统分析中的基本问题之一,它用于确定电力系统中各个节点的电压幅值和相位,以及各个支路的功率流动情况。 该程序的主要思路是通过迭代的方式,不断修正节点的电压值,直到满足一定的收敛条件为止。程序首先对电力系统的节点和支路进行初始化,然后根据给定的初始条件,计算各个节点的注入功率和注入电流。接下来,根据节点的注入功率和注入电流,构建雅可比矩阵,并求解修正方程,得到节点电压的修正量。然后,根据修正量对节点电压进行修正,并重新计算节点的注入功率和注入电流。重复以上步骤,直到满足收敛条件为止。 在程序运行过程中,涉及到的主要内容包括电力系统的节点和支路参数、节点的注入功率和注入电流的计算、雅可比矩阵的构建、修正方程的求解、节点电压的修正、收敛条件的判断等。程序中还包括了一些
MMC-HVDC仿真模型详解:探索基于PSCAD的多端柔性直流输电技术基础模型与MMC逆变器应用,MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制,还有多端如张北直流电网以及基本mmc逆变器,自己为biye网上收集的一些觉得有用的基础模型 ,核心关键词:MMC-HVDC仿真模型; pscad柔性直流输电仿真; 双端mmc模型; 21电平NLM; 均压控制; 多端直流电网; 张北直流电网; 基本mmc逆变器; biye网上收集的基础模型。,"MMC-HVDC仿真模型研究:多端NLM均压控制与基本逆变器模型应用"
2024定制版抢单支付系统源码|开代理|自动抢单接单 运行环境:php7.2+mysql5.6+宝塔面板
基于Cadence的两级放大电路版图设计:通过LVS与DRC验证,实现高效集成电路功能,Cadence 两级放大电路,包括版图,已通过lvs ,drc检查 Cadence两级放大电路已经完成版图设计,并且已经通过了LVS(Layout vs. Schematic)和DRC(Design Rule Check)的检查。 电路设计和集成电路设计工具。电路设计是指通过选择和配置电子元件,将它们连接在一起以实现特定功能的过程。而集成电路设计工具是用于设计和验证集成电路的软件工具,其中Cadence是一个常用的集成电路设计工具。 集成电路设计是现代电子技术中的重要领域,它涉及到将多个电子元件(如晶体管、电容器、电阻器等)集成到单个芯片上,以实现各种功能。集成电路设计工具是帮助工程师进行电路设计和验证的软件工具,它们提供了各种功能和模块,包括原理图设计、版图设计、模拟仿真、验证和布局布线等。 Cadence是一个知名的集成电路设计工具供应商,他们提供了一系列的软件工具,包括用于原理图设计的Capture、用于版图设计的Virtuoso、用于模拟仿真的Spectre等。这些工具能够帮助工程
海克斯康PC-DMIS三坐标脱机编程测量软件:数模支持2012-2019版,需升级2020-2022版请拍两份改价。,海克斯康三坐标脱机编程测量软件 数模 2012—2019版本pc—dmis 如需要2020—2022版本 拿两份 联系卖家改价 ,海克斯康三坐标;脱机编程测量软件;数模;PC-DMIS 2012-2019版本;2020-2022版本;拍两份。,"海克斯康PC-DMIS三坐标脱机编程测量软件:新旧版本兼容,助力2012-2022测量升级"
PLC西门子杯比赛:三部十层电梯博图v15.1智能编程与WinCC界面实战挑战,PLC西门子杯比赛,三部十层电梯博图v15.1程序,带wincc画面。 ,核心关键词:PLC西门子杯比赛; 三部十层电梯; 博图v15.1程序; wincc画面。,西门子杯PLC编程大赛:博图v15.1程序控制三部十层电梯带wincc界面展示
## 功能特点 1. 爬虫设置 - 自定义起始URL - 设置爬取深度 - URL过滤规则 - 请求延迟控制 2. 数据提取 - CSS选择器规则 - 自定义字段名称 - 批量数据提取 - 结果预览 3. 导出功能 - Excel导出 - CSV导出 - 数据清理 - 格式转换 4. 其他功能 - 进度显示 - 日志记录 - 错误处理 - 多线程支持 ## 使用要求 - Python 3.6+ - 需要安装的库: ```bash pip install requests beautifulsoup4 pandas openpyxl ``` ## 使用方法 1. 基本设置: - 输入起始URL - 设置爬取深度 - 配置请求延迟 - 设置URL过滤 2. 添加规则: - 设置字段名称 - 编写CSS选择器 - 添加提取规则 - 预览规则效果 3. 开始爬取: - 点击开始按钮 - 查看爬取进度 -
1、文件内容:subscription-manager-gui-1.24.54-1.el7.centos.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/subscription-manager-gui-1.24.54-1.el7.centos.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-mod_perl-devel-2.0.8-5.20130221svn1448242.el6.centos.alt.x86_64.rpm
1、文件内容:speex-tools-1.2-0.19.rc1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/speex-tools-1.2-0.19.rc1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-podlators-2.5.3-2.el6.centos.alt.noarch.rpm
欧姆龙NJ NXPLC全ST程序案例:公司级框架源码分享,含FB源码与触摸屏源码,需ST基础,升级环境至最新版,思想重于编程细节展示。,欧姆龙NJ NXPLC 全ST程序案例,全程序无加密,公司级框架,提供项目源码框架FB源码,触摸屏源码。 需要一定ST基础才能看懂。 重在分享编程思想 没用过该控制器的请慎用。 先安装1.2版本的环境 再升级到1.43 安装包里面的补丁一定要装。 ,核心关键词:欧姆龙NJ NXPLC;全ST程序案例;无加密;公司级框架;项目源码框架;FB源码;触摸屏源码;编程思想;慎用;环境安装;版本升级;安装包补丁。,欧姆龙NJ NX PLC全ST程序案例分享:公司级框架与编程思想解读
负荷需求响应模型matlab:分时电价策略下的负荷响应变化分析,削峰填谷效果显著,负荷需求响应模型matlab 通过分时电价方式下的负荷需求响应模型得到负荷响应前后变化情况,可以看到明显呈现削峰填谷的作用 ,核心关键词:负荷需求响应模型; MATLAB; 分时电价; 负荷响应前后变化; 削峰填谷。,"Matlab下的分时电价负荷需求响应模型:削峰填谷效果分析"
perl516-perl-Filter-1.49-3.el6.centos.alt.x86_64.rpm
1、文件内容:spausedd-2.4.5-7.el7_9.2.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/spausedd-2.4.5-7.el7_9.2.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:soundtouch-devel-1.4.0-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/soundtouch-devel-1.4.0-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装