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

营销网站seo推广费用柳州网站建设 来宾市网站制作

营销网站seo推广费用,柳州网站建设 来宾市网站制作,投资公司投资项目流程,外包软件开发1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法#xff0c;执行在所有方法之后 3.被Before标记的方法#xff0c;执行在每一个Test方法之前 4.被After标记的方法#xff0c;执行在每一个Test方法之后 public …1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法执行在所有方法之后 3.被Before标记的方法执行在每一个Test方法之前 4.被After标记的方法执行在每一个Test方法之后 public class StringUtilTest{Beforepublic void test1(){System.out.println(-- test1 Before 执行了);}BeforeClasspublic static void test11(){System.out.println(-- test11 BeforeClass 执行了);}Afterpublic void test2(){System.out.println(-- test2 After 执行了);}AfterCalsspublic static void test22(){System.out.println(-- test22 AfterCalss 执行了);} }2、反射 定义反射技术指的是加载类的字节码到内存并以编程的方法解刨出类中的各个成分成员变量、方法、构造器等 2.1、获得class对象字节码对象 由于Java的设计原则是万物皆对象获取到的类其实也是以对象的形式体现的叫字节码对象用Class类来表示。获取到字节码对象之后再通过字节码对象就可以获取到类的组成成分了这些组成成分其实也是对象其中每一个成员变量用Field类的对象来表示、每一个成员方法用Method类的对象来表示每一个构造器用Constructor类的对象来表示。 获取Class对象的三种方式 Class c1类名.class调用Class提供方法:public static Class forName(String package);Object提供的方法: public Class getClass();Class c3对象getClass(); 2.2 获取类的构造器 Class提供了从类中获取构造器的方法 方法 Constructor?[] getConstructors() 获取全部构造器(只能获取public修饰的) Constructor?[] getDeclaredConstructors() 获取全部构造器(只要存在就能拿到) ConstructorT getConstructor(Class?... parameterTypes) 获取某个构造器(只能获取public修饰的) ConstructorT getDeclaredConstructor(Class?... parameterTypes) 获取某个构造器(只要存在就能拿到)get:获取 Declared: 有这个单词表示可以获取任意一个没有这个单词表示只能获取一个public修饰的 Constructor: 构造方法的意思 后缀s: 表示可以获取多个没有后缀s只能获取一个2.3获取构造器的作用 获取类构造器的作用: 依然是初始化对象返回 Constructor提供的方法 T newInstance(Object... initargs)可以是有的任意参数数量调用此构造器对象表示的构遣器并传入参数完成对象的初始化并返回public void setAccessible(boolean flag) 设置为true表示禁止检查访问控制(暴力反射)2.4 反射获取成员变量使用 Class提供了从类中获取成员变量的方法 方法 public Field[] getFields() 获取类的全部成员变量(只能获取public修饰的) public Field[] getDeclaredFields() 获取类的全部成员变量(只要存在就能拿到) public Field getField(String name) 获取类的某个成员变量(只能获取public修饰的) public Field getDeclaredField(String name) 获取类的某个成员变量(只要存在就能拿到)获取到成员变量的作用: 依然是赋值、取值。 方法 void set(Object objobject value): 赋值需要传入对象不然不知道为哪个对象赋值 object get(Object obj) 取值 public void setAccessible(boolean flag) 设置为true表示禁止检查访问控制 (暴力反射)2.5成员方法的获取和取值 获取类的成员方法 Class提供了从类中获取成员方法的API。 方法 Method[] getMethods() 获取类的全部成员方法(只能获取public修饰的) Method[] getDeclaredMethods() 获取类的全部成员方法(只要存在就能拿到) Method getMethod(String name, Class?... parameterTypes) 获取类的某个成员方法(只能获取public修饰的) Method getDeclaredMethod(String name, Class?.. parameterTypes) 获取类的某个成员方法(只要存在就能拿到)成员方法的作用: 依然是执行 Method提供的方法 public Object invoke(Object objObject... args) 触发某个对象的该方法执行。 public void setAccessible(boolean flag) 设置为true表示禁止检查访问控制(暴力反射)public class Test3Method{ public static void main(String[] args){ //1、反射第一步先获取到Class对象 Class c Cat.class; //2、获取类中的全部成员方法Method[] methods c.getDecalaredMethods();//3、遍历这个数组中的每一个方法对象for(Method method : methods){System.out.println(method.getName()--method.getParameterCount()--method.getReturnType());}System.out.println(-----------------------);//4、获取private修饰的run方法得到Method对象Method run c.getDecalaredMethod(run);//执行run方法,在执行前需要取消权限检查Cat cat new Cat();run.setAccessible(true);Object rs1 run.invoke(cat);System.out.println(rs1)//5、获取private 修饰的eat(String name)方法得到Method对象Method eat c.getDeclaredMethod(eat,String.class);eat.setAccessible(true);Object rs2 eat.invoke(cat,鱼儿);System.out.println(rs2) }} 获取运行返回结果 2.6 反射的作用 反射使用来写框架的也就是不管输入的什么类型的对象我们都可以获取对应的class文件去做一些统一的处理。下面让我们写一个框架能够将任意一个对象的属性名和属性值写到文件中去。不管这个对象有多少个属性也不管这个对象的属性名是否相同。 1.先写好两个类一个Student类和Teacher类 2.写一个ObjectFrame类代表框本架在ObjectFrame类中定义一个saveObject(Object obj)方法用于将任意对象存到文件中去参数Object obj: 就表示要存入文件中的对象3.编写方法内部的代码往文件中存储对象的属性名和属性值1)参数obj对象中有哪些属性属性名是什么实现值是什么中有对象自己最清楚。2)接着就通过反射获取类的成员变量信息了变量名、变量值3)把变量名和变量值写到文件中去写一个ObjectFrame表示自己设计的框架代码如下图所示 public class ObjectFrame{public static void saveObject(Object obj) throws Exception{PrintStream ps new PrintStream(new FileOutputStream(模块名\\src\\data.txt,true));//1)参数obj对象中有哪些属性属性名是什么实现值是什么中有对象自己最清楚。//2)接着就通过反射获取类的成员变量信息了变量名、变量值Class c obj.getClass(); //获取字节码ps.println(---------class.getSimpleName()---------);Field[] fields c.getDeclaredFields(); //获取所有成员变量//3)把变量名和变量值写到文件中去for(Field field : fields){String name field.getName();Object value field.get(obj);ps.println(name);}ps.close();} }使用自己设计的框架往文件中写入Student对象的信息和Teacher对象的信息。 先准备好Student类和Teacher类 public class Student{private String name;private int age;private char sex;private double height;private String hobby; }public class Teacher{private String name;private double salary; }创建一个测试类在测试中类创建一个Student对象创建一个Teacher对象用ObjectFrame的方法把这两个对象所有的属性名和属性值写到文件中去。 public class Test5Frame{Testpublic void save() throws Exception{Student s1 new Student(黑马吴彦祖,45, 男, 185.3, 篮球冰球阅读);Teacher s2 new Teacher(播妞,999.9);ObjectFrame.save(s1);ObjectFrame.save(s2);} }最终结果是将不同类的信息保存至文件中 3注解的使用 注解是和反射一起使用的为了实现框架而服务。我们可以理解为JUnit这个注解一样告诉系统加了这个注解就会执行同样也和spring中定义bean的意思差不多可以通过注解知道系统中有哪些bean。 Java注解是代码中的特殊标记比如Override、Test等作用是让其他程序根据注解信息决定怎么执行该程序 3.1自定义注解的格式 public interface MyTest{String aaa();boolean bbb() default true; //default true 表示默认值为true,使用时可以不赋值。String[] ccc(); }注意注解的属性名如何是value的话并且只有value没有默认值使用注解时value名称可以省略。比如现在重新定义一个MyTest2注解 public interface MyTest2{String value(); //特殊属性} MyTest2(孙悟空) //等价于 MyTest2(value孙悟空)3.2注解本质是什么呢 1.MyTest1注解本质上是接口每一个注解接口都继承子Annotation接口 2.MyTest1注解中的属性本质上是抽象方法 3.MyTest1实际上是作为MyTest接口的实现类对象 4.MyTest1(aaa“孙悟空”,bbbfalse,ccc{“Python”,“前端”,“Java”})里面的属性值可以通过调用aaa()、bbb()、ccc()方法获取到 3.3元注解 元注解是修饰注解的注解 Target是用来声明注解只能用在那些位置比如类上、方法上、成员变量上等 Retetion是用来声明注解保留周期比如源代码时期、字节码时期、运行时期例如test的target就是typeretention就是Runtime 3.4 解析注解 1.如果注解在类上先获取类的字节码对象再获取类上的注解 2.如果注解在方法上先获取方法对象再获取方法上的注解 3.如果注解在成员变量上先获取成员变量对象再获取变量上的注解 总之注解在谁身上就先获取谁再用谁获取谁身上的注解public class AnnotationTest3{Testpublic void parseClass(){//1.先获取Class对象Class c Demo.class;//2.解析Demo类上的注解if(c.isAnnotationPresent(MyTest4.class)){//获取类上的MyTest4注解MyTest4 myTest4 (MyTest4)c.getDeclaredAnnotation(MyTest4.class);//获取MyTests4注解的属性值System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(myTest4.bbb());}}Testpublic void parseMethods(){//1.先获取Class对象Class c Demo.class;//2.解析Demo类中test1方法上的注解MyTest4注解Method m c.getDeclaredMethod(test1);if(m.isAnnotationPresent(MyTest4.class)){//获取方法上的MyTest4注解MyTest4 myTest4 (MyTest4)m.getDeclaredAnnotation(MyTest4.class);//获取MyTests4注解的属性值System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(myTest4.bbb());}} }上图为获取类和方法上的注解。 3.4 注解的应用场景-模拟Junit写一个测试框架 也就是将有注解的方法或者类进行特殊处理 public class AnnotationTest4{MyTestpublic void test1(){System.out.println(test1);}MyTestpublic void test2(){System.out.println(test2);}public void test3(){System.out.println(test2);}public static void main(String[] args){AnnotationTest4 a new AnnotationTest4();//1.先获取Class对象Class c AnnotationTest4.class;//2.解析AnnotationTest4类中所有的方法对象Method[] methods c.getDeclaredMethods();for(Method m: methods){//3.判断方法上是否有MyTest注解有就执行该方法if(m.isAnnotationPresent(MyTest.class)){m.invoke(a);}}} }4.动态代理 关键点接口申明代理的方法相当于把要做的抽象出来可以在proxy产生代理对象的时候作为参数2表示代理的样子是什么样子、工具类生成动态代理对象、Proxy类中的newInstamce产生代理对象、重写invoke方法可以实现回调函数 ProxyUtil工具类为BigStar对象生成代理对象public class ProxyUtil {public static Star createProxy(BigStar bigStar){/* newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h)参数1用于指定一个类加载器参数2指定生成的代理长什么样子也就是有哪些方法参数3用来指定生成的代理对象要干什么事情*/// Star starProxy ProxyUtil.createProxy(s);// starProxy.sing(好日子) starProxy.dance()Star starProxy (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{Star.class}, new InvocationHandler() {Override // 回调方法public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 代理对象要做的事情会在这里写代码if(method.getName().equals(sing)){System.out.println(准备话筒收钱20万);}else if(method.getName().equals(dance)){System.out.println(准备场地收钱1000万);}return method.invoke(bigStar, args);}});return starProxy;} }new proxyInstance(loader,class? [] interfaces,invocationhalder): 1、定义类加载器2、定义代理对象中应该有的方法可以有多个接口3、这个是定义代理对象应该做什么 public class ProxyUtil {public static UserService createProxy(UserService userService){UserService userServiceProxy (UserService) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{UserService.class}, new InvocationHandler() {Overridepublic Object invoke( Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals(login) || method.getName().equals(deleteUsers)||method.getName().equals(selectUsers)){//方法运行前记录毫秒值 long startTime System.currentTimeMillis();//执行方法Object rs method.invoke(userService, args);//执行方法后记录毫秒值long endTime System.currentTimeMillis();System.out.println(method.getName() 方法执行耗时 (endTime - startTime)/ 1000.0 s);return rs;}else {Object rs method.invoke(userService, args);return rs; }} });//返回代理对象return userServiceProxy;} }AOP的底层也是动态代理实现别的地方使用到的是mybatis中的延迟加载就是使用CGLIB动态代理来实现需要用到这个函数时采取执行搜索保存操作。
http://www.dnsts.com.cn/news/94715.html

