反射

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) 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/nin-w/p/5907461.html