当前位置: 首页 > news >正文

PHP网站建设计划书上海购房网官网

PHP网站建设计划书,上海购房网官网,软件编程和网站开发差别,wordpress网站价钱Java反射 1. Java反射机制概述 Reflection#xff08;反射#xff09;是java被视为java动态语言的关键#xff0c;反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息#xff0c;并能直接操作任意对象的内部属性及方法。 Class c Class.forName(反射是java被视为java动态语言的关键反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息并能直接操作任意对象的内部属性及方法。 Class c Class.forName(java.lang.String);加载完类之后在堆内存的方法区中就会产生一个Class类型的对象一个类只有一个Class对象 这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。 正常方式引入包类new实例化获取实例对象 反射方式实例化对象getClass()方法获取完整包类名称 2. 理解Class类并获取Class实例 2.1Class类 Class 本身就是一个类Class 对象只能由系统建立对象一个加载的类在JVM中只有一个Class实例一个Class对象对应的是一个加载到JVM中的一个.class文件每个类的实例都会记得自己是由哪个Class实例所生成通过Class可以完整地得到一个类中所有被加载的结构Class类是Reflection的根源争对任何你想动态加载、运行的类唯有先获得相应的Class对象。 2.2 Class类的常用方法 方法名功能说明static ClassforName(String name)返回指定类名name的Calss对象Object newInstance()调用缺省构造函数返回Class对象的一个实例getName()返回此Class对象所表示的实体(类接口数组类或void)的名称。Class getSuperClass()返回当前Class对象的父类的Class对象返回当前类对象的父类的类对象Class[] getinterfaces()获取当前Class对象的接口ClassLoader getClassLoader()返回该类的类加载器Constructor[] getConstructors()返回一个包含某些Constructor对象的数组Method getMothed(String name,Class… T)返回一个Method对象此对象的形参类型为paramTypeField[] getDeclaredFields()返回Filed对象的一个数组 2.3 获取Class对象的方式 a.若已知具体的类对象通过类的class属性获取该方法最为安全可靠程序性能高 Class c Person.class;b.已知某个类的实例调用该实例的getClass()方法获取Class对象 Class c person.getClass();c.已知一个类的全类名且该类在路径下可通过Class类的静态方法forName()获取 可能抛出ClassNoFoundException Class c Class.forName(demo.Student);d.内置基本数据类型可以直接用类名.Type e.利用ClassLoader 2.4 哪些类型有Class对象 class外部类、成员成员内部类、静态内部类局部内部类、匿名内部类。interface接口[]数组enum枚举annotation注解interfaceprimitive type基本数据类型void public static void main(String[] args) {Class c1 Object.class;Class c2 String[].class;Class c3 int.class;Class c4 Override.class;Class c5 ElementType.class;Class c6 Integer.class;Class c7 void.class;Class c8 Class.class; }3.类的加载与ClassLoader 3.1 Java内存 1堆 存放new的对象和数组可以被所有的线程共享不会存放别的对象引用 2栈 存放基本变量类型会包含这个基本类型的具体数值引用对象的变量会存放这个引用在堆里面的具体地址 3方法区 可以被所有线程共享包含了所有的class和static变量 3.2 类的加载过程 当程序主动使用某个类时如果该类还没有被加载到内存中则系统会通过如下三个步骤对类进行初始化。 类的加载Load类的链接Link类的初始化initialize 类的加载Load 将类的class文件读入内存并为之建立一个java.lang.Class对象。此过程由类加载器完成。 类的链接Link验证准备解析 将Java类的二进制代码合并到JVM的运行状态之中的过程。 1验证确保加载类的信息符合JVM规范没有安全方面的问题。 2准备正式为类变量static分配内存并设置类变量默认初始值的阶段这些内存都将在方法中进行分配。 3解析虚拟机常量池的符号引用常量名替换为直接引用地址的过程。 类的初始化initialize JVM负责对类进行初始化。 1执行类构造器clinit()方法的过程。类构造器clinit()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的不是构造该类对象的构造器)。 2当初始化一个类的时候如果发现其父类还没有进行初始化则需要先触发其父类的初始化。 3虚拟机会保证一个类的clinit()方法在多线程环境中被正确加锁和同步。 3.3 类的初始化 类的主动引用一般发生类的初始化 1当虚拟机启动先初始化main方法所在的类 2new 一个对象的对象 3调用类的静态成员除去final常量和静态方法 4使用java.lang.reflect包反射 5当初始化一个类如果其父类没有初始化则先初始化他的父类。 类的被动引用不会发生类的初始化 1当访问一个静态域时只有真正声明这个域的类才会初始化。如当通过子类引用父类的静态变量不会导致子类初始化。 2通过数组定义的类引用不会触发此类的初始化。 3引用常量不会触发此类的初始化常量在链接阶段就存入调用类的常量池中了 class Father {static int a 2;static {System.out.println(父类被初始化);} }class Son extends Father {static {System.out.println(子类被初始化);m 300;}static int m 100;static final int M 1; }public class Test6 {static {System.out.println(Main类被加载);}public static void main(String[] args) throws ClassNotFoundException {//主动引用//Son son new Son();//反射也会产生主动引用// Class.forName(org.example.reflection.Son);///** 主动引用结果* Main类被加载* 父类被初始化* 子类被初始化*/// 不会产生类的引用方法// System.out.println(Son.a);/** 以上结果* Main类被加载* 父类被初始化* 2*/// 数组//Son[] ar new Son[10];/** 以上结果* Main类被加载*/} }3.4 类加载器的作用 **类加载的作用:**将class文件字节码内容加载到内存中并将这些静态数据转换成方法区的运行时数据结构然后在堆中生成一个代表这个类的java.lang.Class对象作为方法区中类数据的访问入口。 **类缓存:**标准的JavaSE类加载器可以按要求查找类但一旦某个类被加载到类加载器中它将维持加载缓存)一段时间。不过JVM垃圾回收机制可以回收这些Class对象。 类加载器作用是用来把类class装载进内存的。JVM规范了定义了如下类型的类的加载器。 自定义类加载器System Classloader系统类加载器Extecnsion Classloader扩展类加载器Bootstap Classloader引导类加载器 自低向上检查类是否已经被装载自顶向下尝试加载类 1引导类加载器 引导类加载器用C编写的是JVM自带的类加载器负责Java平台核心库用来装载核心类库。该加载器无法直接获取。 2扩展类加载器 扩展类加载器负责jre/lib/ext目录下的jar包或-D java.ext.dirs指定目录下的jar包装入工作库。 3系统类加载器负责java -classpath或-Djava.class.path所指的目录下的类与jar包装入工作是最常用的加载器 public static void main(String[] args) throws ClassNotFoundException {// 获取系统类的加载器ClassLoader systemClassLoader ClassLoader.getSystemClassLoader();System.out.println(系统类的加载器 systemClassLoader);// 获取系统类的加载器的父类加载器-扩展类加载器ClassLoader parent systemClassLoader.getParent();System.out.println(扩展类加载器 parent);// 获取系扩展类加载器的父类加载器-根加载器c/cClassLoader parent1 parent.getParent();System.out.println(根加载器 parent1);// 测试当前类是哪个加载器加载的ClassLoader classLoader Class.forName(org.example.reflection.Test7).getClassLoader();System.out.println(org.example.reflection.Test7 classLoader);// 测试JDK内部类是谁加载的ClassLoader classLoader1 Class.forName(java.lang.Object).getClassLoader();System.out.println(java.lang.Object classLoader1);// 获取系统类加载器可以加载的路径String property System.getProperty(java.class.path);String[] split property.split(;);System.out.println(Arrays.toString(split)); }系统类的加载器 sun.misc.Launcher$AppClassLoader18b4aac2 扩展类加载器 sun.misc.Launcher$ExtClassLoader1b6d3586 根加载器 null org.example.reflection.Test7 sun.misc.Launcher$AppClassLoader18b4aac2 java.lang.Object null [E:\Java\jdk1.8.0_191\jre\lib\charsets.jar, E:\Java\jdk1.8.0_191\jre\lib\deploy.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\access-bridge-64.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\cldrdata.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\dnsns.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\jaccess.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\jfxrt.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\localedata.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\nashorn.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\sunec.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\sunjce_provider.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\sunmscapi.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\sunpkcs11.jar, E:\Java\jdk1.8.0_191\jre\lib\ext\zipfs.jar, E:\Java\jdk1.8.0_191\jre\lib\javaws.jar, E:\Java\jdk1.8.0_191\jre\lib\jce.jar, E:\Java\jdk1.8.0_191\jre\lib\jfr.jar, E:\Java\jdk1.8.0_191\jre\lib\jfxswt.jar, E:\Java\jdk1.8.0_191\jre\lib\jsse.jar, E:\Java\jdk1.8.0_191\jre\lib\management-agent.jar, E:\Java\jdk1.8.0_191\jre\lib\plugin.jar, E:\Java\jdk1.8.0_191\jre\lib\resources.jar, E:\Java\jdk1.8.0_191\jre\lib\rt.jar, E:\IdeaProjects\java-demo-parent\basics\target\classes, E:\Program Files\JetBrains\IntelliJ IDEA 2022.3.2\lib\idea_rt.jar] 4.创建运行时类对象 public class User {private String name;private int id; }// 获得Class对象 Class c1 Class.forName(org.example.reflection.User);1调用无参构造器 // 构建一个对象调用无参构造器 User user1 (User) c1.newInstance(); System.out.println(user1 user1);user1 User{name‘null’, id0} 2调用有参数构造器 // 通过构造器创建对象 Constructor constructor c1.getDeclaredConstructor(String.class, int.class); User user2 (User) constructor.newInstance(张三, 1); System.out.println(user2 user2);user2 User{name‘张三’, id1} 3通过反射调用方法 // 通过反射调用方法 User user3 (User) c1.newInstance(); // 通过反射获取一个方法 Method setName c1.getDeclaredMethod(setName, String.class); setName.invoke(user3, 李四); System.out.println(user3 user3);1public Object invoke(Object obj, Object... args) Object对应原方法的返回值若原方法无返回值此时返回null若原方法为静态方法此时形参Object obj可为null若原方法形参列表为空则Object[] args为null若原方法声明为private,则需要在调用此invoke()方法前显式调用方法对象的setAccessible(true)方法将可访问private的方法。 2setAccessible(true) 启动和禁用访问安全检查的开关 Method、Field、Constructor对象都有setAccessible()取消检查、提高反射效率 4通过反射操作属性 // 通过反射操作属性 User user4 (User) c1.newInstance(); Field name c1.getDeclaredField(name); // 无法操作私有属性关闭安全检测setAccessible(true) name.setAccessible(true); name.set(user4, 王二);如果没有设置会报异常IllegalAccessException: User with modifiers private 5.获取运行时类的完整结构 public class User {private String name;private int id; }通过反射获取运行时类的完整结构 Filed字段、Method方法、Constructor构造、Superclass父类、Interface接口、Annotation注解 // 通过包名获取 Class c1 Class.forName(org.example.reflection.User); // 通过对象获取 //User user new User(); //Class c2 user.getClass(); // 获取类的名字 System.out.println(包名类名 c1.getName()); System.out.println(类名 c1.getSimpleName()); // 获取对象属性 System.out.println(对象属性); // getFields() 只能找到public属性 Field[] fields c1.getDeclaredFields(); for (Field field : fields) {System.out.println(field); } // 获取指定的属性 System.out.println(获取指定的属性 c1.getDeclaredField(id)); // 获取类的方法 // getMethods获取本类及父类的全部public方法 System.out.println(类的方法); Method[] methods c1.getMethods(); for (Method method : methods) {System.out.println(method); } // 获取本类的所有方法 System.out.println(getDeclaredMethods); Method[] methods1 c1.getDeclaredMethods(); for (Method method : methods1) {System.out.println(method); } // 获取指定的方法 System.out.println(指定方法 c1.getDeclaredMethod(getName, null)); System.out.println(指定方法 c1.getDeclaredMethod(setName, String.class));// 获取指定构造器 System.out.println(指定构造器); Constructor[] constructors c1.getDeclaredConstructors(); for (Constructor c : constructors) {System.out.println(c); } System.out.println(获取指定构造器 c1.getDeclaredConstructor(String.class, int.class));包名类名 org.example.reflection.User 类名 User //对象属性 private java.lang.String org.example.reflection.User.name private int org.example.reflection.User.id 获取指定的属性private int org.example.reflection.User.id //类的方法 public java.lang.String org.example.reflection.User.toString() public java.lang.String org.example.reflection.User.getName() public int org.example.reflection.User.getId() public void org.example.reflection.User.setName(java.lang.String) public void org.example.reflection.User.setId(int) public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() //getDeclaredMethods public java.lang.String org.example.reflection.User.toString() public java.lang.String org.example.reflection.User.getName() public int org.example.reflection.User.getId() public void org.example.reflection.User.setName(java.lang.String) public void org.example.reflection.User.setId(int) 指定方法public java.lang.String org.example.reflection.User.getName() 指定方法public void org.example.reflection.User.setName(java.lang.String) //指定构造器 public org.example.reflection.User(java.lang.String,int) public org.example.reflection.User() 获取指定构造器 public org.example.reflection.User(java.lang.String,int) 6.获取泛型 Java采用泛型擦除的机制来引入泛型Java中的泛型仅仅是给编译器javac使用的确保数据安全性和免去强制类型转换问题但是一旦编译完成所有和泛型有关的类型全部擦除。 为了通过反射操作这些类型Java新增了ParameterizedType ,GenericArrayType, TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型. ParameterizedType:表示一种参数化类型,比如CollectionString GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型 TypeVariable:是各种类型变量的公共父接口 WildcardType:代表一种通配符类型表达式 public class Test11 {public void test01(MapString, User map, ListUser list) {System.out.println(test01);}public MapString, User test02() {System.out.println(test02);return null;}public static void main(String[] args) throws NoSuchMethodException {// 参数泛型System.out.println(参数泛型);Method test01 Test11.class.getMethod(test01, Map.class, List.class);Type[] genericExceptionTypes test01.getGenericParameterTypes();for (Type t : genericExceptionTypes) {System.out.println(genericExceptionTypes t);if (t instanceof ParameterizedType) {Type[] actualTypeArguments ((ParameterizedType) t).getActualTypeArguments();for (Type i : actualTypeArguments) {System.out.println(actualTypeArguments i);}}}// 返回值泛型System.out.println(返回值泛型);Method test02 Test11.class.getMethod(test02);Type genericReturnType test02.getGenericReturnType();System.out.println(genericReturnType genericReturnType);if (genericReturnType instanceof ParameterizedType) {Type[] actualTypeArguments ((ParameterizedType) genericReturnType).getActualTypeArguments();for (Type i : actualTypeArguments) {System.out.println(actualTypeArguments i);}}} }//参数泛型 genericExceptionTypes java.util.Mapjava.lang.String, org.example.reflection.User actualTypeArguments class java.lang.String actualTypeArguments class org.example.reflection.User genericExceptionTypes java.util.Listorg.example.reflection.User actualTypeArguments class org.example.reflection.User //返回值泛型 genericReturnType java.util.Mapjava.lang.String, org.example.reflection.User actualTypeArguments class java.lang.String actualTypeArguments class org.example.reflection.User 7.反射操作注解 TableName(db_student) class Student {Column(name s_id, type int, length 10)private int id;Column(name s_name, type varchar, length 32)private String name;public Student() {}public Student(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Student{ id id , name name \ };} }/*** 表名*/ Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) interface TableName {String value(); }Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) interface Column {String name();String type();int length(); }public class Test12 {public static void main(String[] args) {Student student new Student();TableName annotation student.getClass().getAnnotation(TableName.class);System.out.println(类注解值 annotation.value());Field[] declaredFields student.getClass().getDeclaredFields();for (Field field : declaredFields) {Column a field.getAnnotation(Column.class);System.out.println(属性 field.getName() );System.out.println(名称 a.name() ,类型 a.type() ,长度 a.length());}}}类注解值db_student //属性id 名称s_id,类型int,长度10 //属性name 名称s_name,类型varchar,长度32
文章转载自:
http://www.morning.rbtny.cn.gov.cn.rbtny.cn
http://www.morning.jnrry.cn.gov.cn.jnrry.cn
http://www.morning.rdqzl.cn.gov.cn.rdqzl.cn
http://www.morning.zrpys.cn.gov.cn.zrpys.cn
http://www.morning.nshhf.cn.gov.cn.nshhf.cn
http://www.morning.mkczm.cn.gov.cn.mkczm.cn
http://www.morning.nzfjm.cn.gov.cn.nzfjm.cn
http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn
http://www.morning.ykyfq.cn.gov.cn.ykyfq.cn
http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn
http://www.morning.pmptm.cn.gov.cn.pmptm.cn
http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com
http://www.morning.tclqf.cn.gov.cn.tclqf.cn
http://www.morning.wwklf.cn.gov.cn.wwklf.cn
http://www.morning.yxwnn.cn.gov.cn.yxwnn.cn
http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn
http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn
http://www.morning.qpxrr.cn.gov.cn.qpxrr.cn
http://www.morning.zlchy.cn.gov.cn.zlchy.cn
http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn
http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn
http://www.morning.thnpj.cn.gov.cn.thnpj.cn
http://www.morning.phlrp.cn.gov.cn.phlrp.cn
http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn
http://www.morning.lftpl.cn.gov.cn.lftpl.cn
http://www.morning.jydky.cn.gov.cn.jydky.cn
http://www.morning.nrddx.com.gov.cn.nrddx.com
http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn
http://www.morning.xjqhh.cn.gov.cn.xjqhh.cn
http://www.morning.ypdmr.cn.gov.cn.ypdmr.cn
http://www.morning.wiitw.com.gov.cn.wiitw.com
http://www.morning.pntzg.cn.gov.cn.pntzg.cn
http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn
http://www.morning.bwmm.cn.gov.cn.bwmm.cn
http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn
http://www.morning.whnps.cn.gov.cn.whnps.cn
http://www.morning.bpmdg.cn.gov.cn.bpmdg.cn
http://www.morning.wztlr.cn.gov.cn.wztlr.cn
http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn
http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn
http://www.morning.qzxb.cn.gov.cn.qzxb.cn
http://www.morning.hlyfn.cn.gov.cn.hlyfn.cn
http://www.morning.qgfy.cn.gov.cn.qgfy.cn
http://www.morning.leyuhh.com.gov.cn.leyuhh.com
http://www.morning.ktblf.cn.gov.cn.ktblf.cn
http://www.morning.zrlms.cn.gov.cn.zrlms.cn
http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn
http://www.morning.nwczt.cn.gov.cn.nwczt.cn
http://www.morning.gmztd.cn.gov.cn.gmztd.cn
http://www.morning.xrmwc.cn.gov.cn.xrmwc.cn
http://www.morning.mfqmk.cn.gov.cn.mfqmk.cn
http://www.morning.skrcn.cn.gov.cn.skrcn.cn
http://www.morning.ymrq.cn.gov.cn.ymrq.cn
http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn
http://www.morning.wbns.cn.gov.cn.wbns.cn
http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn
http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn
http://www.morning.bmbnc.cn.gov.cn.bmbnc.cn
http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn
http://www.morning.fslxc.cn.gov.cn.fslxc.cn
http://www.morning.xesrd.com.gov.cn.xesrd.com
http://www.morning.c7623.cn.gov.cn.c7623.cn
http://www.morning.zdgp.cn.gov.cn.zdgp.cn
http://www.morning.iterlog.com.gov.cn.iterlog.com
http://www.morning.dbqcw.com.gov.cn.dbqcw.com
http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn
http://www.morning.xwlhc.cn.gov.cn.xwlhc.cn
http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn
http://www.morning.qljxm.cn.gov.cn.qljxm.cn
http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn
http://www.morning.sfnjr.cn.gov.cn.sfnjr.cn
http://www.morning.txqsm.cn.gov.cn.txqsm.cn
http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn
http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn
http://www.morning.drmbh.cn.gov.cn.drmbh.cn
http://www.morning.qkrgk.cn.gov.cn.qkrgk.cn
http://www.morning.zckhn.cn.gov.cn.zckhn.cn
http://www.morning.fswml.cn.gov.cn.fswml.cn
http://www.tj-hxxt.cn/news/255955.html

