JAVA小问题,关于类访问另一个包中的类的问题,请大神看清问题在作答

我在一个名叫test的包下建立了一个类 A,而另一个类 B 我没有定义包,用的是default package,我想在test包下的这个 A 类访问另一个类 B,可是总是报错,错误就是说我没有定义这个类 B,请教一下我该怎么样才能访问到 这个没有包的类 B(在一个有包的类里)。
(另外我的类都是public的)。

文件示例

    

首先通过A类直接访问B类时无法成功访问到的。

    原因:情况1: A类中,不导入B类,直接使用。那么系统会在test包里寻找B类。

                           结果很明显,test包中根本没有B类。所以会提示B类找不到。

               情况2:  试图利用导包命令import,把B类导入A类。

                            这时要注意:既然是导包命令,需要的是  包名.类名或者包名.*的方式

                            比如import   XX包.xx类。

                            结果又会失败,因为B类根本就没有包名,无法使用导包命令

解决办法:

一: 推荐方法:养成良好的代码书写习惯,不要使用默认包,请自定义包名。然后在里面写类。

比如

a.

这里只需要在A类import test.com.B;就可以了

b.

这里可以在A类直接使用


二:绕弯路的方法:使用java的反射机制来操作B类。

    代码如下:

 default package里的B类

public class B {
public String name;
public int age;
public void sayHi(String name) {
System.out.print(this.name + "告诉" + name + ":“我今年" + age + "岁了。”");
}
}

test包里的A类

package test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class A {
public static void main(String[] args) throws ClassNotFoundException, Exception, IllegalAccessException {
Class<?> bc = Class.forName("B");
Object obj = bc.newInstance();
Field  fname =bc.getField("name");//获取属性
fname.set(obj, "张三");//设置属性的值
Field fage = bc.getField("age");
fage.set(obj,8);
Method method = bc.getMethod("sayHi", String.class);
method.invoke(obj, "班主任");//利用obj主调方法,传入参数
}
}

运行测试:

张三告诉班主任:“我今年8岁了。”

                           

     

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-28
修改类B,给它也建个包,然后用import 导入。或者干脆就加入到这个test包里。追问

能不能告诉我为什么这个类A死活不能访问到这个类 B,解决方法我也知道,但不知道为什么这样就不能访问啊,大神再看看吧,谢谢啦

第2个回答  2016-10-28
使用反射 ,,,可以做到

~
相似回答