18.Java反射机制
定义:
(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。
(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。
优缺点:
1.优点:运行期类型的判断,动态加载类,提高代码灵活度。
2.缺点:(1)性能瓶颈,反射相当于一系列解释操作,通知JVM要做的事情,性能比直接的java代码要慢很多。
(2)反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。
Class.forName和classloader的区别(结合JVM类加载)
Class.forName除了将类的.class文件加载到JVM中之外,还会对类进行解释,执行类中的static块。而classloader只干了一件事情,就是将.class文件加载到JVM中,不会执行static中的内容,只有在newInstance才会去执行static块。forName()得到的class初始化工作已完成。
最重要的区别在于forName会初始化Class,而loadClass不会。因此如果要求加载时,类的静态变量被初始化或者静态块中的代码被执行就只能用forName,而用loadClass只有等创建类实例时才会进行这些初始化。
比较详细的介绍:Java基础篇:反射机制详解
19、简述面向对象的三大特征(封装,继承,多态)
封装:
在面向对象思想中,封装指数据(类成员属性)和对数据的操作(类的方法)捆绑到一起,形成对外界的隐藏,同时对外提供可以操作的接口(供外部访问的类成员)。
封装的意义在于保护或者防止代码被我们无意破坏,保护成员属性,不让类以外的程序直接访问或修改,隐藏方法细节。
继承:
继承是从已有的类中派生出一个新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
为什么要继承:反应现实的真实关系,减少代码冗余,对父类的属性和方法进行扩展和重写。继承中,子类不可以选择性的继承父类的关系而是全部继承父类的属性和方法,其中父类又叫超类和基类,子类又叫派生类。父类是子类的具体化。java不支持父类的多继承,多继承是通过接口实现的。
多态:父类引用指向不同子类对象。
Java实现多态有三个必要的条件:继承,重写,向上转型。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够调用父类的方法和子类的方法。
实现方式:接口多态性,继承多态性,抽象类实现的多态性。
实现原理:动态绑定。
本文详细介绍了Java反射机制的核心概念,包括如何在运行时动态加载类并操作对象,以及其优缺点。此外,深入解析了面向对象的封装、继承和多态三大特征,展示了它们在实际编程中的应用和注意事项。
845

被折叠的 条评论
为什么被折叠?



