《南陵别儿童入京》
白酒新熟山中归,黄鸡啄黍秋正肥。
呼童烹鸡酌白酒,儿女嬉笑牵人衣。
高歌取醉欲自慰,起舞落日争光辉。
游说万乘苦不早,著鞭跨马涉远道。
会稽愚妇轻买臣,余亦辞家西入秦。
仰天大笑出门去,我辈岂是蓬蒿人。
哈哈哈,我胡汉三又回来了,好久没写博客了,在接下来的日子里面每周保二进三,别的话不多说了,开整---
java反射机制简单的来说就是通过对象找类,(我们通常都是知道类然后实例化对象)
1 /** 2 * 3 */ 4 package kdemod; 5 6 /** 7 * @author Administrator 8 * 9 */ 10 public class Student { 11 12 13 private String name; 14 private Integer age; 15 16 //为了掩饰别的项目,先把这个注释掉 17 18 /*public Student(String name){ 19 super(); 20 this.name = name; 21 } 22 23 //改写默认有参构造方法 24 public Student(String name,Integer age){ 25 super(); 26 this.name = name; 27 this.age = age; 28 }*/ 29 30 //======================getter和setter方法=========================================== 31 public String getName() { 32 return name; 33 } 34 public void setName(String name) { 35 this.name = name; 36 } 37 public Integer getAge() { 38 return age; 39 } 40 public void setAge(Integer age) { 41 this.age = age; 42 } 43 44 public void Say(){ 45 System.out.println("我的姓名:"+name); 46 } 47 48 @Override 49 public String toString() { 50 // TODO Auto-generated method stub 51 return "Student [name="+ name + "age"+age+"]"; 52 } 53 } 54 55 56 57 58 59 /** 60 * 61 */ 62 package kdemod; 63 64 /** 65 * @author Administrator 66 * 67 */ 68 public class test { 69 70 /** 71 * @param args 72 * 73 * 通过class类来获取对象的完整包名和类名 74 */ 75 public static void main(String[] args) { 76 // TODO Auto-generated method stub 77 //Student student = new Student(); 78 //这里对象.getClass() 调用的是Object类的getClass() 79 //得到Class对象 然后再调用Class里的getName()方法,获取到完整包路径类 80 //System.out.println(student.getClass().getName()); 81 } 82 83 } 84 85 86 87 88 89 /** 90 * 91 */ 92 package kdemod; 93 94 /** 95 * @author Administrator 96 * 97 */ 98 public class test01 { 99 100 /** 101 * @param args 102 */ 103 public static void main(String[] args) { 104 // TODO Auto-generated method stub 105 106 try { 107 //通过得到Class对象,我们可以通过Class对象得到Kdemod.Student类的完整结构; 108 Class<?> c =Class.forName("kdemod.Student");//有没有很熟悉的感觉,JDBC连接数据库的时候获取驱动名====报名+类名 109 System.out.println(c.getName()); 110 } catch (ClassNotFoundException e) { 111 // TODO Auto-generated catch block 112 e.printStackTrace(); 113 } 114 } 115 116 } 117 118 119 120 /** 121 * 122 */ 123 package kdemod; 124 125 import java.lang.reflect.Constructor; 126 127 /** 128 * @author Administrator 129 * 130 */ 131 public class test02 { 132 133 /** 134 * @param args 135 */ 136 public static void main(String[] args) { 137 // TODO Auto-generated method stub 138 Class<?> c = null ; 139 try { 140 c=Class.forName("kdemod.Student"); 141 System.out.println(c.getName()); 142 } catch (ClassNotFoundException e) { 143 // TODO Auto-generated catch block 144 e.printStackTrace(); 145 } 146 //获取构造器 147 Constructor<?> cons[] = c.getConstructors() ; 148 for (Constructor<?> con : cons) { 149 System.out.println("构造方法"+ con ); 150 //会输出两个构造方法 151 } 152 153 } 154 155 } 156 157 158 159 /** 160 * 161 */ 162 package kdemod; 163 164 import java.lang.reflect.Constructor; 165 import java.lang.reflect.InvocationTargetException; 166 167 /** 168 * @author Administrator 169 * 山豆几 170 */ 171 public class test03 { 172 173 /** 174 * @param args 175 */ 176 public static void main(String[] args) { 177 // TODO Auto-generated method stub 178 179 Class<?> c = null ; 180 181 try { 182 c = Class.forName("kdemod.Student"); 183 System.out.println(c.getName()); 184 } catch (ClassNotFoundException e) { 185 // TODO Auto-generated catch block 186 e.printStackTrace(); 187 } 188 Student s = null ; 189 Constructor<?> [] cons = c.getConstructors() ; 190 191 try { 192 s = (Student) cons[0].newInstance("山豆几",19); 193 //s = (Student) c.newInstance() ; 194 } catch (InstantiationException | IllegalAccessException 195 | IllegalArgumentException | InvocationTargetException e) { 196 // TODO Auto-generated catch block 197 e.printStackTrace(); 198 } 199 200 //因为在bean里面添加了有参的构造方法,所以在运行这个就会报错,解决办法就是通过反射获取这个类的构造方法,看34行写法 201 //s.setName("山豆几"); 202 //s.setAge(19); 203 System.out.println(s); 204 } 205 206 } 207 208 209 210 /** 211 * 212 */ 213 package kdemod; 214 215 import java.lang.reflect.Method; 216 217 /** 218 * @author Administrator 219 *通过getMethods() 方法获取所有的方法; 220 */ 221 public class test04 { 222 223 /** 224 * @param args 225 * 这是一个测试 226 */ 227 public static void main(String[] args) { 228 // TODO Auto-generated method stub 229 Class<?> c = null; 230 try { 231 c = Class.forName("kdemod.Student"); 232 System.out.println(c.getName()); 233 } catch (ClassNotFoundException e) { 234 // TODO Auto-generated catch block 235 e.printStackTrace(); 236 } 237 Method mds[] = c.getMethods() ; 238 for (Method m : mds) { 239 System.out.println(m); 240 } 241 242 } 243 244 } 245 246 247 248 /** 249 * 250 */ 251 package kdemod; 252 253 import java.lang.reflect.Field; 254 255 /** 256 * @author Administrator 257 * 258 */ 259 public class test05 { 260 261 /** 262 * @param args 263 */ 264 public static void main(String[] args) { 265 // TODO Auto-generated method stub 266 267 Class<?> c = null; 268 try { 269 c = Class.forName("kdemod.Student"); 270 System.out.println(c.getName()); 271 } catch (ClassNotFoundException e) { 272 // TODO Auto-generated catch block 273 e.printStackTrace(); 274 } 275 Field fs[] = c.getDeclaredFields() ; 276 for (Field f : fs) { 277 System.out.println(f); 278 //通过getDeclaredFields()方法获取所有属性 279 } 280 281 282 283 } 284 285 } 286 287 288 289 /** 290 * 291 */ 292 package kdemod; 293 294 import java.lang.reflect.Method; 295 296 /** 297 * @author Administrator 298 * 299 */ 300 public class test06 { 301 302 /** 303 * @param args 304 * @throws SecurityException 305 * @throws NoSuchMethodException 306 */ 307 public static void main(String[] args) { 308 // TODO Auto-generated method stub 309 310 Class<?> c = null; 311 try { 312 c = Class.forName("kdemod.Student"); 313 System.out.println(c.getName()); 314 } catch (ClassNotFoundException e) { 315 // TODO Auto-generated catch block 316 e.printStackTrace(); 317 } 318 319 320 try { 321 Object obj = c.newInstance() ; 322 Method m2 = obj.getClass().getMethod("setName", String.class); 323 m2.invoke(obj, "山豆几"); 324 Method m =obj.getClass().getMethod("getName"); 325 String name = (String) m.invoke(obj); 326 System.out.println(name + "name"); 327 } catch (Exception e) { 328 // TODO Auto-generated catch block 329 e.printStackTrace(); 330 } 331 } 332 333 } 334 335 336 337 /** 338 * 339 */ 340 package kdemod; 341 342 import java.lang.reflect.Field; 343 344 /** 345 * @author Administrator 346 * 347 */ 348 public class test07 { 349 350 /** 351 * @param args 352 */ 353 public static void main(String[] args) { 354 // TODO Auto-generated method stub 355 356 357 Class<?> c = null; 358 try { 359 c = Class.forName("kdemod.Student"); 360 System.out.println(c.getName()); 361 } catch (ClassNotFoundException e) { 362 // TODO Auto-generated catch block 363 e.printStackTrace(); 364 } 365 366 try { 367 Object obj = c.newInstance() ; 368 Field nameField = c.getDeclaredField("name") ; 369 nameField.setAccessible(true); 370 nameField.set(obj, "山豆几"); 371 System.out.println("name="+nameField.get(obj)); 372 } catch(Exception e){ 373 // TODO Auto-generated catch block 374 e.printStackTrace(); 375 } 376 } 377 378 } 379 380 381 382 383 384 /** 385 * 386 */ 387 package kdemod; 388 389 /** 390 * @author Administrator 391 * 392 */ 393 public class A { 394 395 } 396 397 398 399 package kdemod; 400 401 public interface B { 402 403 } 404 405 406 package kdemod; 407 408 public interface C { 409 410 } 411 412 413 /** 414 * 415 */ 416 package kdemod; 417 418 /** 419 * @author Administrator 420 * 421 */ 422 public class Person extends A implements B,C { 423 424 } 425 426 427 428 429 /** 430 * 431 */ 432 package kdemod; 433 434 /** 435 * @author Administrator 436 * 437 */ 438 public class test08 { 439 440 /** 441 * @param args 442 */ 443 public static void main(String[] args) { 444 // TODO Auto-generated method stub 445 446 Class<?> c = null; 447 try { 448 c = Class.forName("kdemod.Person"); 449 System.out.println(c.getName()); 450 } catch (ClassNotFoundException e) { 451 // TODO Auto-generated catch block 452 e.printStackTrace(); 453 } 454 Class<?> s = c.getSuperclass() ; 455 System.out.println(s); 456 //获取父类测试 457 458 } 459 460 } 461 462 463 464 /** 465 * 466 */ 467 package kdemod; 468 469 /** 470 * @author Administrator 471 * 472 */ 473 public class test09 { 474 475 /** 476 * @param args 477 */ 478 public static void main(String[] args) { 479 // TODO Auto-generated method stub 480 481 Class<?> c = null; 482 try { 483 c = Class.forName("kdemod.Person"); 484 System.out.println(c.getName()); 485 } catch (ClassNotFoundException e) { 486 // TODO Auto-generated catch block 487 e.printStackTrace(); 488 } 489 Class<?> []ifs = c.getInterfaces(); 490 for (Class<?> i : ifs) { 491 System.out.println(i); 492 //获取接口测试类 493 } 494 } 495 496 }
以上代码均测试通过。