标签:
1 2 3 | List list = new ArrayList< String >(); //add提示的是Object List< String > list = new ArrayList (); //add提示的是String List< String > list = new ArrayList< String >(); //add提示的是String |
1 2 3 | public static <T> T returnType(T t){ return t; } |
1 2 3 | public class Demo1<T>{ // 非静态成员都可以直接使用T泛型 } |
1 2 | public interface List<E> extends Collection<E> public class Person implements Comparable<Person> |
1 2 3 4 5 6 | // Collection<Object> coll = new ArrayList<String>() public static void printCollection(Collection<?> coll){ for (Object temp:coll){ System.out.println(temp); } } |
1 2 | ? extends 父类 ? super 子类 |
1 2 3 4 5 | public static void printCollection(Collection<? extends Number> coll){ for (Object temp:coll){ System.out.println(temp); } } |
1 | 查看List的 boolean addAll(Collection<? extends E> c) 方法 |
类 | 描述 |
---|---|
Class | 描述所有的Class文件的共性 |
Field | 描述的是Class文件的中的属性的共性 |
Constrcutor | 描述的是Class文件中的构造函数的共性 |
Method | 描述的是Class文件中的函数的共性 |
1 2 3 | 方式一: 类名. class 方式二: 对象名.getClass() 方式三: forName(String className) 该方法是Class类的静态方法 推荐 |
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) throws Exception { // 使用不同的方式会过去Class对象 Class clazz1 = String. class ; Class clazz2 = new String( "jnb" ).getClass(); // 参数必须指定类的全名(类的全限定名) Class clazz3 = Class.forName( "java.lang.String" ); // class文件时候独一无二的,那么Class对象也应该是单例的 System.out.println(clazz1 == clazz2); // true System.out.println(clazz2 == clazz3); // true } |
方法 | 描述 |
---|---|
Field[] getDeclaredFields() | 获取所有声明的字段数组对象 |
Field[] getFields() | 获取所有的声明的共有字段数组对象 |
Field getDeclaredField(String name) | 获取指定名称的声明的字段对象 |
Field getField(String name) | 获取指定名称的声明的共有字段对象 |
URL getResource(String name) | 获取指定名的资源的URL对象 |
InputStream getResourceAsStream(String name) | 获取指定名的资源的输入流对象 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static void main(String[] args) throws Exception { // 获取Shape类的Class对象 Class clazz = Class.forName( "cn.itcast.bean.Shape" ); // 获取所有的属性 Field [] fs = clazz.getDeclaredFields(); System.out.println(fs.length); // 2 // 获取所有共有的属性 fs = clazz.getFields(); System.out.println(fs.length); // 1 // 获取指定名字的私有的属性 Field field = clazz.getDeclaredField( "x" ); System.out.println(field); // 获取指定名字的共有的属性 field = clazz.getField( "y" ); System.out.println(field); } |
方法 | 描述 |
---|---|
String getName() | 获取属性的名字 |
void set(Object obj, Object value) | 给属性设置相应的值 |
Object get(Object obj) | 获取属性的值 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public static void main(String[] args) throws Exception { // 获取Shape类的Class对象 Class clazz = Class.forName( "cn.itcast.bean.Shape" ); // 获取所有的属性 Field [] fs = clazz.getDeclaredFields(); System.out.println(fs.length); // 2 // 获取所有共有的属性 fs = clazz.getFields(); System.out.println(fs.length); // 1 Shape shape = new Shape(); // 20 // 获取指定名字的私有的属性 Field field = clazz.getDeclaredField( "x" ); System.out.println(field); // 操作私有的属性x System.out.println( "属性名: " +field.getName()); // 获取x的属性值,需要暴力的反射 field.setAccessible( true ); System.out.println( "设置之前的x值:" +field.get(shape)); // 设置x的属性值 field.set(shape, 20 ); System.out.println( "设置之后的x值:" +field.get(shape)); // 获取指定名字的共有的属性 field = clazz.getField( "y" ); System.out.println(field); // 给属性y进行设置值 System.out.println( "属性名: " +field.getName()); // 获取设置属性值之前的值 System.out.println( "设置之前的y值:" +field.get(shape)); // 20 field.set(shape, 30 ); // 30 System.out.println( "设置之后的y值: " +shape.y); // 30 } |
1 2 3 4 5 6 7 8 9 | public static void main(String[] args) throws Exception { // 获取Shape类的Class对象 Class clazz = Class.forName( "cn.itcast.bean.Shape" ); // 获取共有的静态属性 Field field = clazz.getField( "z" ); System.out.println( "设置之前的z值: " +field.get( null )); field.set( null , 40 ); System.out.println( "设置之后的z值: " +field.get( null )); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static void main(String[] args) throws Exception { // 获取Shape类的Class对象 Class clazz = Class.forName( "cn.itcast.bean.Shape" ); // 获取所有的声明的方法 Method [] ths = clazz.getDeclaredMethods(); System.out.println(ths.length); // 2 // 获取私有的带参数的sayHello方法 Method sayHello = clazz.getDeclaredMethod( "sayHello" , String. class ); System.out.println(sayHello); // 调用私有的方法 sayHello.setAccessible( true ); sayHello.invoke( new Shape(), "jnb" ); // 获取所有的共有的方法 ths = clazz.getMethods(); System.out.println(ths.length); // 10 // 获取带参数的共有的 方法 Method greet = clazz.getDeclaredMethod( "greet" , String. class ); System.out.println(greet); // 方法的调用 greet.invoke( new Shape(), "焦宁波" ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public static void main(String[] args) throws Exception { // 获取Shape类的Class对象 Class clazz = Class.forName( "cn.itcast.bean.Shape" ); // 获取所有的声明的构造函数 Constructor [] cons = clazz.getDeclaredConstructors(); System.out.println(cons.length); // 3 // 获取带参数的私有的构造函数对象 Constructor con = clazz.getDeclaredConstructor( int . class , int . class ); System.out.println(con); // 暴力反射私有的构造函数创建对象 con.setAccessible( true ); Shape myshape = (Shape) con.newInstance( 400 , 500 ); System.out.println(myshape.getX()+ "," +myshape.y); // 获取所有的共有的构造函数 cons = clazz.getConstructors(); System.out.println(cons.length); // 2 con = clazz.getConstructor( int . class ); System.out.println(con); // 调用构造函数创建对象 Shape shape = (Shape) con.newInstance( 100 ); System.out.println(shape.getX()); } |
类 | 描述 |
---|---|
BeanInfo | 对JavaBean进行描述的接口 |
Introspector | 描述所有的JavaBean的成员类 |
PropertyDescriptor | 描述的是JavaBean的属性类主要的操作方法以及描述 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void main(String[] args) throws Exception{ // 获取一个属性的描述器对象就相当于获取了属性的名、set和get方法 PropertyDescriptor pd = new PropertyDescriptor( "name" ,Book. class ); // 获取set方法 Method set = pd.getWriteMethod(); // 调用该方法设置属性的值 Book book = new Book(); System.out.println( "设置前获取name属性值:" +book.getName()); set.invoke(book, "JavaSE进阶" ); System.out.println( "设置后获取name属性值:" +book.getName()); // 获取get方法 Method get = pd.getReadMethod(); System.out.println(get.invoke(book, null )); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static void main(String[] args) throws Exception{ // 获取指定的BeanInfo对象 BeanInfo info = Introspector.getBeanInfo(Book. class ); // 获取Book类中的所有的属性的描述器对象 PropertyDescriptor[] pds = info.getPropertyDescriptors(); // 输出长度 System.out.println(pds.length); // 查看数组的第一个属性描述器是谁 PropertyDescriptor pd = pds[ 0 ]; // 作者 System.out.println(pd.getName()); Book book = new Book(); // 给书设置作者信息 pd.getWriteMethod().invoke(book, "焦宁波" ); System.out.println(pd.getReadMethod().invoke(book, null )); } |
- http://www.apache.org
beanutils-1.8.0.zip
commons-logging.jar
全选->右键->Build path->add path-> 看到奶瓶子即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void main(String[] args) throws Exception { // 模拟用户的输入的数据如下 String name = "XML基础" ; String author = "焦宁波" ; String price = "99.99" ; String date = "2013-01-04" ; Book book = new Book(); // 任务是将以上的属性设置给指定的Book对象 BeanUtils.setProperty(book, "name" , name); BeanUtils.setProperty(book, "author" , author); BeanUtils.setProperty(book, "price" ,price ); // 查看属性是否封装好 System.out.println(book); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | public static void main(String[] args) throws Exception { // 模拟用户的输入的数据如下 String name = "XML基础" ; String author = "焦宁波" ; String price = "99.99" ; String date = "2013-01-04" ; Book book = new Book(); // 注册一个自己的转换器 /** * converter指定具体的转换器 * clazz遇到什么类型调用上面的转换器 */ ConvertUtils.register( new Converter(){ // 回调方法 @Override public Object convert(Class type, Object value) { if (value == null ){ return null ; } // 转换为String String data = (String)value; // 将指定格式的字符串转换为Date SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" ); Date date = null ; try { date = format.parse(data); return date; } catch (ParseException e) { e.printStackTrace(); return null ; } } }, Date. class ); // 任务是将以上的属性设置给指定的Book对象 BeanUtils.setProperty(book, "name" , name); BeanUtils.setProperty(book, "author" , author); BeanUtils.setProperty(book, "price" ,price ); BeanUtils.setProperty(book, "date" ,date ); // 查看属性是否封装好 System.out.println(book); } |
1 | ConvertUtils.register( new DateLocaleConverter(), Date. class ); |
1 2 3 4 | Book copy = new Book(); System.out.println(copy); PropertyUtils.copyProperties(copy, book); System.out.println(copy); |
1 2 3 4 5 | private static void readRoot() throws FileNotFoundException, IOException { BufferedReader br = new BufferedReader( new FileReader( new File( "jnb.txt" ))); String line = br.readLine(); System.out.println(line); } |
1 2 3 4 5 6 7 8 | private static void readClassPath() throws FileNotFoundException,IOException { URL url= SoreceReader. class .getResource( "jnb.txt" ); String path = url.getPath(); System.out.println(path); BufferedReader br = new BufferedReader( new FileReader( new File(path))); String line = br.readLine(); System.out.println(line); } |
1 2 3 4 5 6 7 8 | private static void readBin() throws FileNotFoundException, IOException { URL url= SoruceReader. class .getResource( "../../../jnb.txt" ); String path = url.getPath(); System.out.println(path); BufferedReader br = new BufferedReader( new FileReader( new File(path))); String line = br.readLine(); System.out.println(line); } |
1 2 3 4 5 6 | public static void main(String[] args) throws Exception{ InputStream in = SoreceReader. class .getResourceAsStream( "../../../jnb.txt" ); BufferedReader br = new BufferedReader( new InputStreamReader(in)); String line = br.readLine(); System.out.println(line); } |
getResourceAsStream直接返回了流对象因此无法获取资源的信息。
getResource直接返回的是资源的绝对路径,那么封装File可以快速的获取资源的信息。所有在文件下载的时候一般使用该方法
标签:
原文地址:http://www.cnblogs.com/lindongdong/p/a537bee2e0ebb34439a662d2bb8e7b07.html