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

该去哪里购买网站域名和空间word 添加 wordpress

该去哪里购买网站域名和空间,word 添加 wordpress,网站建设不备案后果,jsp环保主题网站代做1 Junit 黑盒测试#xff1a;不需要写代码#xff0c;给输入值#xff0c;看程序输出是否符合期望 白盒测试#xff1a;需要写代码#xff0c;关注程序具体的执行流程 Junit — 白盒测试 步骤 定义一个测试类#xff08;测试用例#xff09; 【命名#xff1a;类…1 Junit 黑盒测试不需要写代码给输入值看程序输出是否符合期望 白盒测试需要写代码关注程序具体的执行流程 Junit — 白盒测试 步骤 定义一个测试类测试用例 【命名类名Test】【包名xxx.xx.xx.test】定义测试方法可以独立运行 【命名test测试的方法】【返回值void】【参数列表空参】给方法加注解Test导入Junit的依赖环境 判断结果 5. 断言Assert.assertEquals(expected,result); 6. 红失败绿成功 Before注解所有测试方法前会先执行初始化申请资源方法可以用 After注解所有测试方法执行后执行释放资源方法可以用 2 反射 反射框架设计的灵魂将类的各个组成成分 框架半成品软件可以在框架的基础上进行软件的开发简化编码 Java代码在计算机中经历的三个阶段 Java文件 — Javac编译 —class文件【Source源代码阶段】 — 类加载器Class.Loader — Class类对象 【Class类对象阶段】— 创建对象 — Xxxx对象 【Runtime运行时阶段】 反射的好处 在程序运行过程中操作这些对象可以解耦提高程序的可扩展性 获取字节码Class对象的三种方式 Class.forName(“全类名”)将字节码文件加载进内存返回class对象类型.class通过类名的属性class获取对象.getClass() :getClass()方法在Object类中定义着 public static void main(String[] args) throws ClassNotFoundException {//1. Class.forName(全类名)将字节码文件加载进内存返回class对象Class cls Class.forName(reflect.Person);System.out.println(cls);//2. 类型.class通过类名的属性class获取Class cls2 Person.class;System.out.println(cls2);//3. 对象.getClass() :getClass()方法在Object类中定义着Class cls3 new Person().getClass();System.out.println(cls3);System.out.println(cls cls2);//trueSystem.out.println(cls cls3);//true}同一个字节码文件**.class文件在一次程序运行中只会被加载一次无论通过哪一种方式获取的Class对象都是同一个。 方法1多用于配置文件将类名定义在配置文件中读取文件加载类 方法2多用于参数的传递 方法3多用于对象的获取字节码的方式 class对象的功能 获取成员变量们 public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {Class cls Person.class;Field[] fields cls.getFields();//获取所有public修饰的成员变量System.out.println(Arrays.toString(fields));Field school cls.getField(school);//获取指定的public修饰的成员变量System.out.println(school);Person p new Person();//获取成员变量school的值Object o school.get(p);System.out.println(o);//null//设置成员变量school的值school.set(p,张三小学);System.out.println(p);//Person{namenull, age0, school张三小学}Field[] declaredFields cls.getDeclaredFields();//获取所有的成员变量for(Field field: declaredFields){System.out.println(field);}//获取私有成员变量的值Field name cls.getDeclaredField(name);//获取指定的成员变量//访问私有成员前 要忽略访问权限修饰符的安全检查name.setAccessible(true);//暴力反射Object o1 name.get(p);System.out.println(o1);//null}获取构造方法们 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {Class cls Person.class;//全参构造Constructor constructor cls.getConstructor(String.class, int.class);System.out.println(constructor);//创建对象Object obj constructor.newInstance(张三, 19);System.out.println(obj);//空参构造Constructor constructor2 cls.getConstructor();System.out.println(constructor2);Object obj2 constructor2.newInstance();System.out.println(obj2);//空参构造一般用这个 简化版Object obj3 cls.newInstance();System.out.println(obj3);}获取成员方方法们 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {Class cls Person.class;//eat方法为空参Method eat cls.getMethod(eat);Person p new Person();//执行方法eat.invoke(p);//eat方法中有一个String类型的参数Method eat2 cls.getMethod(eat, String.class);eat2.invoke(p, food);//获取所有public修饰的方法Method[] methods cls.getMethods();for(Method m : methods){System.out.println(m.getName());//除了类自己的方法Object的方法也存在其中}}获取类名 获取的是全类名 public static void main(String[] args) {Class cls Person.class;String name cls.getName();System.out.println(name);//reflect.Person}案例框架类 在不改变该类的任何代码的前提下可以帮助我们创建任意类的对象并执行任意方法 实现1. 配置文件 2.反射 步骤 将需要创建的对象的全类名和需要执行的方法定义在配置文件中在程序中加载读取配置文件使用反射技术来加载类文件进内存创建对象执行方法 创建配置文件 xxx.properties 修改配置文件就可以选择使用的类和方法 classNamereflect.Student//全类名 methodNamelearnpublic class ReflectTest {//在不改变该类的任何代码的前提下可以帮助我们创建任意类的对象并执行任意方法public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {//1.加载配置文件//1.1创建Properties对象Properties pro new Properties();//1.2加载配置文件转换为一个集合//1.2.1获取class目录下的配置文件ClassLoader classLoader ReflectTest.class.getClassLoader();InputStream is classLoader.getResourceAsStream(pro.properties);pro.load(is);//2.获取配置文件中定义的数据String className pro.getProperty(className);String methodName pro.getProperty(methodName);//3.加载该类进内存Class cls Class.forName(className);//4.创建对象Object obj cls.newInstance();//5.获取方法对象Method method cls.getMethod(methodName);//6.执行方法method.invoke(obj);} }运行执行的是配置文件里对应的类和类的方法 3 注解 定义Annotation也叫元数据一种代码级别的说明JDK1.5后的新特性与类、接口、枚举在同一层子可以声明在包、类、字段、方法、局部变量和方法参数等前面用来对这些元素进行说明注释。 概念JDK1.5之后的新特性用来说明程序 作用分类 编译检查让编译器实现基本的编译检查 【Override FunctionalInterface】代码分析通过代码标识的注解对代码进行分析【使用反射】编写文档通过代码表示的注解生产文档【javadoc文档】 JDK的内置注解 Override检测被该注解标注的方法是否是继承自父类/父接口的Deprecated将该注解标注的内容表示已过时SuppressWarnings 压制警告 SuppressWarnings(“all”)写在类上方 自定义注解 格式 元注解 public interface 注解名称{} 注解的本质是一个接口 默认继承自Annotation接口 public interface javadoc.MyAnno extends java.lang.annotation.Annotation {} 注解的属性接口中的抽象方法 要求 属性的返回值类型有【基本数据类型 String 枚举 注解 以上类型的数组】不可以为自定义类和void。定义了属性在使用时需要给属性赋值。如果在定义时分号前写上default “默认值”可以不赋值如果只有一个属性需要赋值并且属性的名称是value则value可以省略直接定义。 元注解用来描述注解的注解 Target描述注解能够作用的位置 ElementType的取值 TYPE可以作用于类上 METHOD可以作用于方法上 FILED可以作用于成员变量上 Target(value ElementType.TYPE)Retention描述注解被保留的阶段 RetentionPolicy的取值 RUNTIME当前被描述的注解会保留到class字节码文件中并被JVM读取到。 CLASS SOURCE Retention(RetentionPolicy.RUNTIME)Documented描述注解是否被抽取到api文档中Inherited描述注解是否被子类继承 解析注解 获取注解定义的位置对象Class, Method, Field获取指定的注解getAnnotation(Class) Pro annotation reflectTestClass.getAnnotation(Pro.class);调用注解中的抽象方法来获取配置的属性值 定义注解 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface Pro {String className();String methodName(); }自定义类 public class Demo01 {public void show(){System.out.println(demo1...show);} }定义框架类 Pro(className reflect.Demo01,methodName show) public class ReflectTest {//在不改变该类的任何代码的前提下可以帮助我们创建任意类的对象并执行任意方法public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {//1.解析注解//1.1 获取该类的字节码文件对象ClassReflectTest reflectTestClass ReflectTest.class;//2.获取注解对象,在内存中生产了一个该注解接口的子类实现对象/*public class ProImpl implements Pro{public String className(){return reflect.Demo01;}public String methodName(){return show;}}*/Pro annotation reflectTestClass.getAnnotation(Pro.class);//3.调用注解对象中定义的抽象方法获取返回值String className annotation.className();String methodName annotation.methodName();System.out.println(className);System.out.println(methodName);//4.加载类进内存Class cls Class.forName(className);//5.创建对象Object obj cls.newInstance();//6.获取方法对象Method method cls.getMethod(methodName);method.invoke(obj);} }注解案例简单的测试框架 定义Check注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface Check { }定义类 package demo;public class Calculator {//加法Checkpublic void add(){String str null;str.toString();System.out.println(1 0 (1 0));}//减法Checkpublic void sub(){System.out.println(1 - 0 (1 - 0));}//乘法Checkpublic void mul(){System.out.println(1 * 0 (1 * 0));}//除法Checkpublic void div(){System.out.println(1 / 0 (1 / 0));}public void show(){System.out.println(no bug...);} }测试类-解析程序 public class TestCheck {public static void main(String[] args) throws IOException {//1.创建计算器对象Calculator c new Calculator();//2.获取字节码文件对象Class cls c.getClass();//3.获取所有方法Method[] methods cls.getMethods();BufferedWriter bw new BufferedWriter(new FileWriter(bug.txt));//4.判断方法上是否有check注解int num 0;for(Method method: methods){if(method.isAnnotationPresent(Check.class)){//5.有就执行方法try{method.invoke(c);//6.捕获异常}catch (Exception e){num;bw.write(method.getName()方法出异常了);bw.newLine();bw.write(异常的名称 e.getCause().getClass().getSimpleName());bw.newLine();bw.write(异常的原因e.getCause().getMessage());bw.newLine();bw.write(-----------------------------);bw.newLine();}}}bw.write(本次测试一共出现了num次异常);bw.flush();bw.close();} }bug.txt文件 add方法出异常了 异常的名称NullPointerException 异常的原因null ----------------------------- div方法出异常了 异常的名称ArithmeticException 异常的原因/ by zero ----------------------------- 本次测试一共出现了2次异常 4 小结 大多数时候我们会使用注解而不是自定义注解注解是给编译器和解析程序用的注解不是程序的一部分
http://www.yutouwan.com/news/66088/

