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

网站开发甘特图wordpress sql 注入

网站开发甘特图,wordpress sql 注入,网站无法显示网页内容,wish跨境电商平台注解(Java.Annotation) 什么是注解#xff08;Annotation#xff09;#xff1f; Annotation是从JDK5.0开始引入的新技术 Annotation的作用: 不是程序本身#xff0c;可以对程序作出解释(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取Annotation的…注解(Java.Annotation) 什么是注解Annotation Annotation是从JDK5.0开始引入的新技术 Annotation的作用: 不是程序本身可以对程序作出解释(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取Annotation的格式︰ 注解是以注释名在代码中存在的还可以添加一些参数值例如:SuppressWarnings(valueunchecked)Annotation在哪里使用? 可以附加在package , class , method , field等上面相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问 内置注解 Override:定义在java.lang.Override中,此注释只适用于修辞方法表示一个方法声明打算重写超类中的另一个方法声明 表示方法声明旨在覆盖超类型中的方法声明。如果使用此注释类型注释方法则除非至少满足以下条件之一否则需要编译器生成错误消息: 该方法将覆盖或实现在超类型中声明的方法。该方法具有与Object中声明的任何公共方法的覆盖相同的签名。 / / Override重写的注解 Override public string toString() {//注意方法签名要一致如果改成Test01会报错      return super.toString(); } Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法属性类表示不鼓励程序员使用这样的元素通常是因为它很危险或者存在更好的选择 SuppressWarnings:定义在java.lang.SuppressWarnings中用来抑制编译时的警告信息与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用就好了﹒ SuppressWarnings(all)SuppressWarnings(unchecked)SuppressWarnings(value{unchecked ,deprecation})等等....... ------ 元注解 元注解的作用就是负责注解其他注解Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明 这些类型和它们所支持的类在java.lang.annotation包中可以找到(Target  RetentionDocumented  lnherited ) Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)Retention:表示需要在什么级别保存该注释信息用于描述注解的生命周期(SOURCE(源码时有效) CLASS (编译时有效) RUNTIME(运行时有效))Document:说明该注解将被包含在javadoc中Inherited:说明子类可以继承父类中的该注解 自定义注解 使用interface自定义注解时自动继承了java.lang.annotation.Annotation接口分析: interface用来声明一个注解格式:public interface注解名{定义内容}其中的每一个方法实际上是声明了一个配置参数方法的名称就是参数的名称返回值类型就是参数的类型返回值只能是基本类型,Class , String , enum )可以通过default来声明参数的默认值如果只有一个参数成员一般参数名为value注解元素必须要有值我们定义注解元素时经常使用空字符串0作为默认值   反射(Java.Reflection) 反射概述 Java的反射reflection机制是指在程序的运行状态中可以构造任意一个类的对象可以了解任意一个对象所属的类可以了解任意一个类的成员变量和方法可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键 静态VS 动态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python等。静态语言 与动态语言相对应的运行时结构不可变的语言就是静态语言。如Java、C、C。Java不是动态语言但Java可以称之为“准动态语言”。即Java有一定的动态性我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活! 获得反射对象  Java Reflection Reflection(反射是Java被视为动态语言的关键反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息并能直接操作任意对象的内部属性及方法。 加载完类之后在堆内存的方法区中就产生了一个Class类型的对象一个类只有一个Class对象这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子透过这个镜子看到类的结构所以我们形象的称之为:反射 Java反射机制提供的功能 在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时获取泛型信息在运行时调用任意一个对象的成员变量和方法在运行时处理注解生成动态代理........... Java反射优点和缺点 优点: 可以实现动态创建对象和编译体现出很大的灵活性缺点: 对性能有影响。使用反射基本上是一种解释操作我们可以告诉JVM我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。 反射相关的主要API java.lang.Class:代表一个类java.lang.reflect.Method:代表类的方法java.lang.reflect.Field:代表类的成员变量java.lang.reflect.Constructor:代表类的构造器............. Class类 在Object类中定义了以下的方法此方法将被所有子类继承以上的方法返回值的类型是一个Class类此类是Java反射的源头实际上所谓反射从程序的运行结果来看也很好理解即:可以通过对象反射求出类的名称。 对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言JRE 都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息。 Class本身也是一个类Class对象只能由系统建立对象一个加载的类在JVM中只会有一个Class实例一个Class对象对应的是一个加载到JVM中的一个.class文件每个类的实例都会记得自己是由哪个Class 实例所生成通过Class可以完整地得到一个类中的所有被加载的结构Class类是Reflection的根源针对任何你想动态加载、运行的类唯有先获得相应的Class对象 获得Class类的实例 a)若已知具体的类通过类的class属性获取该方法最为安全可靠程序性能最高。 Class clazz Person.class; b)已知某个类的实例调用该实例的getClass()方法获取Class对象 Class clazz person.getClass(); c)已知一个类的全类名且该类在类路径下可通过Class类的静态方法forName()获取可能抛出ClassNotFoundException异常 Class clazzClass.forName(demo01.Student); d)内置基本数据类型可以直接用类名.Type e)还可以利用ClassLoader我们之后讲解 //测试class类的创建方式有哪些public class Test03 {public static void main(String[] args) throws classNotFoundException {Person person new Student();System.out.println(这个人是:person.name) ;//方式一:通过对象获得Class c1 person.getClass( );//方式二 : forname获得Class c2 Class.forName ( com.kuang.reflection. Student);//方式三:通过类名.class获得Class c3 Student.class;//方式四∶基本内置类型的包装类都有一个Type属性Class c4 Integer.TYPE;//获得父类类型Class c5 c1.getSuperclass(); }class Person{public string name ;有参、无参、tostring...; } class Student extends Person{public Student(){this.name 学生;} } class Teacher extends Person{public Teacher(){this.name 老师;} } 哪些类型可以有Class对象? class:外部类成员(成员内部类静态内部类)局部内部类匿名内部类。interface:接口[]:数组enum:枚举annotation:注解interfaceprimitive type:基本数据类型void //所有类型的class public class Test04 {public static void main(string[] args) {Class c1 Object.class; //类Class c2 Comparable.class; //接口Class c3 String[].class;//一维数组Class c4 int[][].class;//二维数组Class c5 Override.class;//注解Class c6 ElementType.class;//枚举Class c7 Integer.class; //基本数据类型Class c8 void.class; //voidClass c9 Class.class;//ClassSystem.out.println(c1);System.out.println(c2);System.out.println(c3);System.out.println(c4); System.out.println(c5);System.out.println(c6);System.out.println(c7);System.out.println(c8);System.out.println(c9);//只要元素类型与维度一样,就是同一个class.int[] a new int[10];int[] b new int[100];System.out.println(a.getClass().hashCode());System.out.println(b.getClass().hashCode());} } 类的加载与ClassLoader的理解 加载:将class文件字节码内容加载到内存中并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象.链接:将Java类的二进制代码合并到JVM的运行状态之中的过程。 验证:确保加载的类信息符合JVM规范没有安全方面的问题准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段这些内存都将在方法区中进行分配。解析:虚拟机常量池内的符号引用常量名替换为直接引用地址)的过程。 初始化: 执行类构造器clinit()方法的过程。类构造器clinit()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的不是构造该类对象的构造器)。当初始化一个类的时候如果发现其父类还没有进行初始化则需要先触发其父类的初始化。虚拟机会保证一个类的clinit()方法在多线程环境中被正确加锁和同步。   public class Test05 {public static void main(string[] args) {A a new A();System.out.println(A.m);} } class A{static {System.out.println( A类静态代码块初始化);m 300;}static int m 100;public A() {System.out.println(A类的无参构造初始化);} }什么时候会发生类初始化? 类的主动引用(一定会发生类的初始化) 当虚拟机启动先初始化main方法所在的类new一个类的对象调用类的静态成员除了final常量)和静态方法使用java.lang.reflect包的方法对类进行反射调用当初始化一个类如果其父类没有被初始化则先会初始化它的父类 类的被动引用(不会发生类的初始化) 当访问一个静态域时只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量不会导致子类初始化通过数组定义类引用不会触发此类的初始化引用常量不会触发此类的初始化常量在链接阶段就存入调用类的常量池中了) //测试类什么时候会初始化 public class Test06 {static {System.out.println (Main类被加载);}public static void main(string[] args) {//主动引用Son son new Son();//结果一//反射也会产生主动引用Class.forName (com.kuang.reflection.Son);//结果一//不会产生类的引用的方法System.out.println(Son.b);//结果二Son[] array new Son[5];//结果三} }class Father{static int b 2 ;static {System.out.println(父类被加载);} } class son extends Father{static {System.out.println(子类被加载);m 300;} } 结果一 结果二结果三 获取运行时类的完整结构 通过反射获取运行时类的完整结构 Field字段、Method方法、Constructor构造器、Superclass父类、Interface接口、Annotation注解 实现的全部接口所继承的父类全部的构造器全部的方法全部的Field注解 //获得类的信息 public class Test{public static void main(String[] args) throws ClassNotFoundException {Class c1 Class.forName (com.kuang.reflection.User);//获得类的名字System.out.println(c1.getName()); //获得包名类名 System.out.println(c1.getSimpleName());//获得类名//获得类的属性Field[] fields c1.getFields(); //只能找到public属性fields c1.getDeclaredFields(); //找到全部的属性for (Field field : fields) {System.out.println(field);}//获得指定属性的值Field name c1.getDeclaredField(name);//获得类的方法Method[] methods c1.getMethods();//获得本类及其父类的全部public方法for (Method method : methods) {System.out.println(正常的:method);}methods c1.getDeclaredMethods();//获得本类的所有方法for (Method method : methods) {System.out.println(getDeclaredMethods: method);}//获得指定方法//重载Method getName c1.getMethod(getName,null);Method setName c1.getMethod(setName,String.class);System.out.println(getName);System.out.println(setName);//获得指定的构造器Constructor[] constructors c1.getConstructors();for(Constructor constructor : constructors) {System.out.println(constructor);}constructors c1.getDeclaredConstructors();for (constructor constructor : constructors){System.out.println(#constructor);}//获得指定的构造器Constructor declaredConstructor c1.getDeclaredConstrultor(String.class,int.class,int.class);System.out.println(指定: declaredConstructor);} }通过反射动态创建对象 有了Class对象,能做什么?创建类的对象:调用Class对象的newlnstance()方法 1类必须有一个无参数的构造器。2类的构造器的访问权限需要足够 思考?难道没有无参的构造器就不能创建对象了吗?只要在操作的时候明确的调用类中的构造器并将参数传递进去之后才可以实例化操作。 步骤如下: 1)通过Class类的getDeclaredConstructor(Class ... parameterTypes)取得本类的指定形参类型的构造器2)向构造器的形参中传递一个对象数组进去里面包含了构造器中所需的各个参数。3)通过Constructor实例化对象 调用指定的方法 通过反射调用类中的方法通过Method类完成。 通过Class类的getMethod(String name,Class...parameterTypes)方法取得一个Method对象并设置此方法操作时所需要的参数类型。之后使用Object invoke(Object obj, Object[] args)进行调用并向方法中传递要设置的obj对象的参数信息。 Object invoke(Object obj, Object ... args) Object对应原方法的返回值若原方法无返回值此过返回null若原方法若为静态方法此时形参Object obj可为null若原方法形参列表为空则Object[] args为null若原方法声明为private,则需要在调用此invoke()方法前显式调用方法对象的setAccessible(true)方法将可访问private的方法。 setAccessible Method和Field、Constructor对象都有setAccessible()方法。setAccessible作用是启动和禁用访问安全检查的开关。参数值为true则指示反射的对象在使用时应该取消Java语言访问检查。 提高反射的效率。如果代码中必须用反射而该句代码需要频繁的被调用那么请设置为true使得原本无法访问的私有成员也可以访问参数值为false则指示反射的对象应该实施Java语言访问检查 //获得class对象 Class c1 Class.forName (com.kuang.reflection.User); //构造一个对象 User user (User)c1.newInstance(); //本质是调用了类的无参构造器 //通过构造器创建对象 Constructor constructor c1.getDeclaredConstructor(String.class,int.class,int.class); User user2 (User)constructor.newInstance(JANE00118);//通过反射调用普通方法 User user3 (User)c1.newInstance(); //通过反射获取一个方法 Method setName c1.getDeclaredMethod(setName,String.class); //invoke :激活的意思 //对象,方法的值) setName.invoke(user3,dany); System.out.println(user3.getName());//通过反射操作属性 User user4 (User)c1.newInstance(); Field name c1.getDeclaredField(name);//不能直接操作私有属性我们需要关闭程序的安全检测属性或者方法的setAccessible(true) name.setAccessible(true); name.set(user4,Liming); System.out.println(user4.getName());反射操作泛型 Java采用泛型擦除的机制来引入泛型,Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换问题但是一旦编译完成,所有和泛型有关的类型全部擦除为了通过反射操作这些类型Java新增了ParameterizedType , GenericArrayType ,TypeVariable和 WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型ParameterizedType:表示一种参数化类型,比如CollectionStringGenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型TypeVariable:是各种类型变量的公共父接口WildcardType:代表一种通配符类型表达式 public class Test11 {//没有返回值public void test01(MapString,User mapListUser list){System.out.println(test01);}//有返回值public MapString,user test02(){System.out.println(test02);return null;}public static void main(String[] args) throws NoSuchMethodException {Method method Test11.class.getMethod(test01,Map.class,List.class);//获得泛型的参数类型Type[] genericParameterTypes method.getGenericParameterTypes();for (Type genericParameterType : genericParameterTypes){System.out.println( #genericParameterType);//泛型的参数类型是否是参数化类型if (genericParameterType instanceof ParameterizedType){//强转获得真实参数信息Type[] actualTypeArguments ((ParameterizedType) genericParameterType).getActualTypeArguments();for ( Type actualTypeArgument : actualTypeArguments) {System.out.println(actualTypeArgument);}}}method Test11.class.getMethod(test02,null) ;Type genericReturnType method.getGenericReturnType();if (genericReturnType instanceof ParameterizedType){Type[] actualTypeArguments ((ParameterizedType) genericReturnType). getActualTypeArguments();for (Type actualTypeArgument : actualTypeArguments) {System.out.println(actualTypeArgument);} }}} 反射操作注解 Tablekuang ( db_student) class student2{         Fieldkuang(columnName db_id, type int , length 10)         private int id;         Fieldkuang(columnName db_age, type int , length 10)         private int age;         Fieldkuang(columnName db_name, type varchar , length 3)         private String name; 有参无参、setget、tostring... } //类名的注解 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) interface Table{         String value(); }//属性的注解 Target(ElementType.FIELD) Retention(RetentionPolicy. RUNTIME) interface Field{         String columnName( );         String type();         int length( ); } //练习反射操作注解 public class Test{         public static void main(string[] args) throws classNotFoundException {                 Class c1 Class.forName ( com.reflection.student2);                 //通过反射获得注解                 Annotation[] annotations c1.getAnnotations();                 for (Annotation annotation : annotations) {                 System.out.println( annotation);                 //结果com.kuang.reflection.Tablekuang(valuedb_student)                 }                 //获得注解的value的值。                 Table table (Table)c1.getAnnotation(Table.class);                 String value table.value();                 System.out.println(value) ;                 //结果db_student                          //获得类字段指定的注解                 Field f c1.getDeclaredField(name ) ;                 Field annotation f.getAnnotation(Field.class);                 System.out.println(annotation.columnName());                 System.out.println(annotation.type());                 System.out.println(annotation.length() ); }
http://www.w-s-a.com/news/517785/

