信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 1855|回复: 3
打印 上一主题 下一主题

[『 Java 图文教程』] 详解reflect Java的反射机制多方法实例教程

  [复制链接]

44

主题

106

帖子

918

积分

积分
918
跳转到指定楼层
宣传软件楼主
发表于 2016-9-24 08:39:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

软件教程首图:

软件教程分类:Java 图文教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件初级教程 

软件教程发布日期:2016-09-24

软件教程关键字:Java的反射机制

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述

一、java的反射机制浅谈


最近研究java研究得很给力,主要以看博文为学习方式。以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出。受到各位指教之处,如若让小生好好感动,说不定会请各位吃饭哦!


1.何谓反射机制


根据网文,java中的反射机制可以如此定义:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。


2.反射机制如何实现


谈到反射机制,最诱人的莫过于“动态”二字了。接触过C语言的童鞋们都知道,C语言中也有个和“动态”搭上边的函数:malloc()函数。其实这里的两个动态是一个意思,都指的是非编译时处理,抑或运行时处理。这种机制,可以让程序的弹性增加不少,因为借由此机制,客户可以在程序运行时改变一些他关心的性质:分配内存(当然他可能 完全不知道这么做了),调用某个类(当然他还是被蒙在鼓里)等。

下面我们就聊聊java中动态机制是如何实现的。


上一篇文章中提到了java的类的加载问题,但没有更深入地解释其运行机制,在这里就先谈谈这个问题。


首先不得不提到的是java.lang.Class这个类。

有这么一段话:

Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。


也就是说,ClassLoader找到了需要调用的类时(java为了调控内存的调用消耗,类的加载都在需要时再进行,很抠但是很有效),就会加载它,然后根据.class文件内记载的类信息来产生一个与该类相联系的独一无二的Class对象。该Class对象记载了该类的字段,方法等等信息。以后jvm要产生该类的实例,就是根据内存中存在的该Class类所记载的信息(Class对象应该和我所了解的其他类一样会在堆内存内产生、消亡)来进行。


而java中的Class类对象是可以人工自然性的(也就是说开放的)得到的(虽然你无法像其他类一样运用构造器来得到它的实例,因为

Class对象都是jvm产生的。不过话说回来,客户产生的话也是无意义的),而且,更伟大的是,基于这个基础,java实现了反射机制。


获取Class对象有三种方式:


1.通过Object类的getClass()方法。例如:

Class c1 = new String("").getClass();

2.通过Class类的静态方法——forName()来实现:

Class c2 = Class.forName("MyObject");

3.如果T是一个已定义的类型的话,在java中,它的.class文件名:T.class就代表了与其匹配的Class对象,例如:

Class c3 = Manager.class;

Class c4 = int.class;

Class c5 = Double[].class;


这里需要解释一下3:请记住一句话,java中,一切皆对象。也就是说,基本类型int float 等也会在jvm的内存池像其他类型一样中生成

一个Class对象。而数组等组合型数据类型也是会生成一个Class对象的,而且更令人惊讶的是,java中数组的本来面目其实就是某个类,惊讶

中的惊讶是,含有相同元素的相同维数的数组还会共同享用同一个Class对象!其实根据我的臆想,数组的length性质应该就保存在这个Class

对象里面。


Class类中存在以下几个重要的方法:


1.getName()

一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。由于历史原因,对数组的Class对象

调用该方法会产生奇怪的结果。


2.newInstance()

该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。例如:

MyObject x = new MyObject();

MyObject y = x.getClass().newInstance();


3.getClassLoader()

返回该Class对象对应的类的类加载器。


4.getComponentType()

该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:

int[] ints = new int[]{1,2,3};

Class class1 = ints.getClass();

Class class2 = class1.getComponentType();

而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。


5.getSuperClass()

返回某子类所对应的直接父类所对应的Class对象。


6.isArray()

判定此Class对象所对应的是否是一个数组对象。


好啦,现在对Class这个类应该有了一个大致的了解,下面就给出一个反射机制的典型例子供各位分析:

[java] view plain copy
print?


  • import java.lang.reflect.Array;     
  • import java.lang.reflect.Constructor;     
  • import java.lang.reflect.Field;     
  • import java.lang.reflect.Method;     
  •    
  •    
  • /**   
  • * Java Reflection Cookbook   
  • *   
  • * @author Michael Lee   
  • * @since 2006-8-23   
  • * @version 0.1a   
  • */   
  •    
  • public class Reflection {     
  •     /**   
  •      * 得到某个对象的公共属性   
  •      *   
  •      * @param owner, fieldName   
  •      * @return 该属性对象   
  •      * @throws Exception   
  •      *   
  •      */   
  •     public Object getProperty(Object owner, String fieldName) throws Exception {     
  •         Class ownerClass = owner.getClass();     
  •    
  •         Field field = ownerClass.getField(fieldName);     
  •    
  •         Object property = field.get(owner);     
  •    
  •         return property;     
  •     }     
  •    
  •     /**   
  •      * 得到某类的静态公共属性   
  •      *   
  •      * @param className   类名   
  •      * @param fieldName   属性名   
  •      * @return 该属性对象   
  •      * @throws Exception   
  •      */   
  •     public Object getStaticProperty(String className, String fieldName)     
  •             throws Exception {     
  •         Class ownerClass = Class.forName(className);     
  •    
  •         Field field = ownerClass.getField(fieldName);     
  •    
  •         Object property = field.get(ownerClass);     
  •    
  •         return property;     
  •     }     
  •    
  •    
  •     /**   
  •      * 执行某对象方法   
  •      *   
  •      * @param owner   
  •      *            对象   
  •      * @param methodName   
  •      *            方法名   
  •      * @param args   
  •      *            参数   
  •      * @return 方法返回值   
  •      * @throws Exception   
  •      */   
  •     public Object invokeMethod(Object owner, String methodName, Object[] args)     
  •             throws Exception {     
  •    
  •         Class ownerClass = owner.getClass();     
  •    
  •         Class[] argsClass = new Class[args.length];     
  •    
  •         for (int i = 0, j = args.length; i < j; i++) {     
  •             argsClass = args.getClass();     
  •         }     
  •    
  •         Method method = ownerClass.getMethod(methodName, argsClass);     
  •    
  •         return method.invoke(owner, args);     
  •     }     
  •    
  •    
  •       /**   
  •      * 执行某类的静态方法   
  •      *   
  •      * @param className   
  •      *            类名   
  •      * @param methodName   
  •      *            方法名   
  •      * @param args   
  •      *            参数数组   
  •      * @return 执行方法返回的结果   
  •      * @throws Exception   
  •      */   
  •     public Object invokeStaticMethod(String className, String methodName,     
  •             Object[] args) throws Exception {     
  •         Class ownerClass = Class.forName(className);     
  •    
  •         Class[] argsClass = new Class[args.length];     
  •    
  •         for (int i = 0, j = args.length; i < j; i++) {     
  •             argsClass = args.getClass();     
  •         }     
  •    
  •         Method method = ownerClass.getMethod(methodName, argsClass);     
  •    
  •         return method.invoke(null, args);     
  •     }     
  •    
  •    
  •    
  •     /**   
  •      * 新建实例   
  •      *   
  •      * @param className   
  •      *            类名   
  •      * @param args   
  •      *            构造函数的参数   
  •      * @return 新建的实例   
  •      * @throws Exception   
  •      */   
  •     public Object newInstance(String className, Object[] args) throws Exception {     
  •         Class newoneClass = Class.forName(className);     
  •    
  •         Class[] argsClass = new Class[args.length];     
  •    
  •         for (int i = 0, j = args.length; i < j; i++) {     
  •             argsClass = args.getClass();     
  •         }     
  •    
  •         Constructor cons = newoneClass.getConstructor(argsClass);     
  •    
  •         return cons.newInstance(args);     
  •    
  •     }     
  •    
  •    
  •          
  •     /**   
  •      * 是不是某个类的实例   
  •      * @param obj 实例   
  •      * @param cls 类   
  •      * @return 如果 obj 是此类的实例,则返回 true   
  •      */   
  •     public boolean isInstance(Object obj, Class cls) {     
  •         return cls.isInstance(obj);     
  •     }     
  •          
  •     /**   
  •      * 得到数组中的某个元素   
  •      * @param array 数组   
  •      * @param index 索引   
  •      * @return 返回指定数组对象中索引组件的值   
  •      */   
  •     public Object getByArray(Object array, int index) {     
  •         return Array.get(array,index);     
  •     }     
  • }   


