更新时间:2021年03月18日 08时58分22秒 来源:黑马程序员论坛
反射技术: 其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。 反射的好处:大大的增强了程序的扩展性 反射的基本步骤: 1、获得Class对象,就是获取到指定的名称的字节码文件对象。 2、实例化对象,获得类的属性、方法或构造函数。 3、访问属性、调用方法、调用构造函数创建对象。 [Java] 纯文本查看 复制代码 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。 2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。 前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。 3:使用的Class类中的方法,静态的forName方法。 指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。 // 1. 根据给定的类名来获得 用于类加载 String classname = "cn.itcast.reflect.Person";// 来自配置文件 Class clazz = Class.forName(classname);// 此对象代表Person.class // 2. 如果拿到了对象,不知道是什么类型 用于获得对象的类型 Object obj = new Person(); Class clazz1 = obj.getClass();// 获得对象具体的类型 // 3. 如果是明确地获得某个类的Class对象 主要用于传参 Class clazz2 = Person.class; 反射的用法:1. 需要获得java类的各个组成部分,首先需要获得类的Class对象,获得Class对象的三种方式: Class.forName(classname) 用于做类加载 obj.getClass() 用于获得对象的类型 类名.class 用于获得指定的类型,传参用 2.反射类的成员方法: Classclazz = Person.class; Methodmethod = clazz.getMethod(methodName, new Class[]{paramClazz1, paramClazz2}); method.invoke();3. 反射类的构造函数: Constructorcon = clazz.getConstructor(new Class[]{paramClazz1, paramClazz2,...}) con.newInstance(params...)4. 反射类的属性: Fieldfield = clazz.getField(fieldName); field.setAccessible(true); field.setObject(value); 获取了字节码文件对象后,最终都需要创建指定类的对象:创建对象的两种方式(其实就是对象在进行实例化时的初始化方式):1,调用空参数的构造函数:使用了Class类中的newInstance()方法。2,调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的newInstance(实际参数) 进行对象的初始化。 使用集合的技巧:看到Array就是数组结构,有角标,查询速度很快。看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast;removeFirst(); removeLast();getFirst();getLast();看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。看到tree就是二叉树,就要想到排序,就想要用到比较。比较的两种方式:一个是Comparable:覆盖compareTo方法;一个是Comparator:覆盖compare方法。LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。 集合什么时候用?当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。 保证唯一,就用Set。不保证唯一,就用List。 StringBuffer 和 StringBuilder 的区别:StringBuffer线程安全。StringBuilder线程不安全。 单线程操作,使用StringBuilder 效率高。多线程操作,使用StringBuffer 安全。 多态在子父类中的成员上的体现的特点:1,成员变量:在多态中,子父类成员变量同名。 在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象,只检查语法错误) 运行时期:也是参考引用型变量所属的类中是否有调用的成员。 简单一句话:无论编译和运行,成员变量参考的都是引用变量所属的类中的成员变量。 再说的更容易记忆一些:成员变量 --- 编译运行都看 = 左边。2,成员函数。 编译时期:参考引用型变量所属的类中是否有调用的方法。 运行事情:参考的是对象所属的类中是否有调用的方法。 为什么是这样的呢?因为在子父类中,对于一模一样的成员函数,有一个特性:覆盖。 简单一句:成员函数,编译看引用型变量所属的类,运行看对象所属的类。 更简单:成员函数 --- 编译看 = 左边,运行看= 右边。3,静态函数。 编译时期:参考的是引用型变量所属的类中是否有调用的成员。 运行时期:也是参考引用型变量所属的类中是否有调用的成员。 为什么是这样的呢?因为静态方法,其实不所属于对象,而是所属于该方法所在的类。 调用静态的方法引用是哪个类的引用调用的就是哪个类中的静态方法。 简单说:静态函数--- 编译运行都看 = 左边。 多态的好处:提高了程序的扩展性。多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)多态的前提: 1:必须要有关系,比如继承、或者实现。 2:通常会有覆盖操作。 |
推荐了解热门学科
java培训 | Python人工智能 | Web前端培训 | PHP培训 |
区块链培训 | 影视制作培训 | C++培训 | 产品经理培训 |
UI设计培训 | 新媒体培训 | 产品经理培训 | Linux运维 |
大数据培训 | 智能机器人软件开发 |
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程【点击播放】
Python入门教程完整版(懂中文就能学会) | 零起点打开Java世界的大门 |
C++| 匠心之作 从0到1入门学编程 | PHP|零基础入门开发者编程核心技术 |
Web前端入门教程_Web前端html+css+JavaScript | 软件测试入门到精通 |