day24学习总结

编程入门 行业动态 更新时间:2024-10-12 03:16:59

day24学习总结

day24学习总结

一、Junit

简介:

        Junit 是用来做局部测试的  局部测试可以快速找到bug

测试分类:

        黑盒测试:

                功能测试,按照需求来测试具体的功能  难度小

        白盒测试:

                测试开发工程师(测开), 编写自动化脚本代码  java或Python  难度较大

Junit使用步骤:

        1.导入Junit的jar包

        2.定义一个类

        3.在类中定义一个无返回值无参的方法

        4.在方法上加上注解@Test

jar包下载地址:/  需翻墙

测试代码:

package com.qf.test.test01;import org.junit.Test;public class Test01 {@Testpublic void showInfo(){System.out.println("将军金甲夜不脱");}
}

二、定时器

简介:

        开发中使用到定时器的场景:A.定时发送邮件 B.定时任务 C.定时更新文件中内容

使用步骤:

        1.定义一个类 继承 TimerTask类        

        2.实例化实现类任务对象

        3.实例化Timer对象  

        4.将任务对象提交到定时器对象中

定时器的概念:

        定时器是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次或者定期重复执行

        每个 Timer 对象相对应的是单个后台线程

        所有构造方法都启动计时器线程

常用的方法:

        

测试代码:

任务类

package com.qf.test.test02;import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.TimerTask;public class MyTimerTask extends TimerTask {@Overridepublic void run() {try {Writer w = new FileWriter("1.txt",true);w.write("班长去洗脚");w.close();} catch (IOException e) {e.printStackTrace();}}
}

 测试类:

package com.qf.test.test02;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;public class Test {public static void main(String[] args) throws ParseException {//实例化任务类MyTimerTask t = new MyTimerTask();//实例化定时器类Timer timer = new Timer();Scanner input = new Scanner(System.in);System.out.println("请输入一个时间");String line =input.nextLine();Date date=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(line);timer.schedule(t,date,10000);try {Thread.sleep(60000);} catch (InterruptedException e) {e.printStackTrace();}timer.cancel();}
}

三、反射

简介:

        1.大部分框架都会使用反射,反射是框架的灵魂  在java中所有的资源在反射面前都是裸体

        2.框架: 框架就是类似一个半成品  使用框架开发 成本低 周期短 省成本

        3.java就业::大数据与分布式框架

                分布式框架: 

                        a. ssm(spring+ spring mvc + mybatis) +dobbo

                        b. springboot + mybatisplus +dobbo(重点)

                         c. springboot+springcloud(重点) 

        4. 反射机制:将类的各个部分组成为一个新对象(Class对象)

              

获取Class对象的三种方式:

        A.调用对象的.getClass()方法

                public final Class getClass() 返回此 Object 的运行时类

        B.通过类名.Class获取

                        Student.Class

        C.通过完整的包名+类名来获取(重点)

                public static Class forName(String className)  

package com.qf.test04;
import org.junit.Test;
public class Test01 {@Testpublic void showInfo01() throws ClassNotFoundException {//第一种方式获取Class studentClass = Student.class;System.out.println(studentClass);//第二种方式Student stu= new Student();Class aClass = stu.getClass();System.out.println(aClass);//第三种方式Class cla = Class.forName("com.qf.test04.Student");System.out.println(cla);}
}

获取类对象的构造方法的方法:

测试代码:

学生类

package com.qf.test.test03;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}private Student(String name){System.out.println(name);}public int  show(int num1,int num2){return num1+num2;}public String show2(String s){return s;}private void  show3(){System.out.println("按摩");}
}

 测试类:

