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

怎么在百度上能搜到自己的网站wordpress前端用户

怎么在百度上能搜到自己的网站,wordpress前端用户,看视频做那个网站好,wordpress phpcms 开发#Java核心(三)反射Java反射给我们提供了在运行时检查甚至修改应用行为的机制。 反射是java高级的核心技术#xff0c;所有有经验的程序员都应该理解。通过反射机制#xff0c;我们可以在运行时检视 类、接口、枚举#xff0c;获得他们的结构、方法以及属性信息#xff0c;即…#Java核心(三)反射Java反射给我们提供了在运行时检查甚至修改应用行为的机制。 反射是java高级的核心技术所有有经验的程序员都应该理解。通过反射机制我们可以在运行时检视 类、接口、枚举获得他们的结构、方法以及属性信息即使在编译期类是不可访问的。 我们也可以通过反射创建类实例调用它的方法或者改变属性值。##Java中的反射Java的反射是一种很强大的机制在正常的编程中使用并不多但它是java的主干很多Java EE 框架均使用了反射技术- **JUnit** 利用反射技术解析Test注解从而得到测试的方法并调用它们。- **Spring** 依赖注入是java反射的典型应用- **Tomcat** web容器通过解析web.xml文件和请求url将请求正确的转发到对应的模块。- **Eclipse** 自动完成方法的名称输入- **Struts**- **Hibernate**以上这个清单只是小部分它们全部使用了反射技术因为正常情况下它们无法访问用户编写的类、接口以及方法等。但是我们不建议在正常编程中滥用反射技术因为我们拥有自己编写的类的访问权限了反射存在以下几个缺陷- **性能较差** 尽管反射解决了动态类型的问题但是也引入了在classpath 扫描类进行加载的过程会影响性能。- **安全限制** 反射需要在运行时获得访问权限但是在security manager中可能是不允许的。 这可能会导致应用运行失败。- **安全问题** 通过反射我们可以访问那些不建议我们访问的类例如我们可以访问private的属性并修改其值。 这可能引发安全问题导致应用异常。- **较高的维护代价** 反射相关的代码难以理解以及调试代码的错误不能在编译期展现出来使用反射的代码灵活性不高并难以维护。##反射在类中的使用在java中任何对象要么是原始类型或者引用类型。 所有的类、枚举、数据和其他引用类型均继承自Object类。java.lang.Class是所有反射操作的入口。对于任何类型的对象JVM 会初始化其一个不可变的java.lang.Class 实例来提供检查对象的运行时的属性、创建新对象、调用方法、get/set 属性。我们来看看Class的重要方法为了方便起见我们先创建一些类和接口。javapackage com.byron4j.hightLevel.reflection;public interface BaseInterface {public int interfaceInt0;void method1();int method2(String str);}javapackage com.byron4j.hightLevel.reflection;public class BaseClass {public int baseInt;private static void method3(){System.out.println(Method3);}public int method4(){System.out.println(Method4);return 0;}public static int method5(){System.out.println(Method5);return 0;}void method6(){System.out.println(Method6);}// piblic 的内部类public class BaseClassInnerClass{}// public 的枚举public enum BaseClassMemberEnum{}}javapackage com.byron4j.hightLevel.reflection;public class ConcreteClass extends BaseClass implements BaseInterface{public int publicInt;private String privateStringprivate string;protected boolean protectedBoolean;Object defaultObject;public ConcreteClass(int i){this.publicInti;}Overridepublic void method1() {System.out.println(Method1 impl.);}Overridepublic int method2(String str) {System.out.println(Method2 impl.);return 0;}Overridepublic int method4(){System.out.println(Method4 overriden.);return 0;}public int method5(int i){System.out.println(Method4 overriden.);return 0;}// inner classespublic class ConcreteClassPublicClass{}private class ConcreteClassPrivateClass{}protected class ConcreteClassProtectedClass{}class ConcreteClassDefaultClass{}//member enumenum ConcreteClassDefaultEnum{}public enum ConcreteClassPublicEnum{}//member interfacepublic interface ConcreteClassPublicInterface{}}下面来看看使用反射的常用方法。####获得Class对象我们可以通过三种方式获取对象的Class实例- 通过静态变量class- 使用示例的getClass()方法- java.lang.Class.forName(String 完整的类名)完整的类名包含包名。原始类型的class、包装类型的TYPE均可以获得Class对象。javapackage com.byron4j.hightLevel.reflection;public class ReflectionDemo {public static void main(String[] args) throws Exception{//方式一 通过累的静态变量class获取Class对象Class concreteClass ConcreteClass.class;//方式二通过实例的getClass()方法获取Class对象concreteClass new ConcreteClass(7).getClass();//方式三concreteClass Class.forName(com.byron4j.hightLevel.reflection.ConcreteClass);//打印类相关信息System.out.println(concreteClass.getCanonicalName());System.out.println(concreteClass.getName());/** 原始类型的class、包装类型的TYPE* */Class primative boolean.class;System.out.println(primative.getCanonicalName());Class doubleClass Double.TYPE;System.out.println(doubleClass.getName());//数组类型的class示例Class arrayClass Class.forName([D);System.out.println(arrayClass.getCanonicalName());arrayClass Class.forName([B);System.out.println(arrayClass.getCanonicalName());arrayClass Class.forName([S);System.out.println(arrayClass.getCanonicalName());arrayClass Class.forName([C);System.out.println(arrayClass.getCanonicalName());arrayClass Class.forName([F);System.out.println(arrayClass.getCanonicalName());}}输出如下所示com.byron4j.hightLevel.reflection.ConcreteClasscom.byron4j.hightLevel.reflection.ConcreteClassbooleandoubledouble[]byte[]short[]char[]float[]Class的getCanonicalName()方法返回类的名称。在泛型中使用 java.lang.Class可以帮助框架获取子类。####获取超类Super Class**getSuperclass()** 方法返回类的超类(基类、父类)的class实例如果该类是java.lang.Object、原始类型、接口则返回null。如果该class是数组形式则该方法返回java.lang.Object。javaClass superClass Class.forName(com.byron4j.hightLevel.reflection.ConcreteClass).getSuperclass();System.out.println(superClass);System.out.println(Object.class.getSuperclass());System.out.println(String[][].class.getSuperclass());输入如下class com.byron4j.hightLevel.reflection.BaseClassnullclass java.lang.Object####获取公有的classClass的getClasses() 方法可以获取class的所有继承的超类、接口和自己定义的公有类、接口、枚举等的数组形式。javaClass[] classARR concreteClass.getClasses();System.out.println(Arrays.toString(classARR));输出java[class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicClass,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicEnum,interface com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicInterface,class com.byron4j.hightLevel.reflection.BaseClass$BaseClassInnerClass,class com.byron4j.hightLevel.reflection.BaseClass$BaseClassMemberEnum]#### 获取自身声明的类**getDeclaredClasses()**获取当前类型自身定义的所有类、接口并不包含从父类继承过来的来、接口。javaClass[] declareClassARR concreteClass.getDeclaredClasses();System.out.println(Arrays.toString(declareClassARR));输出[class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassDefaultClass,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassDefaultEnum,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPrivateClass,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassProtectedClass,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicClass,class com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicEnum,interface com.byron4j.hightLevel.reflection.ConcreteClass$ConcreteClassPublicInterface]#### 获取定义该class的类class.getDeclaringClass()获取定义class的类。如果该类不是任何类或接口的成员则返回null。java/*** getDeclaringClass* */System.out.println(BaseClassInnerClass.class.getDeclaringClass());System.out.println(Double.TYPE.getDeclaringClass());该类BaseClassInnerClass是在BaseClass中定义的于是输出class com.byron4j.hightLevel.reflection.BaseClassnull#### 获取包名getPackage() 方法获取包的class实例。java/** getPackage()* */System.out.println(concreteClass.getPackage().getName());输出com.byron4j.hightLevel.reflection#### 获取类的修饰符getModifiers()方法可以获取class实例的访问修饰符的个数。java.lang.reflect.Modifier.toString()可以获取class的修饰符的字符串形式。java/** getModifiers()、Modifier.toString()* */System.out.println(concreteClass.getModifiers());System.out.println(Modifier.toString(concreteClass.getModifiers()));输出1public#### 获取类型参数getTypeParameters()方法获取class的类型声明参数如果有的话。比如集合框架的接口均制定了泛型。javaArrays.asList(Class.forName(java.util.Map).getTypeParameters()).forEach(s - { System.out.println(s); });输出 K V####获取class实现的接口getGenericInterfaces() 可以获取class已经实现的接口的数组形式并包含泛型接口。 getInterfaces()方法会返回所有实现的接口但是不包含泛型接口。java/*** getGenericInterfaces()、getInterfaces()* */Arrays.asList(concreteClass.getInterfaces()).forEach(s - { System.out.println(com.byron4j.hightLevel.reflection.ConcreteClass实现的接口: s); });System.out.println();Arrays.asList(concreteClass.getGenericInterfaces()).forEach(s - { System.out.println(com.byron4j.hightLevel.reflection.ConcreteClass实现的接口: s); });System.out.println();System.out.println();Arrays.asList(Class.forName(java.util.ArrayList).getInterfaces()).forEach(s - { System.out.println(java.util.ArrayList实现的接口 s); });System.out.println();Arrays.asList(Class.forName(java.util.ArrayList).getGenericInterfaces()).forEach(s - { System.out.println(java.util.ArrayList实现的接口 s); });输出com.byron4j.hightLevel.reflection.ConcreteClass实现的接口:interface com.byron4j.hightLevel.reflection.BaseInterfacecom.byron4j.hightLevel.reflection.ConcreteClass实现的接口:interface com.byron4j.hightLevel.reflection.BaseInterfacejava.util.ArrayList实现的接口interface java.util.Listjava.util.ArrayList实现的接口interface java.util.RandomAccessjava.util.ArrayList实现的接口interface java.lang.Cloneablejava.util.ArrayList实现的接口interface java.io.Serializablejava.util.ArrayList实现的接口java.util.Listjava.util.ArrayList实现的接口interface java.util.RandomAccessjava.util.ArrayList实现的接口interface java.lang.Cloneablejava.util.ArrayList实现的接口interface java.io.Serializable####获取所有的public方法getMethods()方法可以获取所有的public方法包含父类、接口中继承来的public方法。java/*** getMethods()* */System.out.println();Arrays.asList(concreteClass.getMethods()).forEach(s - { System.out.println(public类型的方法: s); });输出public类型的方法:public void com.byron4j.hightLevel.reflection.ConcreteClass.method1()public类型的方法:public int com.byron4j.hightLevel.reflection.ConcreteClass.method2(java.lang.String)public类型的方法:public int com.byron4j.hightLevel.reflection.ConcreteClass.method4()public类型的方法:public int com.byron4j.hightLevel.reflection.ConcreteClass.method5(int)public类型的方法:public static int com.byron4j.hightLevel.reflection.BaseClass.method5()public类型的方法:public final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic类型的方法:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic类型的方法:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic类型的方法:public boolean java.lang.Object.equals(java.lang.Object)public类型的方法:public java.lang.String java.lang.Object.toString()public类型的方法:public native int java.lang.Object.hashCode()public类型的方法:public final native java.lang.Class java.lang.Object.getClass()public类型的方法:public final native void java.lang.Object.notify()public类型的方法:public final native void java.lang.Object.notifyAll()####获取class的所有public构造器getConstructors()方法能够获取所有的public类型构造器java/*** getConstructors()* */System.out.println();Arrays.asList(concreteClass.getConstructors()).forEach(s - { System.out.println(public类型的构造器: s); });输出 public类型的构造器:public com.byron4j.hightLevel.reflection.ConcreteClass(int)####获取所有的public属性(成员变量)getFields()方法可以获取所有的public属性。包含父类、接口中的属性。java/*** getFields()* */System.out.println();Arrays.asList(concreteClass.getFields()).forEach(s - { System.out.println(public类型的属性: s); });输出public类型的属性:public int com.byron4j.hightLevel.reflection.ConcreteClass.publicIntpublic类型的属性:public static final int com.byron4j.hightLevel.reflection.BaseInterface.interfaceIntpublic类型的属性:public int com.byron4j.hightLevel.reflection.BaseClass.baseInt####获取所有的注解getAnnotations()方法可以获取所有的注解。但是只有保留策略为**RUNTIME**的注解。我们给 类加上注解Deprecated。javaDeprecatedpublic class ConcreteClass extends BaseClass implements BaseInterface{...}//*** getAnnotations()* */System.out.println();Arrays.asList(concreteClass.getAnnotations()).forEach(s - { System.out.println(注解: s); });输出 注解:java.lang.Deprecated()##反射在属性(成员变量)中的应用反射API提供了几个方法可以在运行时分解类的成员变量以及设置其值。####获取public属性除了前面的getFields()方法能获取全部public属性之外还提供了一个获取指定属性名称的方法getField()。这个方法会在该class--接口--父类的顺序寻找指定的属性。**场景一**我们在ConcreteClass类、BaseClass类、BaseInterface接口分别增加一个属性public String name currClass---NAME;public String name superClass---NAME;public String name superInterface---NAME;javaSystem.out.println(concreteClass.getField(name));输出为public java.lang.String com.byron4j.hightLevel.reflection.ConcreteClass.name**场景二**我们在BaseClass类、BaseInterface接口分别增加一个属性public String name superClass---NAME;public String name superInterface---NAME;这时候获取的属性name是接口中的属性 public static final java.lang.String com.byron4j.hightLevel.reflection.BaseInterface.name**场景三**我们仅仅在BaseClass类增加一个属性public String name superClass---NAME;这时候获取的属性name是父类中的属性 public java.lang.String com.byron4j.hightLevel.reflection.BaseClass.name如果是获取不存在的属性则出现异常System.out.println(concreteClass.getField(hello));输出 java.lang.NoSuchFieldException: hello####获取声明属性的类型javatry {System.out.println( concreteClass.getField(interfaceInt).getDeclaringClass() );} catch (NoSuchFieldException | SecurityException e) {e.printStackTrace();}输出 interface com.byron4j.hightLevel.reflection.BaseInterface####获取属性的类型getType()方法返回属性的类型的class实例。System.out.println(concreteClass.getField(interfaceInt).getType().getCanonicalName());输出 int####Get/Set public类型的属性值Field.get(Object) 获取该属性的值。javaField field concreteClass.getField(publicInt);System.out.println(属性的类型field.getType());ConcreteClass obj new ConcreteClass(7);System.out.println(获取属性值 field.get(obj));field.set(obj, 77);System.out.println(获取属性值 field.get(obj));输出 属性的类型int获取属性值7获取属性值77Field.get()返回的是一个Object类型如果是原始类型则返回其包装类型。如果是final属性set() 方法抛出**java.lang.IllegalAccessException**。####Get/Set private类型的属性值java中在类之外是不能访问private变量的。但是通过反射可以关闭检查访问修饰符的机制。javaField privateField concreteClass.getDeclaredField(privateString);System.out.println(privateField.get(obj));输出不能访问private的属性 java.lang.IllegalAccessException: Class com.byron4j.hightLevel.reflection.ReflectionDemo2 can not access a member of class com.byron4j.hightLevel.reflection.ConcreteClass with modifiers private设置可访问机制Field.setAccessible(true);javaField privateField concreteClass.getDeclaredField(privateString);privateField.setAccessible(true);System.out.println(privateField.get(obj));privateField.set(obj, 新的私有属性值[value]);System.out.println(privateField.get(obj));输出 private string 新的私有属性值[value]##与方法相关的反射方法使用反射技术可以获得方法的信息以及调用执行它。我们来学习获得方法、调用方法并访问私有方法。####获得public方法我们可以使用 getMethod()方法获的public class的方法需要提供方法的名称、参数类型。如果class找不到指定的方法则会继续向上从其父类中查找。下面我们以一个获取HashMap 的put方法的例子来展示如何方法的参数类型、方法访问修饰符和返回类型。java/** 方法* */Class mapClass HashMap.class;Method mapPut mapClass.getMethod(put, Object.class, Object.class);//获取参数类型System.out.println(Arrays.toString(mapPut.getParameterTypes()));//获取返回类型System.out.println(mapPut.getReturnType());//访问修饰符System.out.println(Modifier.toString(mapPut.getModifiers()));输出 [class java.lang.Object, class java.lang.Object]class java.lang.Objectpublic####调用public方法可以利用Method.invoke() 方法调用指定的方法。java//调用方法Map map new HashMap();mapPut.invoke(map, key, val);System.out.println(map);输出 {keyval}####调用private方法我们可以使用getDeclaredMethod()方法获取私有方法然后关闭访问限制即可调用。java/*** 访问私有方法*/Method method3 BaseClass.class.getDeclaredMethod(method3, null);method3.setAccessible(true);//静态方法的调用对象可以传入nullmethod3.invoke(null, null);输出 Method3
http://wiki.neutronadmin.com/news/340434/

