类对象和类的对象
反射
定义:是程序运行时,自审并对内部的成员进行操作(反射是使用,反编译是查看)
java运行时变成class文件,自审是针对class文件的
计算机能认识 .class文件,不认识 .java文件,
在内存中需要加载这个java的class文件,由于java中一切皆对象,那么就是在对内存中把class文件封装成了一个对象
类对象和类的对象:
class文件在内存中的类对象表现x形式就只有一个,
类的全称是:包名+类名(不同包的类名可以相同)
getClass( )方法:获得运行时的那个 .class文件(类对象),返回类型Class类==》所有的 .class文件对应的对象就是Class这个类的对象
Class类负责管理所有 .class文件 && .class文件被封装成了对象(叫类对象)
(**也就是说类对象就是Class类的对象**)
(增强理解:类的对象是根据类new出来的,Class类的new出来的类的对象都是.class文件(类对象))
类的对象 .getclass的结果是类对象(.class文件)
类--->jvm--->new 对象 类的对象
类 public Class String{}
类对象 String.class 单例 一般加载进内存不销毁 jvm虚拟机分配内存
类的对象 String str=new String(); String str1=null;
类对象一般加载到内存中不会销毁,会销毁但是不轻易销毁(那什么情况下会销毁呢??)
类对象就相当于人类,类的对象就相当于人,人可以被销毁(内存中被回收释放),人类是不可能销毁的,
我们是根据人类创建的人,而人类中有一个
pvivate针对我们是私有的;但是针对虚拟机JVM不是私有的(你的秘密针对别人来说是个秘密,但是针对人类来说、自己来说就不再是私有的了)
虚拟机加载类进去是可以获得所有的成员(要是保密都加载不进去了,还能用个屁)
但是局部成员是不能获取的,因为局部根本没有暴露(要是暴露了那就内存泄漏了,为什么这么说?这个局部变量名字,你这里也有,我这里也有,内存就傻眼啦)
类可不一样,类是包名+类名,类名相同的话,但是还有包名不同限制着呢,但还是方法和方法之间不可能会冲突(不同的类可以有同种的方法,但是这些方法也算是有路径的存在方法区中)