• 反射


    java中的==和equals
     
    == 比较引用
    equals  默认比较引用
     
    Collection 
       List   按照索引  .add(int index,Object o) .get(int index)
       Set    元素不重复,   .add("123")  .add("123");
               TreeSet    会将存放的元素自动排序
     
    Map 
     
      .put(Object key,Object value)
      .get(Object key)
     
      Map m1 = new HashMap();
     
      m1.add("1",u1);     map以一个键值对的方式储存。
      m1.add("1",u2);
     
     
         Set st = new HashSet();
               System.out.println(st.size());     -------0
               
               st.add("123");
               st.add("123");
               System.out.println(st.size());     --------1
     
     
    1、什么是反射机制?
       java.lang.reflect.****中的一组类。
          序可以访问,检测和修改自身状态和行为的一种机制。
          同时还能够根据自身的状态和行为修改和调整应用中所
       描述的的一种机制。  
           案例:玉米-----说我还是玉米
                 被吃了---转化---能量
       在java中有时候就需要知道类本身的状态。
       状态:String s="1";----1.txt中
             s的状态是什么?---1
        类在运行时:jvm---二进制,字节码
          反射非常的强大,可以创造非常灵活的代码。
       使用不当,会增加成本.
          泛型:E----->
               Class---->
       类本身的一种自省机制.
       案例:特种兵-------X档案------
     
    2、反射的作用?
          .java------>.class
       1、反编译------》.class---.java
       2、可以通过反射机制访问类的属性,方法和构造器等。
     
    3、怎么实现?
       每个类在运行时都会创建一个对应的Class文件。
    StringBufer和String的区别:
    StingBuffer不会产生新对象
       第一步:得到Class
              s.getClass();
              Student.class.Instance;
              Class.forName().newInstance();
     
    /**
    *反射
    */
    pubic class Test{
         public static void main(String[ ] args){
              String s = "1";
              Class c = s.getClass();     //实例化
              System.out.println(c.getName());     //得到类名
              System.out.println(c.getPacage());     //得到修饰符的详细信息
         }
    }
     
     
     
     
     
       案例1:将一个对象利用反射机制,转成json字符串
              Student stu=new Student("".....);
     
    //bean文件
    public class Student{
         private String stu_id;
    }
     
    /**
    *利用反射机制将一个既定的对象转化成json
    */
    pubic class Test{
         public static void main(String[ ] args){
              //{"stu_id":"1001","":""}
              Student sytu = new Student("1001","赵四","1","22","","");
              //得到class文件
              Class clz = stu.getClass();
              //得到类中所有声明的方法
              Method[ ]  methods = clz.getDeclaredMeghods();
              //遍历得到所需要的方法名称,然后截取所需要的字段
              String attrName="";
              String attrValue="";
              StringBuffer sbf = new StringBuffer("");
              sbf.append("{");
              for(Method ms : methods){
                      if(ms.getModifiers()==Modifieer.PUBLIC&&ms.startsWith("get")) {   //只取得get方法
                      attrNmae = ms.getName().substring(3).totLowerCase();
                     try{
                        //得到属性值(动态调用obj对象的method方法)****!!!!!!!!!!!!!!!*****
                        attrValue = (String)ms.invoke(stu);
                        }catch(){
     
                        }
                    if(k!=0){
                        abf.append(",");
                   }
                   }               
                    sbf.append("'");  
                    //sbf.append(""");       //------转义双引号
        sbf.append(attrName);
        sbf.append("'");
        sbf.append(":");
        sbf.append("'");
        sbf.append(attrVlaue);
        sbf.append("'");
        K++;
              }
              sbf.append{"}"};
     
         }
    }
     
    /**
    *将集合转化成JSON字符串
    */
    public class ObjectChangeJSON{
    //将集合转化成JSON字符串
    public String list2SON(List list){
         StringBuffer sbf = new StringBuffer("");
         sbf.append("[");
         for(int i = 0;i<list.size();i++){
              if(i!=0){
                   sbf.append(",");
              }
              sbf.appef(obj2JSON(lsit.get(i)));         
         }
     sbf.append("]");
    return sbf.toString;
    }
     
    //将对象转化成json字符串
         publcString objeJSON(Object obj){
              //{"stu_id":"1001","":""}
              //Student sytu = new Student("1001","赵四","1","22","","");
              //得到class文件
              Class clz = obj.getClass();
              //得到类中所有声明的方法
              Method[ ]  methids = clz.getDeclaredMeghods();
              //遍历得到所需要的方法名称,然后截取所需要的字段
              String attrName="";
              String attrValue="";
              StringBuffer sbf = new StringBuffer("");
              sbf.append("{");
              for(Method ms : methods){
     
     
                      if(ms.getModifiers()==Modifieer.PUBLIC&&ms.startsWith("get")) {   //只取得get方法
                      attrNmae = ms.getName().substring(3).totLowerCase();
                     try{
                        //得到属性值
                        attrValue = (String)ms.invoke(obj);
                        }catch(){
     
                        }
                    if(k!=0){
                        abf.append(",");
                   }
                   }
     
                    sbf.append("'");
        sbf.append(attrName);
        sbf.append("'");
        sbf.append(":");
        sbf.append("'");
        sbf.append(attrVlaue);
        sbf.append("'");
        K++;
              }
              sbf.append{"}"};
              
     
    }
              return sbf.toString();
    }
    }
     
     
    pubic class Test{
         public static void main(String[ ] args){
              Student stu = new Student("1001","赵四","1","22","","");
              String s= new ObjectChangeJSON().obj2JSON(stu);
              System.....("===1==="+s);
         }
    }
     
     
    pubic class Test{
         public static void main(String[ ] args){
                Student stu1 = new Student("1001","赵四","1","22","","");
    Student stu2 = new Student("1002","赵四","1","22","","");
    Student stu3 = new Student("1003","赵四","1","22","","");
    Student stu4 = new Student("1004","赵四","1","22","","");
    Student stu5= new Student("1005","赵四","1","22","","");
              List<Student>list = new ArrayList<Student>();
    list.add(stu1);
    list.add(stu2);
    list.add(stu3);
    list.add(stu4);
              list.add(stu5);
     
             String s= new ObjectChangeJSON().list2JSON(list);
              System.out.println(s);
         }
    }
     
       案例3:web服务器处理请求的方式。
              Class.forName("权限定类名").newInstance();
     
    package com.it.servlet;
    public abstract class HttpSerblet{
         public abstract void servive();
    }
     
     
    package com.it.servlet;
    public class AddServlet extends HttpServlet{
         public void servive(){
        
         }
         public AddServlet(){
              System.out.println("======addservlet====");
         }
    }
     
     
    package com.it.servlet;
    public class DelServlet extends HttpServlet{
         public void servive(){
        
         }
         public AddServlet(){
              System.out.println("======delservlet====");
         }
    }
     
     
     
    package it.text
    public static main(String[ ] args){
         String  url ="/add.do";
         //创建SAXReader
         String baseName = System.getProperty("user.dir");
         SAXReader reader  = new SAXReader();
         try{
              Document doc= reader.read(new File(baseMam+"//src//web.xml"));
              Element root=  doc.getRootElements();
              List<Element> elements = root.elements();
              //保存servlet的文本值
              String attrName ="";
     
              /**
              for(Element ele:elements){
                   if(ele.getName().epuals("servlet-mapping")){
                        if(ele.elementText("url_pattern").epuals(url)){
                             attrName=ele.elementText("servlst-name");
                        }
                   }
              }
              **/
     
              for(Element element:elements){
                   if(elememt.getName().equals("servlet-mapping")){
                        List<Element>urlpattern = element.element();
                        for(Element e:urlpattern){
                            if(e.getText(),equals(url)){
                                 attrName = elemmet.elementText("servlet-name"); 
                                  System.out.println("===1===="+attrName);
                             } 
                        }
                   }
              }
     
     
              System.out.println("attrNmae+"===1=====");
              String name = "";
                for(Element ele:elements){
                   if(ele.getName().epuals("servlet")){
                        if(ele.elementText("serblet-name").epuals(attrName)){
                             name=ele.elementText("servlst-class");
                        }
                   }
              }
              System.out.println("name+"===1=====");
              //实例化
              Class.forName(name).newInstanse();
             
    }catch(DocumentException e){
         e.printStackTrace();
    }
     
    }
     
       案例4:写一个通用的rs。  (重构JDBC) 
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    baidu 地图 鼠标移上显示标签 鼠标离开隐藏标签
    ci框架 用框架自带db 添加括号,比如 like 等等左右添加括号 解决办法
    layDate 闪现 循环一个以上会闪现
    typescript定义函数类型
    typescript中的类与接口的关系
    typescript中的类
    typescript中的接口
    mac 上配置 ssh 免密登录服务器 【非常简单】
    Go语言中的map(十一)
    Go语言中的切片(十)
  • 原文地址:https://www.cnblogs.com/nin-w/p/5907461.html
Copyright © 2020-2023  润新知