标签:val 申请 strong stc ati 数列 types 苹果 writer
public class CalculatorTest { /* 测试add方法 */ @Test public void testAdd(){ //System.out.println("我被执行了"); /* * 1.创建计算器对象 * 2.调用add方法 * */ Calculator c = new Calculator(); int result = c.add(1, 2); System.out.println(result); //无意义,如果是写成了减法依旧测试成功 //3.断言 结果为3 Assert.assertEquals(4,result); } }
public class CalculatorTest { /* * 初始化方法 * 用于资源申请,所有测试方法在执行之前都会先执行该方法 * */ @Before public void init(){ System.out.println("init...已被执行"); } /* * 释放资源的方法 * 在所有测试方法执行完后都会自动执行该方法 * */ @After public void close(){ System.out.println("close"); } }
public class DemoReflect { public static void main(String[] args) throws Exception { //第一种方式 Class.forName Class cls1 = Class.forName("basicpart.day01.FaceObj.Zi"); System.out.println(cls1); //第二种方式 类名.class Class cls2 = Zi.class; System.out.println(cls2); //第三种方式 对象.getClass Zi zi = new Zi(); Class cls3 = zi.getClass(); System.out.println(cls3); System.out.println(cls1==cls2); } }
public class DemoReflect { public static void main(String[] args) throws Exception { //获取一个字节码对象 Class<Person> personClass = Person.class; //获取指定的成员变量对象 Field field = personClass.getField("name"); //创建一个对象 Person p = new Person(); //获取值 Object value = field.get(p); System.out.println(value); //设置值 field.set(p,"chris"); System.out.println(p); } }
Field age = personClass.getDeclaredField("age"); //在访问之前需要先忽略权限访问修饰符 age.setAccessible(true);//暴力反射 Object value2 = age.get(p); System.out.println(value2);
public class Demo2 { public static void main(String[] args) throws Exception { //构造器的使用 Class<Person> personClass = Person.class; Constructor<Person> constructor = personClass.getConstructor(String.class, int.class); //创建对象 Person chris = constructor.newInstance("chris", 21); System.out.println(chris); //空参创建 Person person = personClass.newInstance(); } }
public class Demo2 { public static void main(String[] args) throws Exception { Class<Person> personClass = Person.class; //获取方法对象 Method eat_method = personClass.getMethod("eat"); //执行无参方法 //先创建确定的对象 Person p = new Person(); eat_method.invoke(p); //执行有参的fangfa Method eat_method2 = personClass.getMethod("eat", String.class); eat_method2.invoke(p,"苹果"); } }
/* * 框架类 * */ public class DemoStruct { public static void main(String[] args) throws Exception { //可以创建任意类的对象,可以执行任意方法 /* 不能改变该类的任何代码,可以创建任意类的对象,执行任意方法 */ //1.加载配置文件 //1.1创建Properties对象 Properties pro = new Properties(); //1.2加载配置文件,转换为一个集合 //1.2.1获取class目录下的配置文件 ClassLoader classLoader = DemoStruct.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); } }
/** * javadoc文档 * @author chris * @since jdk1.5 * @version 1.0 */ public class annotation { /** * 文档注释 * @param a 整数 * @param b 整数 * @return 两数的和 */ public int add(int a , int b){ return a + b ; } }
@SuppressWarnings("all") //压制了该类右侧的所有警告 public class annoDemo2 { @Override public String toString() { return super.toString(); } @Deprecated public void show1(){ //有缺陷 } public void show2(){ //替代show1方法 } }
/* * 框架类 * */ @ProAnno(ClassName = "JavaWeb.reflect.Person", MethodName = "eat") public class AnnoComple { public static void main(String[] args) throws Exception { //可以创建任意类的对象,可以执行任意方法 /* 不能改变该类的任何代码,可以创建任意类的对象,执行任意方法 */ //1.解析注解 //1.1获取注解定义的该类的字节码文件对象 本类 Class<AnnoComple> annoCompleClass = AnnoComple.class; //2.获取上边的注解对象 //其实就是在内存中生成了该注解接口的子类实现对象,方法中的返回值就是刚刚定义的值 ProAnno an = annoCompleClass.getAnnotation(ProAnno.class); //3.调用注解对象定义的抽象方法来获取返回值 String className = an.ClassName(); String methodName = an.MethodName(); System.out.println(className); System.out.println(methodName); //3.加载该类进内存 Class cls = Class.forName(className); //4.创建对象 Object obj = cls.newInstance(); //5.获取方法对象 Method method = cls.getMethod(methodName); //6.执行方法 method.invoke(obj); } }
@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Check { }
/* 简单的测试框架 当主方法执行后,会自动执行被检测的所有方法(加了check注解的方法),判断方法是否有异常,记录到文件中 */ 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(); int number = 0; //记录异常的次数 BufferedWriter bw = new BufferedWriter(new FileWriter("bug.txt")); for (Method method : methods) { //4.判断方法上是否有check注解 if (method.isAnnotationPresent(Check.class)) { //5.有的话就执行 try { method.invoke(c); } catch (Exception e) { //6.捕获异常 记录到文件中 number++; 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("本次测试一共出现了"+number+"次异常"); bw.flush(); bw.close(); } }
public class Calculator { //加法 @Check public void add(){ System.out.println("1 + 0 = " + (1 + 0)); } @Check //减法 public void sub(){ System.out.println("1 - 0 = " + (1 - 0)); } @Check //除法 public void div(){ System.out.println("1 / 0 = " + (1 / 0)); } public void show(){ System.out.println("永无bug . . ."); } }
标签:val 申请 strong stc ati 数列 types 苹果 writer
原文地址:https://www.cnblogs.com/caixiaowu/p/12929032.html