相关文章:

  • 阜宁有做网站的吗微信app开发需要多少钱
  • 深圳专业建网站公司排行四川省查询建设人员注册证书网站
  • 怎么做网站优化 site牡丹江信息网0453免费发布信息
  • 选择郑州网站建设申请一家公司需要多少钱
  • 做网站 买空间惠州品牌网站建设
  • 网站开发需要书籍教育技术专业网站开发课程
  • 江阴做网站公司企业网站建设难吗
  • 长沙手机网站建设公司排名flash网站代做
  • 哈尔滨网站建设唯辛ls15227写html代码用什么软件
  • 企业名称自主申报2020站群seo系统
  • 提供免费主页空间的网站温州seo关键词优化
  • 任丘网站制作公司网架钢构公司
  • 广州微信网站建设公司哪家好鞍山贴吧
  • 专业制作外贸网站免费学校网站模板
  • 学院宣传网站建设简介企业宣传ppt模板
  • 地产设计网站它是企业整体
  • 网站前台后台模板wordpress小工具功能
  • 哪个做网站公司如何开心设计一个网站
  • wordpress 作者墙网站做整站做优化
  • 用cms创建自己带数据库的网站和在本机搭建网站运行平台的心得体会四川建设工程信息网官网
  • 免费发布产品信息的网站酒店找人做网站
  • 如何免费网站建设网站上用的字体
  • 如何本地搭建网站济南高新区建设局网站
  • 网站建设成立领导小组wordpress数据库合并
  • 企业网站优化电话全网营销推广方案
  • 品牌高端网站云盘网站如何做
  • 网站建设捌金手指专业8重庆专业微网站建设
  • 湛江网站建设招聘那家公司装修比较好
  • 个人网站,可以做淘宝客吗公司简介模板范文100字
  • 正规的合肥网站建设价格什么样的网站适合推广