package com.qf.test.test03;import org.junit.Test;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class Test01 {/*** 获取所有公有的构造方法* @throws ClassNotFoundException*/@Testpublic void shouInfo() throws ClassNotFoundException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取所有的公有的构造方法Constructor<?>[] constructors = name.getConstructors();//循环遍历for (Constructor con : constructors){System.out.println(con);}}/*** 获取所有的构造方法  包括公有和私有* @throws ClassNotFoundException*/@Testpublic void shouInfo02() throws ClassNotFoundException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取所有的的构造方法,包括私有和公有Constructor<?>[] declaredConstructors = name.getDeclaredConstructors();//循环遍历for (Constructor con : declaredConstructors){System.out.println(con);}}/*** 获取单个公有构造方法 并实例化对象  调用公有的方法* @throws ClassNotFoundException* @throws IllegalAccessException* @throws InvocationTargetException* @throws InstantiationException* @throws NoSuchMethodException*/@Testpublic void shouInfo03() throws ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取单个公有的构造方法Constructor<?> constructor = name.getConstructor();//实例化对象Student s = (Student)constructor.newInstance();int a = s.show(1,2);System.out.println(a);}/*** 获取单个私有的构造方法  并实例化对象  调用公有的方法* @throws ClassNotFoundException* @throws NoSuchMethodException* @throws IllegalAccessException* @throws InvocationTargetException* @throws InstantiationException*/@Testpublic void shouInfo04() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取单个私有的构造方法    构造方法中需要传入参数  就得写 参数的类对象Constructor<?> declaredConstructor = name.getDeclaredConstructor(String.class, int.class);//使用反射暴力去除私有declaredConstructor.setAccessible(true);//实例化对象Student s = (Student)declaredConstructor.newInstance("班长", 21);//调用方法String ss =s.show2("洗脚");System.out.println(ss);}}

获取类对象的成员方法的方法:

 

测试代码:

@Testpublic void show() throws ClassNotFoundException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取所有公有的成员方法 包括父类的成员方法Method[] methods = name.getMethods();//循环遍历for (Method m :methods){System.out.println(m);}}@Testpublic void show2() throws ClassNotFoundException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取所有的成员方法 包括私有的成员方法Method[] declaredMethods = name.getDeclaredMethods();//循环遍历for (Method m : declaredMethods){System.out.println(m);}}@Testpublic void show3() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取单个公有的成员方法Method show2 = name.getMethod("show2", String.class);//获取构造方法Constructor<?> constructor = name.getConstructor();//实例化对象Object o = constructor.newInstance();//调用用方法Object s = show2.invoke(o, "班长洗脚");System.out.println(s);}@Testpublic void show4() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {//获取Class对象Class<?> name = Class.forName("com.qf.test.test03.Student");//获取单个私有的成员方法Method show3 = name.getDeclaredMethod("show3");//使用暴力反射去取私有show3.setAccessible(true);//获取构造方法Constructor<?> constructor = name.getConstructor();//实例化对象Object o = constructor.newInstance();//调用方法show3.invoke(o);}

 四、案例(易)

需求:使用反射忽略集合泛型

分析:

        

代码:

package com.qf.test.test04;import org.junit.Test;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;public class Test01 {@Testpublic void show() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {List<String > li = new ArrayList<>();li.add("班长");li.add("去按摩");System.out.println(li);//获取Class对象Class liClass = li.getClass();//获取单个方法Method method = liClass.getMethod("add", Object.class);//调用方法method.invoke(li,12);System.out.println(li);}
}

五、案例(难)

需求:在不改变任何java代码的前提 调用一个类中任意的方法

分析:

 

代码:

配置文件:

className=com.qf.test.test05.Person
methodName=show2
kind=String,int,String
result=banzhang,21,anmo

工具类:

package com.qf.test.test05;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public enum  PropertiesUtils {PROPERTIES_UTILS;private Properties pro;PropertiesUtils(){try {//加载配置文件InputStream is = PropertiesUtils.class.getResourceAsStream("1.properties");//实例化Properties对象pro = new Properties();//将数据从文件中读取pro.load(is);} catch (IOException e) {e.printStackTrace();}}//获取值的方法public String getValue(String key){return pro.getProperty(key);}
}

 

Person类:

package com.qf.test.test05;public class Person {private String name;private int age;private String hobby;public Person() {}public Person(String name, int age, String hobby) {this.name = name;this.age = age;this.hobby = hobby;}public void show1(){System.out.println("班长洗脚");}public void show2(String name,int age,String paly){System.out.println(name+"\t"+age+"\t"+paly);}private void show3(){System.out.println("班长按摩");}private void show4(String name,int age){System.out.println(name+"\t"+age);}
}

 测试类:

package com.qf.test.test05;import org.junit.Test;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;public class Test01 {@Testpublic void show() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException, ClassNotFoundException {//获取完整包名+类名String className = PropertiesUtils.PROPERTIES_UTILS.getValue("className");//获取方法名String methodName = PropertiesUtils.PROPERTIES_UTILS.getValue("methodName");//获取参数数据类型String kind = PropertiesUtils.PROPERTIES_UTILS.getValue("kind");//获取具体参数String result = PropertiesUtils.PROPERTIES_UTILS.getValue("result");//获取Class对象Class<?> name = Class.forName(className);//创建一个对象Object o = name.newInstance();//获取参数类型Class[] classes = getKind(kind);//获取参数值Object[] reuslt = getReuslt(kind, result);//获取方法Method m = null;//如果方法没有参数if (classes==null){//获取方法m = name.getMethod(methodName);//调用方法m.invoke(o);}else {//获取方法m = name.getMethod(methodName,classes);//调用方法m.invoke(o,reuslt);}}//获取方法参数类型public Class[] getKind(String s){//验证参数类型是否为空if (s==null||s.equals("")){//返回空return null;}//若不为空//以逗号分隔String[] s1 = s.split(",");List<Class> list = new ArrayList<>();for (String s2 :s1){if (s2.equals("String")){list.add(String.class);}else if (s2.equals("int")){list.add(int.class);}else {list.add(Object.class);}}//将集合转换为数组return list.toArray(new Class[list.size()]);}//获取方法参数具体值public Object[] getReuslt(String s,String s1){//验证参数是否为空if (s==null||s.equals("")||s1==null||s1.equals("")){//返回空return null;}//若不为空//以逗号进行分隔String[] split = s.split(",");String[] split1 = s1.split(",");//实例化一个集合存储参数List<Object> list = new ArrayList<>();for (int i=0;i<split.length;i++){if (split[i].equals("String")){list.add(split1[i]);}else if (split[i].equals("int")){list.add(Integer.parseInt(split1[i]));}else {list.add((Object) split1[i]);}}return list.toArray(new Object[list.size()]);}
}

更多推荐

day24学习总结

本文发布于:2024-02-06 18:49:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750906.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!