美文网首页
Class对象

Class对象

作者: 心中翼 | 来源:发表于2019-03-11 15:45 被阅读0次

1、反射

1.Class.forName("")
根据给定字符串加载类。
2.newInstance()
创建由class表示的类实例对象
3.getMethods()
返回所有的公共方法,包含父类
4.getDeclaredMethods()
返回类或接口的声明方法包括public, protected, default (package),不包含继承方法
5.method.invoke(obj,args)
执行方法,需要传入执行对象及参数。
执行私有方法需要设置method.setAccessible(true);
6.getClassLoader()
获取classLoader BootstrapLoader->ExtClassLoader->AppClassLoader

public class TestClass {
    public TestClass() {
        System.out.println("init TestClass");
    }

    private void myPrivateMethod(){
        System.out.println("this is a private method");
    }

    public void myPublicMethod(){
        System.out.println("this is a public method");
    }
}


public class ClassTest {

    @Test
    public void testClassLoader(){
        ClassLoader classLoader = Test.class.getClassLoader();
        System.out.println(classLoader);

        ClassLoader classLoader1 = classLoader.getParent();
        System.out.println(classLoader1);

        ClassLoader classLoader2 = classLoader1.getParent();
        System.out.println(classLoader2);
    }

    @Test
    public void testInstance() throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Class<TestClass> s = (Class<TestClass>) Class.forName("TestClass");
        TestClass testInstance = s.newInstance() ;
        for(Method method: s.getMethods()){
            System.out.println(method);
        }

        System.out.println("\n");
        for(Method method: s.getDeclaredMethods()){
            System.out.println(method);
            method.setAccessible(true);
            method.invoke(testInstance,null) ;
        }
    }
}

//输出信息
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@452b3a41
null

init TestClass
public void TestClass.myPublicMethod()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()


private void TestClass.myPrivateMethod()
this is a private method
public void TestClass.myPublicMethod()
this is a public method

相关文章

  • ★12.类型信息

    Class 每个类都有Class对象。 获取Class对象的方式有:类名.class对象.getClass()Cl...

  • OC对象的分类

    instance(实例对象)instance class(类对象)class meta-class(元类对象)me...

  • oc对象的种类

    oc对象:instance对象,class对象,meta-class 对象 instance对象 isa 其他成员...

  • 02 OC对象的分类

    instance对象(实例对象) class对象 (类对象) meta-class对象 (元类对象) instan...

  • 02.Objective-C 对象的分类

    问题 Objective-C对象分类 整么获取到class对象,整么获取到meta-class对象 class对象...

  • OC对象的分类

    OC对象主要分为3种: instance对象(实例对象) class对象 (类对象) meta-class对象 (...

  • OC 对象的种类

    分类 instance 对象(实例对象) class 对象(类对象) meta-class 对象 (元类对象) i...

  • java 泛型方法的两种写法

    这种需要传入 类名.class(class对象)(java有两类对象,Class对象和实例对象。更多参考Java的...

  • oc对象内存布局

    OC对象分为3种: instance对象(实例对象) class对象(类对象) meta-class对象(元类对象...

  • OC对象学习(实例对象、类对象、元类对象)

    1).OC对象分类: 实例对象(Instance对象) 类对象(Class对象) 元类对象(Meta-class对...

网友评论

      本文标题:Class对象

      本文链接:https://www.haomeiwen.com/subject/fwcbpqtx.html