例子的解释就免了,因为读代码加上自己理解是最好的程序员学习方式。另外,此代码来源为互联网。


好啦,就到这里了。当你知道了java的反射机制后,以后当你接触到java的动态代理时就不会像我一样茫然了。好啦,谢谢围观!



untoJAVA技术:XML配置文件的读取处理多方法实例教程nextJava类别载入器和实例多教程用法
回复

使用道具 举报

44

主题

106

帖子

918

积分

积分
918
信息发布软件沙发
 楼主| 发表于 2016-9-24 08:40:06 | 只看该作者
多方法实例教程2

一、类型识别的两种方式:

    首先了解一下“运行时类型识别”(Run-time Type Identification, RTTI)主要有两种方式,

    第一种:是我们在一次编译时和运行时已经知道了所有的类型。

    第二种:是我们在整项目分模块的编译,在运行时可以对新加入的模块进行动态的编译。(在动态编译模块之前还不知道被编译code的类型。) 这就是下面要接受的,功能强大的“反射”机制。

    二、认识“Class对象”:

    要理解RTTI(运行时类型识别)在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是由“Class对象”完成的,它包含了与类有关的信息。

    类是程序的重要组成部分(类的属性,方法以及它的一些特性,在这里我就不做赘述了。),每个类都有一个Class对象,每当编写并编译了一个新类就会产生一个Class对象,它被保存在一个与你所创建的新类同名的.class文件中。那么在程序运行时,当我们想生成这个类的对象时(实例化这个类),运行这个程序的Java虚拟机(JVM)就会这样做:

    首先会从加载所创新类的.class文件,

    然后确认这个新类的Class对象是否已经加载,如果尚未加载,JVM就会根据类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来创建这个类的所有对象。

    一般的RTTI形式包括三种:

    1.传统的类型转换。如“(Apple)Fruit”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。

    2.通过Class对象来获取对象的类型。如

    [code="java"] Class c = Class.forName(“Apple”);

    Object o = c.newInstance();

    3.通过关键字instanceof或Class.isInstance()方法来确定对象是否属于某个特定类型的实例,准确的说,应该是instanceof / Class.isInstance()可以用来确定对象是否属于某个特定类及其所有基类的实例,这和equals() / ==不一样,它们用来比较两个对象是否属于同一个类的实例,没有考虑继承关系。[enxtpage]

    三、反射

    如果不知道某个对象的类型,可以通过RTTI来获取,但前提是这个类型在编译时必须已知,这样才能使用RTTI来识别。即在编译时,编译器必须知道所有通过RTTI来处理的类。

    使用反射机制可以不受这个限制,它主要应用于两种情况:

    第一种情况,是“基于构件的编程”这种编程方式中,将使用某种基于快速应用开发(RAD)的应用构建工具来构建项目。这是现在最常见的可视化编程方法,通过代表不同组件的图标拖动到图板上,然后设置”构件“(组件)的属性值来配置它们来创建程序。要做到这种配置编程,就必须要求构件都是可实例化的,并且要暴露其部分信息,使得程序员可以读取和设置构件的值和状态。当处理GUI时间的构件时还必须暴露相关方法的事件处理细节,以便RAD环境帮助程序员覆盖这些处理事件的方法。在这里,就要用到反射的机制来检查可用的方法并返回方法实体对象。Java通过JavaBeans提供了基于构件的编程架构。

    第二种情况,在运行时获取类的信息的另外一个动机,就是希望能够提供在跨网络的远程平台上创建和运行对象的能力。这被成为远程调用(RMI),它允许一个Java程序将对象分步在多台机器上,这种分步能力将帮助开发人员执行一些需要进行大量计算的任务,充分利用计算机资源,提高运行速度。

    Class类支持反射,是在java.lang.reflect中包含了Field/Method/Constructor类,每个类都实现了Member接口。这些类型的对象都是由JVM在运行时创建的,用来表示未知类里对应的成员。如可以用Constructor类创建新的对象,用get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用与Method对象关联的方法。同时,还可以调用getFields()、getMethods()、getConstructors()等方法来返回表示字段、方法以及构造器的对象数组。这样,未知的对象的类信息在运行时就能被完全确定下来,而在编译时不需要知道任何信息。

    另外,RTTI有时能解决效率问题。当程序中使用多态给程序的运行带来负担的时候,可以使用RTTI编写一段代码来提高效率。



回复 支持 反对

使用道具 举报

44

主题

106

帖子

918

积分

积分
918
推广工具板凳
 楼主| 发表于 2016-9-24 08:41:22 | 只看该作者
多方法实例教程3

反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧!

           一,先看一下反射的概念:
              主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
             反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
             看概念很晕的,继续往下看。
      二,反射机制的作用:
              1,反编译:.class-->.java
              2,通过反射机制访问java对象的属性,方法,构造方法等;
             这样好像更容易理解一些,下边我们具体看怎么实现这些功能。

      三,在这里先看一下sun为我们提供了那些反射机制中的类:
java.lang.Class;               
java.lang.reflect.Constructor; java.lang.reflect.Field;        
java.lang.reflect.Method;
java.lang.reflect.Modifier;

            很多反射中的方法,属性等操作我们可以从这四个类中查询。还是哪句话要学着不断的查询API,那才是我们最好的老师。

         四,具体功能实现:
                1,反射机制获取类有三种方法,我们来获取Employee类型

[java] view plain copy
print?

//第一种方式:  
Classc1 = Class.forName("Employee");  
//第二种方式:  
//java中每个类型都有class 属性.  
Classc2 = Employee.class;  

//第三种方式:  
//java语言中任何一个java对象都有getClass 方法  
Employeee = new Employee();  
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)  




    2,创建对象:获取类以后我们来创建它的对象,利用newInstance:

[java] view plain copy
print?

Class c =Class.forName("Employee");  

//创建此Class 对象所表示的类的一个新实例  
Objecto = c.newInstance(); //调用了Employee的无参数构造方法.  




    3,获取属性:分为所有的属性和指定的属性:
      a,先看获取所有的属性的写法:
