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)