相关文章:

  • 绵阳网站建设100jvwordpress主题免费中文版
  • 眉山做网站襄阳住房和城乡建设网站
  • 泰州做网站哪家好悬赏做海报的网站
  • 网站建设实习收获手机网站网址申请
  • 网站建设一般分为几个步骤设计网站猪八戒
  • 怎么做免流网站如何设计一个简单网页
  • 货源网站不愁销路的小型加工厂项目年入百万
  • 重庆seo和网络推广宁波seo整体优化公司
  • 求个网站谢谢wordpress帮助中心模板
  • 织梦网站 伪静态手机商城网站制作
  • 腾讯建设网站视频视频视频godaddy服务器做网站
  • linux网站如何做ip解析深圳网络推广网站推广
  • 民治网站设计圳网站建设公司精准客源app
  • 建站模板招募设计师广州网站建设公司哪家服务好
  • 合肥网站制作公司开鲁网站seo免费版
  • 不知此网站枉做男人的网站合肥公共资源交易中心
  • 台州网站建设公司威海外贸建站
  • c 转网站开发wordpress login 图标
  • 关于集团网站建设请示360地图下载最新版
  • 网站做镜像是什么泰安钢管网站建设
  • 网站开发毕业设计说明花钱也可以哪些网站可以做推广广告
  • 深圳做网站收费品牌网站建设荐选蝌蚪
  • 网站开发工具最适合网站建设制作介绍河南
  • 自助建站系统网站建设系统网站建设网站建设wordpress主题列表封面
  • 百度推广智能网站wordpress码农主题
  • 手机网站设计与规划郑州seo优化外包顾问
  • 网站建设多少钱印刷企业网站模板
  • 合肥网站建设 乐云seo国外网站需要备案吗
  • 模特公司网站模板珠海建网站设计
  • 内蒙古高等级公路建设开发有限责任公司网站wordpress默认账号密码忘记