先说一下Book类的东西
package chapter08;
public class Book {
private String name;
private int price;
/**
* set get method
*/
public void setName(String name) {
this.name = name;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return this.name;
}
public int getPrice() {
return this.price;
}
//重写toString方法
@Override
public String toString() {
return "this book name is " + this.name + " and price is " + this.price;
}
//无参构造方法
public Book() {
}
//带参构造方法
public Book(String name, int price) {
this.name = name;
this.price = price;
}
//sayHello method
public String sayHello(String name, int price) {
return "this book name is " + name + " and price is " + price;
}
}
再说一下test类里面主要测试的东西
package chapter08;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class test {
public static void main(String[] args) {
/**
* 通过反射调用方法
*/
try {
//实例化Book的 Class对象
Class clazz = Class.forName("chapter08.Book");
//获取Book对象中名为sayHello的方法,有两个形参
Method method = clazz.getMethod("sayHello", String.class, int.class);
//调用sayHello方法 注意invoke第一个参数是你的类实例化得对象
String result = (String) method.invoke(clazz.newInstance(), "java web",20);
//一下两行也可以执行sayHello方法,上网查后method.invoke是框架中经常用到的方法。
//也许后面不能直接简单的book.method这样访问了吧
// Book book = (Book) clazz.newInstance();
// String result = book.sayHello("Java web", 123);
System.out.println(result);
}catch(Exception e){
System.out.println(e);
}
/**
* 通过反射访问属性
*/
// try {
// //获取Book类对应的Class对象
// Class clazz = Class.forName("chapter08.Book");
// //创建对象
// Object b = clazz.newInstance();
// //获取Book类中的指定名称的属性
// Field nameField = clazz.getDeclaredField("name");
// //设置通过反射访问属性时取消权限检查
// nameField.setAccessible(true); //这一步很关键,这个是取消权限的,咱们就可以后set方法进行赋值
// //通过set方法赋值
// nameField.set(b, "java web");
// //输出一下
// System.out.println(b);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
/**
* 通过有参构造方法构造实例化对象
*/
// try {
// //传入要实例化类的完整“包.类”名称
// Class clazz = Class.forName("chapter08.Book");
// //通过反射获取全部构造方法 注意后面的s,是全部的构造方法
// Constructor[] cons = clazz.getConstructors();
// //向构造方法中传递对象,并且实例化book对象
// //目前测试一下下标的作用 目前留一个疑问。。
// Book book = (Book) cons[0].newInstance("c程序设计原理",10);
// System.out.println(book);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
/**
* 无参构造方法构造实例化对象,到后面用框架的时候有时候的不能new
* Class clazz = Class.forName("chapter08.Book");
* Book book = (Book) clazz.newInstance();
* 以上两行代码作用与 Book book = new Book(); 作用相同
*/
// try {
//传入要实例化类的完整“包.类”名称
// Class clazz = Class.forName("chapter08.Book");
//实例化对象
// Book book = (Book) clazz.newInstance();
// book.setName("node.js");
// book.setPrice(16);
// System.out.println(book);
// } catch (Exception e) {
// e.printStackTrace();
// }
/**
* 测试基本的get set toString 方法
* 还测试了book.getClass.getName()方法
* 也是认识一下Class类
*/
// Book book = new Book();
// book.setName("java web");
// book.setPrice(20);
// System.out.println("set test ok!");
// System.out.println("book getName method test:"+book.getName());
// System.out.println("book getPrice method test:"+book.getPrice());
// System.out.println("toString test:"+book.toString());
// System.out.println("Class(should be Package.Class)"+book.getClass().getName());
}
}
目前存在疑问的就是构造带参实例化对象的时候,下标的使用。。记一下笔记。