class类的使用:
1.面向对象的世界里,万事万物皆对象
2.类是对象,任何类都是java.lang.Class类的实例对象
例子:
class food{}
food f=new food();
那么food的实例对象有以下几种表达方式:
1.Class c1=food.class;//任何一个类都有隐含的静态变量class
2.Class c2=f.getClass();
3.Class c3=null;
c3=Class.forName("com.package.demo");//参数为类的全称
其中c1==c2或者是c2==c3都是true,因为不管c1 、c2都代表了food类的类类型,一个类只可能是class类的一个实例对象。
可通过类的类类型创建该类的对象实例:food f=(food)c1.newInstance();//前提:需要有无参的构造方法
基本的数据类型、void关键字都存在类类型(ps:void的无参构造方法是私有的),可直接调用class类的方法。方法也是一个对象,所有的方法的类类型都是method。
方法的反射:方法的名称和参数列表才能唯一决定一个方法。
操作:method.invoke(对象(方法名),参数列表)
例子:
class A{
public void print(int a,int b){
System.out.println(a+b);
}
public void print(String a,String b){
System.out.println(a+b);
}}
class Main{
public static void main(String[] args){
//要获取方法,就是获取类的信息,获取类的信息首先要获取类的类类型
A a1=new A();
Class c=a1.getClass();
//getMethod()获取的是public的方法,getDelcaredMethod()获取的是自己声明的方法
Method m=c.getMethod("print",int.class,int.class);//获取方法对象;若方法无参数,则写成c.getMethod("print",new Class[]{})或者c.getMethod("print");
Object o=m.invoke(a1,new Object[]{10,20});//用m对象来进行方法的调用,效果和a1.print()一样。如果方法没有返回值则返回null,有则返回具体的返回值
//也可写成Object o=m.invoke(a1,10,20);
}}