相关文章:

  • 重庆做网站公司贴吧廊坊公司快速建站
  • 海外贸易在什么网站做怎么排名到百度第一页
  • 线上注册公司是在哪个网站做高仿网站
  • 网站构架图网上推广平台哪个好
  • 公司网站首页图片素材vi设计的目的和意义
  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化
  • 网站随机代码网站建设费 账务处理
  • 商洛网站建设哪家好网站建设 织梦者
  • 怎么创建收费网站宁夏住房和城乡建设部网站
  • 怎么确认网站是什么语言做的用php和mysql做网站
  • 安徽做网站的公司有哪些星子网络公司
  • 肥西县重点工程建设管理局网站wordpress界面菜单怎么弄
  • 宁夏网站开发设计说明书wordpress主题背景图片
  • 同一个阿里云可以做两个网站吗织梦 帝国 学校网站
  • 城阳网站建设培训网站后台怎么上传文件
  • 重庆茂尔建设集团有限公司网站网页制作教程软件
  • 金湖建设工程质量监督网站高端网站建设公司哪里济南兴田德润实惠吗
  • 站酷设计网站官网入口文字设计seo网站推广工具
  • 专业移动网站建设网站建设软件dw
  • 摄影网站设计思想视觉传达毕业设计作品网站
  • 需要优化的网站有哪些设计装修app
  • 数据型网站建设东莞好的网站国外站建设价格
  • 网络营销方法有哪些举例seo应用领域有哪些
  • 建设银行官方网站官网做网站的专业叫什么
  • 矿区网站建设濮阳做网站的公司有哪些
  • 有什么网站可以自己做书甘肃建设厅网站首页
  • 门户网站建设哪专业怎么把自己做的网站登录到网上