1.反射机制“
反射是java的动态机制,可以允许我们在程序运行期间在确定实例化,调用某个方法,操作某个属性
反射机制大大提高了代码的灵活度,但是会有更高的系统开销和较慢的运行效率
2.获取类对象的三种方式。
1.Student s = new Student();
Class cls = s.getClass();
2.类名点class(基本类型获取类对象只有这一种方式)
Class cls = String.class
3.Class cls = Class.forName("包名.类名");
3.类对象的相关方法
1.String name = cls.getName():获取类对象表示的类的完全限定名
2.String name = cls.getSimpleName();获取类名
3.Package pack = cls.getPackage();获取类对象所表示的的包
4.pack.getName();获取包名
5.Method[] methods = cls.getMethods(); 获取类对象所表示的类中定义的所有公开方法,包含超类继承下来的方法。
6.利用反射机制实例化对象
Class cls = Class.forName("包名.类名");
Object obj = cls.newInstance();
7.使用有参构造器进行实例化。
Class cls = Class.forName("包名.类名");
Constructor c = cls.getConstructor(String.class , int.class);
Object obj = c.newInstance("王五",20);
8.Method method = cls.getMethod(methodName);
method.invoke(obj);通过类对象获取需要调用的方发
9.调用有参方法。
Class cls = Class.forName(" ");
Object obj = cls.newInstance();
Method method = cls.getMethod("方法名",参数);
method.invoke(obj,具体的值);
10.Method[] method = cls.getDeclareMethod();获取当前类自身定义的方法,包含私有方法。
11.Method method = cls.getDeclaredMethod(方法名);
method.setAccessible(teue);强行打开私有方法的访问权限。
12.method.getParameterCount()==0判断该方法参数是否为零
13.method.getModifiers() == Modifier.PUBLIC 判断该方法的访问修饰符是否无PUBLic
14.cls.isAnnotattionPresent(注解.class)判断该类对象所表示的类是否被注解标注
4.main方法上的参数String[] args的作用是:
在命令行上使用java命令指定当前类时,可以传递参数进来,此时会被main上的String[] args接收。
5.开发中常用的相对路径。
File dir = new File(当前类名.class.getClassLodaer().getResource(".").toURI());这个类最外层包的上一级目录。
File dir =new File(当前类名.class.getResouerce(".").toURI());这个目录就是当前类所在的目录。
5.注解可以设置被应用位置。
@Target({ElementType.TYPE,ElementType.METHOD}):说明注解只能被用于类或方法上
@Retention注解,用于标注当前注解的保留级别,有三个选项。
RetentionPolicy.SOURCE 注解仅保留在源代码中
RetentionPolicy.CLASS 注解保留在字节码中,但是反射机制不能调用
RetentionPolicy.RUNTIME 注解保留在字节码文件中,并且可以被反射机制所使用。