java高薪之路__007_反射
参考地址: 1. http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html2. http://www.cnblogs.com/nerxious/archive/2012/12/24/2829446.html3. http://j2megame.blog.163.com/blog/static/140838396201141623654269/4. http://blog.csdn.net/liujiahan629629/article/details/18013523
java.lang.Class 是反射的源头
我们创建了一个类, 通过编译(javac.exe)生成对应的.class文件, 之后我们使用java.exe加载此.class文件(JVM的类加载器完成的), 此.class文件加载到内存后,就是一个运行时类,存在于缓存区,那么这个运行时类本身就是一个Class的实例! 每一个运行时类只加载一次 反射的类的获取方式共有4种1. 通过类的.class属性2. 通过类的对象的getClass()方法3. 通过Class类的静态forName()方法4. 通过类的加载器
 package learn.JavaBasics.Class;
 import java.io.*;
 import java.util.Properties;
 class Person{
     public String name;
     private int age;
     public Person() {
     }
     public Person(String name, int age) {
         this.name = name;
         this.age = age;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
 }
 public class TestReflection {
     public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, FileNotFoundException {
         //方法1
         Class<Person> clazz = Person.class;
         Person p = clazz.newInstance(); 
         //上面是使用了泛型的,也可以不用泛型,然后类型强转
         Class clazz1 = Person.class;
         Person p1 = (Person) clazz1.newInstance();
         //方法2
         Person p2 = new Person();
         Class clazz2 = p2.getClass();
         //方法3
         Class clazz3 = Class.forName("learn.JavaBasics.Class.Person");
         Person p3 = (Person) clazz3.newInstance();
         Class<?> clazz3_1 = Class.forName("learn.JavaBasics.Class.Person");
         Person p3_1 = (Person) clazz3_1.newInstance();
         //方法4
         Class clazz4 = new TestReflection().testClassLoaderReflection();
         Person p4 = (Person) clazz4.newInstance();
         //关于加载Properties文件的问题
         new TestReflection().testProperties();
     }
     public Class<?> testClassLoaderReflection() throws ClassNotFoundException {
         ClassLoader cl = this.getClass().getClassLoader();//this代表的是这个方法,所以不能使用main方法
         Class<?> c = cl.loadClass("learn.JavaBasics.Class.Person");
         return c;
     }
     public void testProperties() throws FileNotFoundException {
         //1. 如果不在同一个包文件下
         ClassLoader loader = this.getClass().getClassLoader();
         InputStream in = loader.getResourceAsStream("learn//JavaBasics//Class//jdbc.properties");//前面是包的名字
         //2. 在一个包文件下
         FileInputStream in1 = new FileInputStream(new File("jdbc1.properties"));
         Properties p = new Properties();
         try {
             p.load(in);
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         p.getProperty("driver");
     }
 }
调用默认的newInstance方法,要求被反射的类要有一个无参的构造方法,同时这个无参的构造方法的访问权限也要注意,要能够访问如果没有无参构造方法,只要正确的调用其他的构造方法也可反射类
动态代理
java高薪之路__007_反射的更多相关文章
- java高薪之路__008_Annotation
		
元注解 共有4种 @Retention 表示需要在什么级别保存该注释信息(生命周期) |--- RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉 |--- Reten ...
 - java高薪之路__009_网络
		
1. InetAddress类2. Socket: IP地址和端口号的结合,socket允许程序把网络连接当成一个流,数据在两个socket间通过IO传输, 通信的两端都要有socket. 主动发起通 ...
 - java高薪之路__005_IO流
		
参考地址: 1. http://blog.csdn.net/yczz/article/details/38761237 File类 ObjectInputStream && Objec ...
 - java高薪之路__003_集合
		
Java集合可分为Collection和Map两大体系 Collection接口 |---- Set: 元素无序.不可重复 |---- List: 元素有序.可重复 (动态数组) |---- Queu ...
 - java高薪之路__002_异常处理
		
自定义异常 package learn.JavaBasics.Class; import java.util.Date; /** * 如何自定义一个异常类 * 1. 继承一个现有的异常类 * 2. 提 ...
 - java高薪之路__001_类
		
Java中内部类分四种:成员内部类.局部内部类.静态内部类和匿名内部类.要注意静态内部类的调用方式与其他不同,采用的是类似调用类中的静态属性.静态方法的方式 Multi Level 调用不同类中的相同 ...
 - java高薪之路__010_设计模式
		
设计模式只是一个在构建大型工程时,为了方便更改,添加,查询和管理的一种代码工具,没有必要单独为了设计模式而使用设计模式,使简单的事情复杂化. 总体来说设计模式分为三大类: 1. 创建型模式,共五种 - ...
 - java高薪之路__006_多线程
		
线程的创建有两种方式 package learn.JavaBasics.Class; public class ThreadDemo extends Thread { private static i ...
 - java高薪之路__004_泛型
		
参考地址: 1. http://www.cnblogs.com/lwbqqyumidi/p/3837629.html2. http://www.cnblogs.com/abcwt112/p/47350 ...
 
随机推荐
- ant build utf-8
			
使用Ant编译过程中,报error: unmappable character for encoding UTF8 最简单的方法是在Build.xml文件中,在所有出现Javac的地方,增加一个选项: ...
 - 关于IOS的证书、App ID、设备、Provisioning Profile详述
			
首先,打开developer.apple.com ,在iOS Dev Center打开Certificates, Indentifiers & Profiles认识一下基本结构.列表就包含了开 ...
 - find    找出大文件
			
找到大文件 find . -type f -size +100M -exec du -smh {} \;
 - RML Utilities for SQL Server
			
很早以前有看到过关于使用RML Utilities工具分析SQL Trace(.trc)的文章,但一直没有具体实践.最近接管一台数据库服务器,跟踪出一批高消耗的语句,老大需要跟踪分析报表,罗列出过程( ...
 - SQL Server代理警报
			
使用SQL Server代理警报的前提条件1.创建操作员,接收消息的用户2.创建警报,满足某种条件触发警报,并作出响应(执行作业或/和通知操作员)3.配置数据库邮件,用于发送消息通知4.SQL Ser ...
 - 打开VS调试不进入开发的网站直接跳转到主页
			
重启了熟悉有卸载IE11的,搞了好几个小时 最后把电脑管家里的锁定主页打开就好了! 很久之后 我再锁上 也没有这问题了
 - 响应式布局2--MATE
			
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...
 - FORM 提示保存
			
修改的FORM在编译到测试环境后打开并没有修改什么数据,却提示是否保存,检查->system.form_satus 为"changed": 个人实际解决情况为:在数据块级的触 ...
 - wcf服务与web发布时无法访问 几种解决办法
			
1 如果wcf服务与web发布在同一iis目录下,没有跨域的问题 但发布前要修改 ServiceReferences.ClientConfig 把wcf服务地址改为你发布后的iis的ip地址( ...
 - ssh-keygen -t rsa P “” -f ~/.ssh/id_rsa不提示直接生成密钥
			
ssh-keygen -t rsa P "" -f ~/.ssh/id_rsa不提示直接生成密钥