[java] view plain copy
print?

//获取整个类  
            Class c = Class.forName("java.lang.Integer");  
              //获取所有的属性?  
            Field[] fs = c.getDeclaredFields();  

                   //定义可变长的字符串,用来存储属性  
            StringBuffer sb = new StringBuffer();  
            //通过追加的方法,将每个属性拼接到此字符串中  
            //最外边的public定义  
            sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");  
            //里边的每一个属性  
            for(Field field:fs){  
                sb.append("\t");//空格  
                sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等  
                sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字  
                sb.append(field.getName()+";\n");//属性的名字+回车  
            }  

            sb.append("}");  

            System.out.println(sb);  


       b,获取特定的属性,对比着传统的方法来学习:


[java] view plain copy
print?

public static void main(String[] args) throws Exception{  

<span style="white-space:pre">  </span>//以前的方式:  
    /*
    User u = new User();
    u.age = 12; //set
    System.out.println(u.age); //get
    */  

    //获取类  
    Class c = Class.forName("User");  
    //获取id属性  
    Field idF = c.getDeclaredField("id");  
    //实例化这个类赋给o  
    Object o = c.newInstance();  
    //打破封装  
    idF.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。  
    //给o对象的id属性赋值"110"  
    idF.set(o, "110"); //set  
    //get  
    System.out.println(idF.get(o));  
}  



4,获取方法,和构造方法,不再详细描述,只来看一下关键字:
方法关键字
含义
getDeclaredMethods()
获取所有的方法
getReturnType()
获得方法的放回类型
getParameterTypes()
获得方法的传入参数类型
getDeclaredMethod("方法名",参数类型.class,……)
获得特定的方法


构造方法关键字
含义
getDeclaredConstructors()
获取所有的构造方法
getDeclaredConstructor(参数类型.class,……)
获取特定的构造方法


父类和父接口
含义
getSuperclass()
获取某类的父类
getInterfaces()
获取某类实现的接口

         这样我们就可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象。

  五,反射加配置文件,使我们的程序更加灵活:
             在设计模式学习当中,学习抽象工厂的时候就用到了反射来更加方便的读取数据库链接字符串等,当时不是太理解,就照着抄了。看一下.NET中的反射+配置文件的使用:
             当时用的配置文件是app.config文件,内容是XML格式的,里边填写链接数据库的内容:
[html] view plain copy
print?

      <configuration>  
lt;appSettings>  
<add     key=""  value=""/>  
lt;/appSettings>  
        </configuration>  



反射的写法:   
[csharp] view plain copy
print?

assembly.load("当前程序集的名称").CreateInstance("当前命名空间名称".要实例化的类名);  




          这样的好处是很容易的方便我们变换数据库,例如我们将系统的数据库从SQL Server升级到Oracle,那么我们写两份D层,在配置文件的内容改一下,或者加条件选择一下即可,带来了很大的方便。

         当然了,JAVA中其实也是一样,只不过这里的配置文件为.properties,称作属性文件。通过反射读取里边的内容。这样代码是固定的,但是配置文件的内容我们可以改,这样使我们的代码灵活了很多!

    综上为,JAVA反射的再次学习,灵活的运用它,能够使我们的代码更加灵活,但是它也有它的缺点,就是运用它会使我们的软件的性能降低,复杂度增加,所以还要我们慎重的使用它。


回复 支持 反对

使用道具 举报

44

主题

106

帖子

918

积分

积分
918
软件定制开发地板
 楼主| 发表于 2016-9-24 08:43:51 | 只看该作者
本帖最后由 宣传软件 于 2016-9-24 08:45 编辑

实例教程4

本文以实例形式详细讲述了Java的反射机制,是Java程序设计中重要的技巧。分享给大家供大家参考。具体分析如下:

