一、java中获取java.lang.class对象操作方法
1. 可以利用Class.forName("类的全路径")
2. this.getClass() //得到的是正在被调用的类
3.对象.class
这三种方法获取的结果都是Class对象
二、关于反射的知识强化one
public classTest {public static voidA1() {}public voidA2() {}private voidB1() {}private static voidB2() {}public static voidmain(String[] args) {
Class clazz= Test.class;
System.out.println("clazz: "+clazz);//返回的Map集合
System.out.println("clazz.getName(): "+clazz.getName());
System.out.println("clazz.getSimpleName(): "+clazz.getSimpleName());for(Method method:clazz.getMethods()) {//数组类返回从 Object 类继承的所有(公共)member 方法(包括Object的方法)
System.out.println("clazz.getMethods(): "+method.getName());
}
}
}
结果:
强化只是two:
public classA {publicA() {
Class clazz= this.getClass();
System.out.println(clazz);
}
}
public class B extendsA{public static voidmain(String[] args) {//new B
B b = new B();//new B的时候会调用A的构造//new A
A a = newA();
}
}
结果:
三、利用反射执行方法Method
import java.lang.reflect.Method;
public class TestClassLoad {
public static void main(String[] args) throws Exception {
Class> clz = Class.forName("A");
Object o = clz.newInstance();
Method m = clz.getMethod("foo", String.class);
for (int i = 0; i < 16; i++) {
m.invoke(o, Integer.toString(i));
}
}
}
上面程序中可以将clz换为this.getClass()来执行获取Method对象,invoke(类对象,方法参数)
四、根据配置文件执行不同的类
public class Factory {
private static Properties props;
static {
System.out.println("静态代码块");
props = new Properties();
try {
props.load(new FileInputStream("./src/main/resources/config.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
{
System.out.println("非静态代码块");
}
public static User getUserInstance() throws Exception{
return (User) Class.forName(props.getProperty("user")).newInstance();
}
public static Car getCarInstance() throws Exception{
return (Car) Class.forName(props.getProperty("car")).newInstance();
}
}
config.properties配置文件内容为:
user=com.it.entity.User
car=com.it.entity.Car
value的值是类的全路径
五、可以利用java的反射机制来实现Servlet的抽取
package com.iang.web.servlet.base;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
//1.获取方法名称
String mName = request.getParameter("op");
//1.1判断method参数是否为空,若为空执行默认的方法
if(mName == null || mName.trim().length()==0) {
mName = "index";
}
//2.获取方法对象
Method method=this.getClass().getMethod(mName, HttpServletRequest.class, HttpServletResponse.class);
//3.让方法执行,接受返回值
String path=(String) method.invoke(this, request,response);
//4.判断返回值是否为空,若不为空统一处理请求转发
if(path!=null)
{
request.getRequestDispatcher(path).forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}
public String index(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().println("亲不要捣乱");
return null;
}
}
下面是一个例子:
package com.iang.web.servlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itwang.domain.News;
import com.itwang.domain.NewsCategory;
import com.itwang.service.NewsBusinessService;
import com.itwang.service.impl.NewsBusinessServiceImpl;
import com.itwang.web.servlet.base.BaseServlet;
/**
* Servlet implementation class NewsManagerServlet
*/
@WebServlet("/NewsManagerServlet")
public class NewsManagerServlet extends BaseServlet {
private static final long serialVersionUID = 1L;
private NewsBusinessService nbs = new NewsBusinessServiceImpl();
public String updateNews(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String id=request.getParameter("id");
String title=request.getParameter("title");
String publicdate=request.getParameter("publicdate");
String content=request.getParameter("content");
String publicauthor=request.getParameter("publicauthor");
String keywords=request.getParameter("keywords");
String categoryid=request.getParameter("categoryid");
NewsCategory newsCategory=nbs.findNewsCategoryById(categoryid);
News news=new News();
news.setCategory(newsCategory);
news.setContent(content);
news.setKeywords(keywords);
news.setPublicauthor(publicauthor);
news.setPublicdate(publicdate);
news.setTitle(title);
news.setId(id);
nbs.updateNews(news);
return null;
}
public String addNewsUI(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
List listNewsCategory=nbs.findAllNewsCategory();
request.setAttribute("listNewsCategory", listNewsCategory);
return "/admin/addNews.jsp";
}
}