相关文章:

  • 购物网站的后台免费红色ppt模板下载
  • 网站服务器的费用番禺企业网站建设
  • 网站怎么做推广和宣传语seoul
  • 公司建设网站带来什么福州网站建设出格
  • 一个人做商城网站wordpress获取最新文章
  • 特价做网站17zwd一起做网店潮汕站
  • 增长超人网站建设价格四川省工程建设信息网
  • 怎么做一个网站页面oa软件多少钱一套
  • 个人网站可以做产品宣传吗泉州网红打卡景点
  • 地产商网站建设网站域名要实名认证吗
  • 什么网站可以做兼职赚钱吗无人在线观看视频高清视频
  • 网站建设制作软件叫啥专业的外贸网站
  • 网站建设进程方案度娘网站灯笼要咋做呢
  • 福建省建设工程执业注册管理中心网站软文价格
  • 青岛知名网站建设公司红色大气宽屏企业网站源码 带后台中英文双语外贸企业网站源码
  • 无形资产 网站建设时尚网页设计
  • 网站建设公司长沙相亲网站绑定微信怎么做
  • 长沙法律咨询网站设计开发手机怎么查看网站代码实现的
  • 百度网站优化 件打开网站弹出qq
  • 鄂州第一网官方网站wordpress 二维码登录
  • 怎么看网站使用什么做的台州地区网站建设
  • 设计师网站国外江西锐安建设工程有限公司网站
  • 郑州网站seo技术微信登录
  • 黑龙江新闻法治在线回放网站内容优化怎么去优化呢
  • 本地佛山企业网站建设电脑上多了个wordpress
  • 成都建站提供商网页响应式
  • 检察机关门户网站建设情况军事信息化建设网站
  • 公司的网站建设公司北京企业网页制作
  • 广州微网站建设平台做网站有什么好的推荐
  • 济南公司网站建设公司排名太原网站维护