黑马程序员——反射及包

来源:互联网 发布:fastboot进入软件 编辑:程序博客网 时间:2024/05/18 03:57
<a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>

反射:不仅把java类的字节码封装成Class类,而且把字节码的相关成员也封装成相应的类


步骤:

(1)   获取Class对象

(2)   实例化对象,获取类的属性、方法或构造函数

(3)   访问属性、调用方法、调用构造函数创建对象

1、 获取Class类的对象

1)     类名.class

2)     对象.getClass()

3)     Class.forName(“java.lang.String”)  //类加载器把字节码缓存到JVM

在程序中出现的数据类型,都有各自的class实例对象

例1:

int.class==Integer.TYPE    //true 包装类的基本类型的字节码

int.class==Integer.class    //false  包装类的字节码

例2:

String str=newString()

Class class=String.class

Classclass=str.getClass()

Class class= Class.forName(“java.lang.String”)

2、 实例化对象

1)     成员变量

Field[] field=class.getFields()   //获取所有成员变量

Field field1=class.getDeclaredField(成员变量名)   //得到具体某个成员变量

field1.setAccessible(true)      //暴力破解使其值被调用

field1.get(对象)          //给field1赋值

field1.getType()          //得到成员变量的的类型

2)     构造函数

Constructor[]  constructor= class.getConstructors()

Constructor  constructor= class.getConstructor(参数字节码) 

//通过某个构造方法得到构造器实例

constructor.newInstance(参数字节码)

                      //传具体参数类型,创建类实例

3)     方法

Method  method =class.getMethod(方法名,参数字节码)

method.invoke(对象,要传进方法的参数)

3、 一个框架实例

//配置文件config.properties中内容className=java.lang.ArrayList

InputStream  ips = newFileIputStream(“config.properties”);

Properties  props =new Properties();

props.load(ips);

ips.close();

String  className = props.getProperty(“className”);

Collection collection =Class.forName(className).newInstance();

//可以改变配置文件来改变你创建的Collection实例

 

 


名称所有字母小写

类内容不同名称相同,就需要包来加以区分

(1)   对类文件分类管理

(2)   写在程序第一行

(3)   包也是一种封装形式

(4)   类名全称:包名.类名

编译:

javac –d c:java 类名.java      //–d c:java是指定包存放的目录

运行:

set classpath=.;–d c:java

不同包中类的访问:

被访问包中的类和成员要public修饰

不同包子类可访问被protect修饰的父类

类修饰符:两种public    protected

修饰符作用范围

private:本类

defaut:本类、本包

protected:本类、本包、其子类

public:全部


0 0
原创粉丝点击