相关文章:

  • 地方社区网站 备案福州app外包
  • 带后台管理的网站模板wordpress栏目出现404
  • 晋江企业网站建设动易网站后台编辑器无效问题
  • 个人网站如何备案苏州广告公司招聘
  • 男女性男女直接做的视频网站怎么把别人网站模板下载出来
  • 有哪些网站能够免费找到素材网站开发与维护书
  • 东莞企业网站制wordpress poststatus
  • 互联网网站制作制作网站需要什么知识
  • 怎么用网站做chmwordpress 树状目录
  • 网站后台显示不了网页一般用什么语言编写
  • 高端定制网站开发网站模板设计济南工装定制公司
  • 英文网站建站公司怎么做淘宝优惠券网站
  • 上传的网站打不开川畅咨询 的网络营销怎么做
  • 站长平台怎么添加网站无锡本地模板网站建设
  • 网站写动态新闻有什么好处装修网站怎么建设
  • 网站建设策划ppt做体育赛事网站公司
  • 网站的营销推广方案及预算高端营销网站建设
  • 淘宝客做网站怎么赚钱互联网门户网站建设管理 总结
  • 网站网站开发网上支付网页设计与制作项目
  • 外贸推广网站有哪些做网站的空间和服务器
  • 学校网站建设步骤过程做婚介打么网站好
  • 南昌营销网站建设跑腿app开发价格表
  • 合肥网站建设找佳达无锡全网营销方案
  • 行政机关网站建设的意义制作网站需要什么语言
  • 文小库公文写作网站商城网站开发背景
  • 房地产公司网站建设模板做旅游视频网站
  • 自己做图片的网站链接个人企业网站
  • 同ip网站有什么危害做公众号app网站app吗
  • 江苏省建设工程交易中心网站网站维护 上海
  • 郑州网站建设动态手机网站建设哪个好