可以,不过需要反射的类和方法都是public的才行. 静态内部类在反射外部类的时候不会被加载.测试的代码:public class Test { public class B { public void print() { System.out.println("Test.B.print()"); } } public void a() { System.out.println("Test.a()"); }
public static class C { public static final long testLong = 5/(System.currentTimeMillis()-System.currentTimeMillis()); }
@SuppressWarnings("unchecked") public static void main(String[] args) { try { Class c = Class.forName("com.gnet.mis.dao.test.Test"); Object o1 = c.newInstance(); Test t = (Test)o1; t.a(); Class[] cs = c.getClasses(); Constructor co = cs[0].getConstructor(new Class[]{c}); Object testO = co.newInstance(o1); Method m = cs[0].getMethod("print", new Class[]{}); m.invoke(testO, new Object[]{}); } catch (Exception e) { e.printStackTrace(); } } }如果加载静态内部类C,就会报除数为0异常,没有报异常代表没有加载. 内部类B可以被反射出实例,但是条件必须是public才行. 如果要调用testB的方法,那么那个方法也必须是public的说.
哎呀,哎呀,刚才头好晕啊. 把 public static final long testLong = 5/(System.currentTimeMillis()-System.currentTimeMillis()); 改做 public static final long testLong = 5/0; 更直接些的说.
答: 1)例子:class A{ int i=0; void f(){ System.out.println("A.f()"); } class B{ //内部类} static class C{//stati 内部类
} void g() { class D{//局部内部类
} } } public class Nei { public static void main(String[] args){ System.out.println("类A中的内部类有:"); Class c=A.class; Class[] cc=c.getDeclaredClasses();
for(Class e:cc) { System.out.println(" "+e); }
} }程序运行结果: 类A中的内部类有: class A$B class A$C2) "若有个静态内部类 在CLASS.FORNAME后 这个类被载入到内存了吗 载入进去的有哪些信息 以及怎么调用里面的方法"? static型内部类,除了是在一个类的内部定义外,其实它就是一个顶层类.载入进去的就是类中的信息,就同顶层类一样调用里面的方法.
package cc; public class xx { public class A{
} public static class b{ static final int a=5/0; } void pp(){} public static void main(String[] args) throws Exception{ Class m=Class.forName("cc.xx"); Class[] mm=m.getDeclaredClasses(); for(int i=0;i<mm.length;i++) System.out.println(" "+mm); } }我的运行结果如下 [Ljava.lang.Class;@1fb8ee3 [Ljava.lang.Class;@1fb8ee3 ? 怎么都一样
静态内部类在反射外部类的时候不会被加载.测试的代码:public class Test
{
public class B
{
public void print()
{
System.out.println("Test.B.print()");
}
} public void a()
{
System.out.println("Test.a()");
}
public static class C
{
public static final long testLong = 5/(System.currentTimeMillis()-System.currentTimeMillis());
}
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
try
{
Class c = Class.forName("com.gnet.mis.dao.test.Test");
Object o1 = c.newInstance();
Test t = (Test)o1;
t.a();
Class[] cs = c.getClasses();
Constructor co = cs[0].getConstructor(new Class[]{c});
Object testO = co.newInstance(o1);
Method m = cs[0].getMethod("print", new Class[]{});
m.invoke(testO, new Object[]{});
}
catch (Exception e)
{
e.printStackTrace();
}
}
}如果加载静态内部类C,就会报除数为0异常,没有报异常代表没有加载.
内部类B可以被反射出实例,但是条件必须是public才行.
如果要调用testB的方法,那么那个方法也必须是public的说.
把
public static final long testLong = 5/(System.currentTimeMillis()-System.currentTimeMillis());
改做
public static final long testLong = 5/0;
更直接些的说.
1)例子:class A{
int i=0;
void f(){
System.out.println("A.f()");
}
class B{ //内部类} static class C{//stati 内部类
}
void g()
{
class D{//局部内部类
}
}
}
public class Nei {
public static void main(String[] args){ System.out.println("类A中的内部类有:");
Class c=A.class;
Class[] cc=c.getDeclaredClasses();
for(Class e:cc)
{
System.out.println(" "+e);
}
}
}程序运行结果:
类A中的内部类有:
class A$B
class A$C2) "若有个静态内部类 在CLASS.FORNAME后 这个类被载入到内存了吗 载入进去的有哪些信息 以及怎么调用里面的方法"?
static型内部类,除了是在一个类的内部定义外,其实它就是一个顶层类.载入进去的就是类中的信息,就同顶层类一样调用里面的方法.
public class xx {
public class A{
}
public static class b{
static final int a=5/0;
}
void pp(){}
public static void main(String[] args) throws Exception{
Class m=Class.forName("cc.xx");
Class[] mm=m.getDeclaredClasses();
for(int i=0;i<mm.length;i++)
System.out.println(" "+mm);
}
}我的运行结果如下
[Ljava.lang.Class;@1fb8ee3
[Ljava.lang.Class;@1fb8ee3
? 怎么都一样
[Ljava.lang.Class;@1fb8ee3
这到底输出的什么东东啊