首先,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("java.util.Stack");       Method m[] = c.getDeclaredMethods();             for (int i = 0; i < m.length; i++)         System.out.println(m.toString());    }    catch (Throwable e){       System.err.println(e);    }   } }
它的结果输出为:
public synchronized java.lang.Object java.util.Stack.pop()public java.lang.Object java.util.Stack.push(java.lang.Object)public boolean java.util.Stack.empty()public synchronized java.lang.Object java.util.Stack.peek()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 S { } public class IsInstance {   public static void main(String args[]) {    try {       Class cls = Class.forName("S");       boolean b1 = cls.isInstance(new Integer(37));       System.out.println(b1);       boolean b2 = cls.isInstance(new S());       System.out.println(b2);    }    catch (Throwable e) {       System.err.println(e);    }   } }
在这个例子中创建了一个S 类的 Class 对象,然后检查一些对象是否是S的实例。Integer(37) 不是,但 new S()是。

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;         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;        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 = Constructor1decl class = class Constructor1param #0 intparam #1 double-----name = Constructor1decl class = class Constructor1-----
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;        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 = ddecl class = class Field1type = doublemodifiers = private-----name = idecl class = class Field1type = intmodifiers = public static final-----name = sdecl class = class Field1type = class java.lang.Stringmodifiers = -----
和获取方法的情况一下,获取字段的时候也可以只取得在当前类中申明了的字段信息 (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 个元素赋值。



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件沙龙艺术网注册账号激活账号软件
沙龙艺术网注册账号激活账号软件,这个网站是 DZ 模板论坛,注册是利用邮箱账号进行注册,然后通过邮箱激活网址就可以把账号弄好,软件利用临时邮箱收到了信件,采集好网址,然后访问一次激活码网址就可以完成激活账号,注册还是蛮方便的,没有半个验证码,也不封 IP,可以自由发挥出 N 多账号起来,而且完全是免费的,有蜘蛛池的话,对于这种网站是极度友好的,就怕没有的话就歇菜了。注册好账号,软件会自动保留缓存,放在发帖脚
群发软件53货源网全自动群发工具
53货源网全自动群发工具,会员登陆后就可以发帖,这个网站是发布货源的网站,相当于一些工厂货源发布的网站,厂家是比较多人来这里发的,网站也比较新鲜,不像是一些 B2B 网站照样直接就拿来用的网站,真的,有的网站本来是很有机会的,可是他们非不愿意自我放开,导致扣扣爽爽的,结果就让很多货源的人不【知】道去哪里发,换句话说,有的人有资源找不到发的地方,有的人有资源,却不【知】道哪里找到客户发,这就有点悲了,本来
群发软件华中贸易网全自动群发软件
华中贸易网全自动群发软件,这个网站是 B2B 网站,现在这类网站对于上传图片 POST 这块会有比较大的区别,有的是要自定义后缀,有的是要对应后缀,比如是 PNG 或是 jpg 的都可以,这个网站五大分类都可以发,像供应,资讯这些会收录比较好,软件对于这个 POST 会比较友好,但调试是很麻烦的,有时候多一个空格也不行的,网站对于数据流处理是很严格,或是说他们容易很低,不管收录有好有差的一边,这类网站有时候收录极好,有时候
群发软件168信息网自动发帖软件
168信息网自动发帖软件,这个网站是 B2B 网站,和以前做的都不同,它是一个新人开发的平台,收录比其它的都好,可见作者是不是打的批量版,而是打精品战略的人,有的人喜欢搞大军团作战,有的人喜欢搞尖刀式作战,各有各的优点,看自己能力圈在哪里就往哪里发展才是最优选择吧,如果有能力那肯定是尖刀式的省钱,但没有,那就只能做批量创造收录的概率呢,就像成功的事常做一样,只需要把量打上去,一样可以达到那种效果的,所有的
群发软件云推送网站网站自动发布帖子软件
云推送网站自动发帖软件,这种网站也是 B2B 改版过来的,不过他看上去会比较新鲜一些,毕境很多功能像是以前的那些搜了网的功能,这种平台发帖多,收录主要是靠提交给百度蜘蛛池的,如果没有自己的池子,是很难被百度这老人家强行收录的,网站比较简单,但可以刷新信息,和这个发资讯的脚本一起上传,听说刷新收录快,不【知】道是不是真的哈,软件自动登陆账号,自动发帖,导入标题内容,要和网站开 VIP 会员,不然是发不了帖子的
群发软件站站网全自动群发软件
站站网全自动群发软件,这个软件是 B2B 网站,现在这类网站发的人越来越多,反正有这样的市场,那些单个的网站反而没有什么好戏码,这类网站批量生成的,有好的会留下,收录不好的,自然就会被换一个域名,换一个网站空间重新去做,然后留下就会越来越好了,软件只要导入标题内容,导入账号就可以全自动发帖,如果用软件自动发帖,就可以省了很多手工操作,比如他能一年挂机不用操作心,只要自己准备好账号密码和标题内容就可以全
群发软件投聂网全自动B2B发布帖子工具
投聂网全自动B2B发布帖子工具,这个网站是 B2B 网站来的,自己可以自主充值,这些 B2B 网站可能没有秒收录,但月收录还是有的,他们打的都是一个批量生产,相当于边发边收录,还是边发,您说终竟的最终收录,他们是肯定没有咯,而这些理论上存在的例子也不是那么好的呈现在上面,这个网站也分为 PC 端一个,POST 后台版一个,都做了一个脚本吧,免得有的人喜欢爱好都不同,也能闭出一个不会的理由出来,有了这两个版本就不同,他们
信息发布软件旅法师营地创作平台自动发布帖子软件
旅法师营地创作平台自动发布帖子软件,这个网站发帖的步骤会很多,做完后要三十多步,他要选图片,又要上传封面图片,确定选择版块这些,整的头都痛的节奏,现在还有哪一个平台这么复杂的哈,网站是手机验证码登陆的,自己要注册一堆账号,他每一个号只能发一帖,这种这么偏避的平台,还是没有什么人抢着注册的,随便找一个 API 就可以注册一堆的号,网站游戏论坛,收录不会差到哪去的,就是步骤比较繁琐,只要做好一次,倒计时足
群发软件五洲商务网全自动发布帖子软件
五洲商务网全自动发布帖子软件,这个网站是 B2B 网站,继续弄两个版本吧,一个是 POST 的,一个是普通的版本,对于搜狗来说,这些网站效果还是很好的,很多人傻白甜分不出什么是什么吧,所以一直有人在用,不过这些现在都不重要了吧,百度自己也没有什么大的更新,感觉有点修修补补,几乎要放弃了,可是规则上加码,完全不管收录了,这个网站,只要有号就可以发,所有什么供应,采购,行情,这些信息都会自动切换着发,从头部切换
群发软件CSDN网站自动发注册账号软件
CSDN网站自动发注册账号软件,这个软件是利用短信验证码,大批量的注册 CSDN 网站的账号的,注册的时候发现居然没有验证码,以前这个网站是丢外链的圣地,现在倒是管的严格,收录也没有以前那么好了,发现他注册账号完全不用验证码了,这倒是一件值得看的好事,只要收一个短信码,就可以顺利注册成功,不过初始账号还是比较多的,需要输入新的用户名,点确定就可以注册成功,它网站注册成功会跳到主页去,然后软件判断主页代码,进
群发软件gitee网站注册账号软件
gitee网站注册账号软件,这个网站有一个拖动验证码,有一个字母验证码,以前是做过的,现在换一个短信平台,就可以直接注册成功,并且把缓存给采集到列表备用,这个网站收录是几乎无敌的状态,所以账号是肯定值钱的,您如果有什么外链,可以丢到这个网站进行跑蜘蛛,这个网站有点像以前的 CSDN 网站,CSDN 以前是超多漏洞的,不【知】道以前发过的人有没有记过,发外链几乎秒收录,可是他自己太作做了,非要改变,导致收录不同往日
群发软件秀购网全自动发布帖子软件
秀购网全自动发布帖子软件,这是一个 B2B 网站,只是做了一个 POST 脚本,一个普通网页的脚本,他们的限制是比较少的,网站个人中心也可以联系 QQ 充值,这些可不是我们软件的平台,他们找的网站都有这些,软件中您想节省电脑资源的,可以用 POST 版本,想看过程的就用 PC 普通的版本,两个有好也有差的一方面,但收录都是一样的,图片放到软件的列表中去,他能自动的传上网站去的,但图片后缀只能用 JPG,其它格式不能上传上去,
群发软件武法出租车论坛全自动发布帖子软件
武法出租车论坛全自动发布帖子软件,这个论坛版块是比较多的,而且是一种动态验证码,它是一种典型的养网站例子了,不过您要是没有买到内部账号,发帖是比较费劲的,因为一个号只能发两个帖子,软件先是自动的写入网页缓存账号,写入缓存是只能有两个论坛发帖参数的,如果不然,您一会发帖的验证码,他永远提示您是错误的,针对这些有登陆验和发帖验证码的,都必须按这个脚本这样写入缓存才可以。这个可以作为动态验证码论坛例子,
群发软件导列网全自动群发软件
导列网全自动群发软件,这是一个 B2B 网站,做一个普通网页版的群发软件,做一个后台 POST 提交的软件,软件没有太多折腾的地方,全部都是自动操作的,导入标题内容就可以全自动发帖子,图片一定要有 JPG 后缀的,不然会在 POST 脚本上传不了图片,内容的图片可以加在内容 2 或是内容 3 里,这样发出去带 IMG 的标签,就会显示到内容图片里,您发帖的时候,在内容框里上传一次,内容会自动的带在图片里面穿插进去,弄二个脚本,一
群发软件快手图文自动发布软件
快手图文自动发布软件,图文发布实际就是传一张图片,然后加上标题和内容,和上传视频一样,他都是一样的操作,只是内容不能超过一千字,不然会发不出去的,手机 APP 上也会有这样的限制,视频对于这个网站来说发的比较多,图文虽然流量很大,但却是没有多少人有耐心看完所有的文章的,都几乎往视频流里里折腾,图文这个可不是靠什么百度收录的,他们就像 BIBI 网站这些一样,全靠自身的超大 IP 流量进行粘帖用户,相当于一个大的
群发软件百家号头条全自动群发软件
百家号头条发送软件,这个头条是自备文章导入发送的,之所以新瓶装旧酒是因为这个是有技巧的发送,他是利用一个 HTML 编辑平台的转换代码,让自己可以在百家号发送头条号不被删除除,文章估计都是用通过小炎号类似的人工智能创作平台进行攒写的,所以都比较容易不被删除的,而且很容易被百度收录,现在几乎没有人会通过自己手打出来,软件先是 HTML 平台把代码给转换一下,再用软件的复制全赞功能,把内容给写进了粘帖板,写入缓存
群发软件知乎个人主页自动设置软件
知乎个人主页自动设置软件,用缓存去写入【知】乎个人主页名称,他是 180 天才能改一次的名称,还有他里面的个性签名,他的职业介绍,都成了百度蜘蛛超级爱好的地方,只是注册一个号只能改一次,这着实有点浪费 RMB 了,不过效果是好的很的,第一来,也极少会被封号,就算号被封了,他的个人主页还在那,名称也不会变,致少还一直在那,二来还是要找到手机好的平台,才可以这样玩,价格不贵,脚本这个是廷续昨天的那个,这个是设置
群发软件知乎自动注册软件脚本下载地址
知乎自动注册软件,这个网站管的是比较严格的,而且验证码也是比较恶心的那种,但对接飞码这个平台还是可以注册不少的账号,如果这个平台没有号码了,也可以更换到其它平台的 API 里,软件并不限制您对接哪一个 API 接口的,只要有随便可以改的,像什么俄罗斯或是其它国家的号码都是可以收到的,只要短信一接,就可以登陆,有的平台限制多,有的平台限制极少的,这个脚本主要是提供注册,〖逻辑〗判断是比较多的,各种判断有没有登
群发软件搜客商务网全自动发帖软件
搜客商务网全自动发布帖子软件,这个网站也是 B2B 网站,做两个版本供后续使用,网站传图片一定要注意,这个脚本默认是 JPG 的,如果需要改成其它格式,他网站是不能自动识别的,需要改脚本上传动作,只要把上传动作改成对应的后缀格式就可以,但没有经验的最好不要去动吧,JPG 图片用的比较多,就用这个就可以了,也没有什么很卷的操作吧,各种各样的格式,如果不是为了美化什么的,没有多大的必要,网站每发一帖就要付一角钱的节
群发软件商务导航网全自动发布软件
商务导航网全自动发布软件,这个网站也是 B2B 网站,只做分类信息发布,现在的目标是把所有这些 B2B 网站进行大切换,做一个 POST 版本,一个 PC 普通的版本,像昨天的那个网站,居然玩的是手机收录的接口,而这个倒是中规中矩的网站,只要有 VIP 都发帖就可以了,没有太多的限制,不是 VIP 也不给发帖,全部是走会员路线的,网站只要有点收录,就有一大群人往里面堆量的,现在 B2B 网站都成了这个常态,然后收录又会慢慢下滑,然
群发软件发财草网站自动发帖软件
发财草网站全自动发布软件,这个网站倒是蛮新的,他有点像分类 58 同城网的模块,现在倒是落了一个清静的网站,专攻什么手机 APP 里去了,越来越麻烦的地方,这个网站还是B2B后台类似的,能不能收录,完全看发的数量,发的多了,收录自然就好了,如果发的少就很难说了,免费发的时候还会有一个验证码比较麻烦的,网站只能发一个地方,就是资讯的版块,也不用做太多〖逻辑〗判断了,软件还是做了两个脚本,一个是 POST,一个是普通
群发软件爱搜群网站自动发布软件
爱搜群网站自动发布软件,这个也是 B2B 网站,网站现在免费发帖都有验证码,每天有十帖的免费,都是集人气的一种措施,不过免费的发的这么少自然效果不会好到哪去,这个要了解哈,毕竟水桶的容易是按他的短板计算的,可不是什么随随便便可以改变的事,这个脚本分二个脚本,一个是后台运行,但您必须开好会员,不然肯定发不成功的,这可不是 POST 就可以自动的跨越他的限制,就直接可以发了,这是不可能的,除非人家允许这样免费哈
群发软件银盾皇全自动发帖软件
银盾皇全自动发帖软件,这里两个版本,一个是 POST 版本,一个是普通版本的,很多人非要弄两个版本去发一个网站,有时候需要快,有时候需要看到过程,所以很多 B2B 网站改成了两个版本,网站发帖是比较简单的,有账号就可以发,他们 B2B 网站本来就是用来发广告的,他们充好会员就可以一直发帖,网站是一种计件方式的,每发一帖就扣多少钱,网站越好,收费就越贵一些,便宜的网站也有人发,那些家伙也有的是图心里安慰的,也不【知
群发软件跑列网全自动发布软件
跑列网全自动发布软件,这个是 B2B 网站来的,只要导入好标题和内容,放好会员号就可以全自动发帖,这个是后台发送的版本,和普通的版本,只要有号就可以全自动发,两个版本放在上面了,看电脑吃饭,第一个就用的是普通版本,他能看到过程,一个是 POST 过程,他全程后台运行,可以多线程,发的会比较快,几乎不占电脑资源,后台静默运行,针对差劲的电脑设计的,不过您看不到过程有时候会心慌慌,人就是对没有掌控感的东西会产生
群发软件小木虫论坛自动软件
小木虫论坛自动发布帖子软件,这个脚本是手机版的,所以还是有必要发布一下的,网站每年这几个月,会超多人用,所以到处找这个软件的人也比较多,而 PC 不管是用的 POST 还是啥,都容易被封号,但是这个 WAP 端应该是老掉牙的地方,所以防火墙会有一个漏洞的,这个网站主要是内部号发的比较多,也就是他们自己的号,小号发还是有机率会被封的,最好有能力的还是拿到内部号,这个端的会发的比较快,可以自己发一些版块,导入比较多
群发软件鲁德软件平台提问软件
鲁德软件平台提问软件,这个网站是一种软件平台来的,软件在这个网站的提问版块进行提问,因为是提问的,一般一个账号就可以发很多,不过他是有一个极验证码的,软件这个脚本用的是图鉴平台进行打码,识别还是很便宜的,直接可以拖动对,没有用 POST 的那个极验证码平台,感觉他们现在已经差不多了,时代在进步,人工智能找这些图片座标还是像爸爸打三岁小孩似的,随便下手。不过这个网站和的是缓存登陆哦,第一次发,您可要自己登
群发软件爱搜网全自动群发工具
爱搜网全自动群发软件 POST 版,这个网站只有两个分类,一个是产品供应分类,一个是资讯分类,产品供应分类的系数是 25 这个可能网站自己也没有关注到问题所在,一般是 21 系数收录才会好,好在资讯这个默认了,对于收录,这些网站都已经被百度蜘蛛给训化了,人家都会按惯性的方式去爬行,如果您想另起一门旗帷,那就只能说抱歉了,您还没有那个实力与之抗争,还不要说,人家现在技术性的业务是比较少的,您想让他改变那种爬行方式
信息发布软件POST 中巴网全自动群发软件
POST 中巴网全自动群发软件,这个是 B2B 网站,不过以前都是做的普通版本,这个是 POST 版本,可以节省电脑很多资源,可以不占用后台,可以后台静默运行,可以飞快的跳过一些错误,可以秒完成发帖过程,自动后台传图片,然后采集图片地址,进行采集保留,再判断里面有哪一些分类,再把分类随机切换,这个标题可以加长的模式,内容也是不被限制的发帖模式,因为是后台运行,他这些限制的都是页面 JS 限制的,不过您要不是网站会员,
群发软件乐扫网 B2B 网站全自动发送软件
乐扫网 B2B 网站全自动发送软件,这个网站也是 B2B 网站来的,有的人总是在迷茫中生活着,总是说找不到网站发,那您就可以弄几个这样的 B2B 网站先把池水动起来呀,为什么一直在纠结那些秒收不秒收的事呢,很多网站前期是沉默的,某天东风将至,收录直接就飞速上升了,这些网站现在都有这种特点,不过他们也不【知】道,现在有很多论坛更是牛,收录比这些快的多,可不是什么 DZ 论坛,而是一些主题论坛,也是这样,某几天收录超级
群发软件记得网 B2B 网站全自动群发软件
记得网 B2B 网站全自动群发软件,这个网站也是 B2B 网站分类来的,他对搜狗收录会比较好,不过谷歌居然也有很高的收录,不【知】道他是走的啥运气了,百度收录差一些了,现在几乎很少人玩这些,不过有收录就有流量肯定的,国内国外都有,网站现在已经做了这种 B2B 网站模板了,全部过程只需要改一个地方,那就是网址列表的网址,您换了网站,只要把域名放进去,全部就会自动的,不管您想发供应,还是产品,还是行情这些分类,软件
群发软件尚格论坛自动发布帖子软件
尚格论坛自动发帖软件,这个只是普通的论坛,但因为先前是地方论坛来的,人气还可以的,收录也不会差到哪去,论坛是用户名登陆的,他一个页面有手机登陆,这个可不是通用的登陆接口,普通登陆是登陆不上的,只能用户名登陆的接口才可以,注册账号的时候要注意,不是手机号码登陆的,注册是手机号码,但是用户名才有效果的,发帖的时候没有验证码,一个账号可以无限的发送。只是发帖时间要十秒以上,不然他可是会出验证码给您按排上
群发软件驴在陌自动发提问文章软件
驴在陌自动发提问软件,这个网站是发旅行日记和路线的,不过日记这里肯定收录的比较好一些的。只是他登陆的地方只能用微信搜码登陆,短信验证码登陆,收录后还是要跑百度蜘蛛池的,不然基本不会有收录量的,发帖还有一个字母的验证码,您还必须写上,不然是不给发帖的,网站间隔时间是三十秒一帖,如果要快就只能加多几个号同时开脚本去发的。内容这里需要用座标的输入方法去整,不然是没有用的,因为他不让源码输入,也不用逐字输
群发软件Apipost网站自动发博客软件
Apipost 网站自动博客发帖软件,这个网站登陆是有一个点触验证码的,不过对软件来说这种验证码已经是最简章的存在了,所以加一个座标点击,就完事了,网站也没有太高的要求,不过发那个博客是五分钟只能发一帖,不然会一直显示发帖太过于频繁,会发不出去的,五分钟一帖,是很折磨的,但软件不会嫌烦,他能自动的切换账号发,可以自动用的缓存登陆发,可以自动动的等分钟发的,完全看您想要方还是圆的,一切都可以调试,没有什么限
群发软件灭提问网自动发提问软件
灭提问网自动发提问软件,这个网站后台会不会有眯怪,不管这么多了,软件可是用来发广告用的,这个网站登录有验证码,发帖也有一个字母的验证码在上面的,所以是要耗钱的,不过这些网站这两年如果找到好的,都是秒收录的存在,比百度自己的产品收录都要好,这是非常神奇的地方,特别是这些提问类的网站,更是牛的不行,边发边秒收,只是每天要发,有一天不发,那收录就全部回到了解放前了,原因可没有人【知】道的事,规律就是这样
群发软件齐鲁信息网站自动发布工具
齐鲁信息网站自动发布工具,这个网站只是一个站群论坛来的,他网站会自动大量地用软件挂 N 多信息,等收录好了就卖账号给别人发布帖子的方式,论坛是比较难做收录的,但一旦能做起来,收录会更好一些,排名也会高,论坛本来就是冲着交流的属性去的,所以百度蛛蜘收录的方式排名也是不一样的,虽然经过了这么多久,但基础框架摆在那里是不可能太多的转变,网站就一个简单的问题验证码,回答对了就可以登陆和发帖,他网站也会有大量
群发软件微软Sway自动生成软件
微软Sway自动生成软件下载, 对于国内来说可能不是很神奇,但在谷歌里可能早已经是大佬级别的存在吧,外国人的东西有很多是很新鲜的玩意儿,但用的人却像是比较高级的,而国内的东西,有一点新鲜的东西就会扎堆在那里玩弄,也不【知】道是价值观的问题,还是因为人的大脑都喜欢没有见过的新鲜玩意儿,这个东东可以生成很多漂亮的新闻稿,像 PPT 类似的。不过外国人这些看上去很多都已经被人工智能给完美替代的主了吧。软件这里是写
群发软件百度文档自动上传 WORD 文件软件
百度文档自动上传 WORD 文件软件,这个网站应该是比较多人弄的,不过弄的都是正规的方式,以前可以弄成审核通过了,放一些外链网址去,可是现在审核通过修改,又要审核了,基本让他堵住了漏洞,不过还是有一些人在上传 WORD 用的,毕竟正规工作的人太多太多需求了,这些文档收录好,还可以赚钱,很多人会贪那点方便下载别人集合好的文档是行调用,特别是一些总结,一些目录,都是别人幸苦劳作的结果,甚至有的是作为小说的宣传地把
群发软件企业录网站分类信息软件
企业录网站分类信息发布软件,这类网站有十年多的历史了吧,还是老网站好,随便发一发就收录,问题是养起这些大胖小子也是不容易的,先前的坚持与无奈,以前可能会觉得是一只吞金兽,现在可是一棵摇钱树了吧,还理啥财,种一棵树最好的时机是十年前,其次是现在,我们努力的规划好了吗,现在人工智能发帖也是这样,找一个 AI 的形象,把自己训练出来,也许可以永生哦,有很多人都是这样想的,把自己所有的思想存到 AI 里,算出来一
群发软件师徒网自动发布提问软件
师徒网自动发布提问软件,这个网站有点像博客,不过他又分出了一个提问版区,所以这里收录会比较好一些,他这个提问区其实是 WP 博客系统弄的,也不【知】道为什么整出这么一个版块出来,他登陆方式,全部都已经美化了,但 WP 博客系统那种选择分类的模型至今没有什么变化,还是老三样,这里发布帖子的时候,他分类是用了固定的方式的,登陆有一个点触验证码,估计是比较简单的鼠标检验,用座标功能点击一下就可以实现自动登陆了。
群发软件大河网B2B软件
大河网全自动群发软件,这个网站是 B2B 网站来的,本来就给您发广告用的,不过他只有发资讯类的,要充多少钱他是可以自动开通的,也算是很方便的一个自助网站了,这类权重比较小的网站,网站主人也是很聪明的,他们会把所有信息发到一个分类,这样可以提高一个分类目标的权重,收录自然会比散弹枪好很多的,只是网站也没有啥快的,很卡屏的感觉吧。不过他这个鬼下拉分类倒是很奇葩,天天会更换,不【知】道要整点啥,所以我这里是
群发软件天天基金头条发布软件
天天基金头条发布软件,天天基金这个可是史上最多有钱人的集散地,网站以前其实是他博客的一个升级版,不过现在头条看上去大气上档次一些吧,也没有太多的限制,只是一个账号一天只能发五帖,首次登陆会有一个点触验证码,不过第二天就会没有,网站是可以缓存登陆的,要是封号了就很完蛋,内容要关于财富之类的内容,不然是会被秒删除的,软件现在是用账号密码登陆,第一次登陆您得手工去输入验证码才让登陆成功,账号密码可以自动
群发软件建设工程网软件群发
建设工程网软件群发,这个网站看上去也是同一批人产品,这类 B2B 网站,如果能收录的,都会出大牛股,如果不能的,那就只能做一个低调的的老百姓了,百度蜘蛛也是一样的得性,看到这类网站开始的时候疯狂追逐,等发现网站内容太过于相似的时候,他又心生讨厌了,只好时不时的远离了,某一天还来给您玩一个空然消失的游戏,让您猜个饱,您是这里生病了,还是那里得病了呢,不过找原因都是徒劳,所有问题都其实出在一个新玩意儿的身
群发软件中国结艺网自动 B2B 网站群发软件
中国结艺网自动 B2B 网站群发软件,这个网站是发布广告的网站,只要有号就可以发,没有验证码,没有审核,有内容和标题都可以导入进去发,其实现在 GPT 这类生成文章,发起来效果会好一些,自己的内容,再加上生成的内容进行发上去,会比插入新闻和小说内容会好一些,只是很多后【知】后觉的人不【知】道怎么生成去用罢了。 结艺网自动 B2B 网站软件下载地址: 随着互联网的普及和电子商务的兴起,B2B(Busin
群发软件当当AdSmart 自动上架货物软件
当当AdSmart 自动上架货物软件, AdSmart依托全球最大中文书店&网上商城当当网,帮助客户进行最有效的市场推广。面向白领,公务员及您可自由选择广告发布类型和目标页面,并可随时修改广告内容和预算。这个软件可以自动批量的上架一些自己的物货,自己只需要输入书本的系列号到软件中去,然后软件会自动按书名,关键字排序,把货物自动把图片,和系列号自动上架上去的一种程序化操作,账号这个分类也是需要自己添加一下的,就是想
群发软件36商务网发布帖子软件
36商务网B2B网站软件,这个网站自然也是 B2B 分类商务网来的,网站是做搜狗搜索的,所以对于这个比较友好一些,只是他们都是 PC 端的,虽然搜狗能秒收,可百度收录也没有多好的效果的,这些网站现在主要是打一个堆量的效果,发的多,收录自然也会上去,发的少的话,自然没有什么好的收录量,不管您发的这种类型网站是大网站或是小网站,没有量一定就是扯皮,没有效果的。只要把量堆下去了,百度蜘蛛多么正人君子,最好也会看在多的
群发软件哔哩哔哩网站专栏群发软件
哔哩哔哩网站自动上传内容图片发布专栏软件,这个网站就是账号比较难求得,一直以来他网站都这种开放模式,收录是现在全网巨好的一份子,现在几乎没有这么开放的网站,有这么高收录量的老大哥,这个脚本可以上传四张图片,其实就是重复的把那几步上传步骤修改一下就可以的,然后分别采集存放到了软件的四个列表,方便插入到内容里,他调用图片必须有一个代码,不然是无法显示图片的,这层里是最麻烦的地方吧,不过专栏不用上传视频
群发软件电梯阁论坛群发工具帖子软件
电梯阁网站全自动发帖子软件下载,电梯阁论坛全自动发帖软件,这个网站看上去会很普通,不过只是一个论坛,但是他是一种技术性论坛,所以秒收录是极高的,特别是他放广告的版块,收录还是比较喜人的,都很多秒收录,看来很多人还是很在乎这些技术性的分享的,虽然现在不正常的人还玩着电脑,正常的人可能早就飞上了哪一个高枝了吧,网站还是这么奇葩的样子,版块多,广告多,收录也居然还被百度蜘蛛给爱上了哈。 电梯阁论坛群发工
群发软件搜狸网站自动发帖软件
搜狸网站自动发帖软件,这个网站是一种注册账号模式发帖的,他和B2B网站类似,但网站没有这么容易即时放开审核。显示中的都是自动审核过的,网站收录的也是搜狗的作用,不过网站是付费形式的,他有会员后台,登陆也会有一个验证码,发帖就一张图片,一个分类,一个标题内容就可以自动发帖成功,没有什么难度的,不过内容这个输入框是嵌套的方式,也就是只能针对他一个网站会有作用,换一个网站这步就得重新做了,好在网站发帖也没
群发软件微页B2B网站发帖软件
微页B2B网站发帖软件,软件市场营销和信息发布时,微页B2B网站发帖软件无疑是一款备受推崇的辅助工具。该软件专为在微页B2B平台进行信息发布与推广而设计,其独特之处在于发帖权限主要面向付费用户开放。这一特性使得微页B2B网站得以有效筛选并确保平台上企业的资质及信息的真实性,从而维护了一个相对纯净且高效率的商业信息发布环境。 微页B2B网站发帖软件下载地址: 发帖过程录像: 微页B2B网站发帖软件作为一项
群发软件图图网文章自动投稿软件
图图网文章自动投稿软件,这个看上去像是一个相册网站,但他其实是一种投稿的网站来的,账号也是付费才会通过审核,并不是免费让您我限发的,网站肯定有点水份才会让您付费,一般这类付费发帖的网站,都可以实现免自己提交蜘蛛池的效果,至于收录结果,完全是看您自己的标题内容的质量说话的,再加上网站的权重高,那收录可能超好,要是没有达到蜘蛛池的要求,那收录就像打水漂似的差劲的,发这类网站,最好的方式是自己复制当天秒
群发软件喜马拉雅自动评论软件
喜马拉雅自动评论软件,这个网站可以发听歌单的,不【知】道为什么大家都不动合,不过今天刚好有人要弄一个评论,他说收录更秒吓人,他是先采集最新的听单,然后采集多少页,再进行听单逐个评论,由于是最新的听单,所以评论都几乎在第一页呈现,如果提交给百度蜘蛛池,很快就秒收录了,这些网站PV非常高,几乎是人气最大的地方,他们拥有的宝藏是值得开发的,如果你的号是VIP号,评论几乎是秒出来,他是利用听单的评论收录,所以
群发软件亿图脑图账号注册个人主页中心页宣传方案
亿图脑图账号注册个人主页中心页宣传方案,这个网站是注册账号进行主页宣传的,这个网站是AI脑图生成的,非常聚人气,所以收录一直很好,他个性签名可以输入标题和内容,内容是二百个字,超过了就输入不了,提交不成功,最好是自己算好字数导入,特别是有一些特殊符号的,这种网站是要跑蜘蛛池的,不跑基本很难收录,不过一旦收录,会一直存在上面,很划算的,排名也很高,不过这个网站也有一个毛病,他要在个人主页里点注册,如果
群发软件17173社区发帖软件
17173社区发帖软件,游戏社区一直是秒收录的地方,像这些大IP超级最多人玩的PV地,肯定都是秒收录的高级地区,这个脚本是自动在剑侠社区发帖的,社区可以自己更换,也可以自己选择分类,不过现在收录最好的就是这么几个社区地了,虽然他是三级域名,但17173的名头还在的,社区里最多人的地方,就是在这里了,社区很多人流的地方,不过这个一个账号发帖会有限制,软件是利用缓存CK进行写入的,没有做登陆步骤,因为他登陆有验证码,
信息发布软件知识辰星网站动态群发软件
知识辰星网站动态群发软件,这个网站和以前的动态微博类似的网站,他是没有太大的区别的,不过他网站一会放开注册发帖,一会又限制,让人摸不着头脑,网站放开的时候就像是洪水一样带来N多的收录,发帖多的人自然知道怎么弄内容可以收录,以不弄弄某些内容不会收录的,如果不明白这点,是极度百万剧的存在,因为你根本就没有吸取前面的经验,只是有盲目从众的干活,是得不出好的结果的,做很多事情既要低头拉车,也要抬头看路,知
群发软件720云网站自动创建场景软件
720云网站自动创建场景软件,这个网站是做全景VR影像类似的,发现他们居然可以把这个链接做为宣传的地方,不过只能五十个字完工,也就是标题这里输入五十个字左右,脚本里做了限制五十个字,太长会被K掉,用的是他的素材库,网站没有什么太大的限制,封号也是看运气的,只是网站不能用缓存登陆,他那个验证码是会动来动云的,传到网站打码会有一点差别的,基本是手工打码一个号就可以一直发,没有什么限制,素材用啥都可以,网站权
群发软件QQ 音乐歌单全自动群发软件
QQ 音乐歌单是一个比较低成本的宣传方式,软件先是通过 QQ 登陆歌单页面,然后往了老面的发标题和简介进行宣传,音乐视频小说站可以说是最容易收录的地方了,比其它的限制还少,现在主力位往往很少关注这些,这也是给广告提供了位置的空缺地带,这个脚本可以采集缓存,然后写入缓存进行账号切换着发,这样是很简单的操作了,有的收录了,连评论都成了权重地,因为这些跑跑蜘蛛池极容易变成一个收录地带圈,这也是因为 腾讯这些默认
群发软件晋江小说网站书单软件
晋江小说网站书单软件,最近看书的书单很火暴收录,因为他们书单可以任意的发,可以让他网站小说的PV直接升级收录,一般来说他们PV高的网站都是秒收录的存在,只是他们没有太多的外在链接,全部是靠自身的小说网站进行的,只不过这些网站比较难找到,特别是这个网站,他的书单是在很多很多公告最底下的,不认真看居然不【知】道他的存在,居然他存在就会有一个好的收录量了,只要找到书单的网址,然后提交书单,都可以有一个好的收
群发软件洋溪信息港自动发布软件
洋溪信息港自动提问软件,这个网站有点像论坛,但他其实手机网址里发提问才有收录,其它收录比较差劲,而且这个已经很久了,以前一直不让发的,最近又恢复了可以发帖,故此做一个脚本进行发提问,发成功后可以直接采集网址,自然收录也可以,丢蜘蛛池也是可以的,网站效果还是很别具风格的,就是账号都是手机验证码注册,好在他网站提问账号可以疯狂刷,没有验证码发帖,只要放进去账号密码,软件就可以自动登陆,自动的发帖,没有
群发软件百度贴吧视频上传软件
百度贴吧视频上传软件,百度贴吧消费了这么多年,仍然是最大的社区,也算是难得了吧,他的规则时严时松,给做广告的人都有了一定的空间,这个网站虽然严格,全部都是机器人审核的,但也因为这样才有操作的空间,有的时候某些BUG是层出不穷的,有时候是同音字的天下,有时候是视频上传的天下,有时候是图片动态的天下,各有千秋,好不热闹的样子,这个脚本是自动上传视频的,只要号是正常都可以上传成功,主要是没有验证码,省一笔R
信息发布软件Moloney网站自动发帖软件
moloney网站软件,这个网站只能发提问的一个后台,因为网站是品牌比较在的网站,可能架构是有问题的,不过网站发帖一个号可以发很多帖子,帖子发完要在个人中心才能把帖采集回来,发的很快也无所谓,网站不理这些事,提问这个发成功他是按里面分类进行帖子排列的,你发哪一个分类就要专进哪一个版块去采集个人帖子网址,这样丢蜘蛛池才会有效果,百度自然收录这些网站基本是不能的,因为网站权重比较低的,只能靠外力去抓取,上星
群发软件三一办公网站自动注册账号宣传主页软件
三一办公网站自动注册账号宣传主页软件,这个网站都是下载PPT的一个网站,这些网站收录量都极大,随随便便一个就有几百万的收录量,也不【知】道他们好在哪,可能现在做老师的还会在这些网站下载资料吧,他们也不得不弄这些PPT上课玩,生活所迫,都有不容易的,下载这些PPT也是乘着以前的流量做大做强了许多,现在可能都在用手机在做PPT了吧,不过聪明点老师们可能还在用传统的电脑在做这些PPT,不然他们以前买的电脑不也是成了废
群发软件面圈网站自动发帖工具
面圈网站发提问软件,这个网站是一个综合性网站,但似乎可以发提问作为广告,以前不可以注册账号,最近又恢复了可以注册了,注册需要手机验证码才可以发,他发帖也没有多少限制,基本就是登陆一个号,就可以一直发提问,不过内容输入框有点麻烦,软件这里是用点击一下,复制所有列表要发的内容,然后粘帖进去的,完美的解决,不过这样也有点问题就是会占用打字的粘帖板哈,这样就只能独立让他运行了,不然会窜行的,发帖的时候还要
群发软件腾讯兔小巢软件
腾讯兔小巢自动创建产品软件,这个创建产品有点像微信里的小程序,他是一个小组讨论类似的,这个网站账号也是比较多人买的,都是微信搜码登陆,然后自动登陆上的意思,不管是发帖,还是创建产品都会有一个腾讯的验证码,现在随着人工智能的来到,这些验证码几乎就是小菜一碟了,没有啥难度,三下五除二就可以破解好,并且可以给您建一个强大的识别库了,现在打码平台也很多看到了这种机遇,只要跑一跑几天,就可以把一个识别库给整
群发软件17推论坛专用发帖软件
17推论坛是一个站长论的网站,以前很火的,现在也还是让别人发一发软文,发一发外链作为网站的赚钱点了,很多不愿意去尝试新的东西的网站都还守着这一亩三分地,当然在不断变化的时候,这也没有什么所谓对与错,只是他们选择是这样,没有了那种多大心去办多大的事,只有剩下这点能量,再去发火挥自己应该有的光和能罢了,有时候坚持自己能车范围的事,比说什么大道理还要有用,出击着各种各样的新市场,守着自己的成功之作,发光也
群发软件西瓜视频软件
西瓜创作平台视频自动上传软件,这个网站其实是抖音的子公司,也是借助他的力量做大的,但西瓜视频他主要着重点是网页的东东,不过也因为太多太杂的原因,他网站收录的就比较快,视频网站别的不了解,但收录是最好的,没有之一,现在他改版成只能上传视频,输入标题,上传封面图片,我们可以弄关键字,然后把视频封面上下功夫,其它是不让填写的,没有简介的了,以前是有的,现在已经全部改版了,软件是可以发一帖切换一个账号,切

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2024-5-6 21:40 , Processed in 0.521402 second(s), 45 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表