问题写在注释里了。import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;public class TestFunc extends JFrame
{
public static void main(String[] args)
{
new TestFunc().lanchFrame();
} /* 
 * 为程序加一个Frame界面
*/
public void lanchFrame()
{
setSize(400, 300);
setLocation(300, 200);
setTitle("Just For Test");

/*
*  下面在frame里添加了一个可以让frame分左右两栏的JSplitPane组件
*  并执行自定义的addCompoment(JSplitPane js)方法
*/
JSplitPane js = new JSplitPane();
add(js);
addCompoment(js);


setVisible(true);

} /*
 * 这个方法是将JSpitPane组件左边栏和右边栏各放一个可以显示
 * 文本内容的JTextArea,两个JTextArea组件各显示一句话
 * 
 * 按我以前学的知识,方法头部的列表里声明的变量或对象是局部的变量、对象。
 * 并不能对外提供功能,也就是说下面这个方法执行了等于没执行。
 * 但是事实和我料想的相反。
 * 为什么会这样啊。JAVA中什么时候会发生这种情况啊。
 */
public void addCompoment(JSplitPane js)
{
//js是个成员内部对象哦。
JTextArea leftArea = new JTextArea("我是方法里的成员对象,你看不到我的");
js.setLeftComponent(leftArea);
JTextArea rightArea = new JTextArea("我也是方法里的成员对象");
js.setRightComponent(rightArea);
}
}

解决方案 »

  1.   

    我觉得是被全局变量(TestFunc的实例)引用着,所以未释放addCompoment(js) -> js.setLeftComponent(left(right)Area);
      

  2.   

    你的addCompoment(JSplitPane js)方法参数列表里面的JSplitPane js只是说明你的参数是JSplitPane类型的,只要调用的时候参数是JSplitPane类型的就能调用,跟参数的名字无关。所以你前后两个参数名字相同没有什么影响。
      

  3.   

    方法public void lanchFrame()里面的js,和方法public void addCompoment(JSplitPane js)中的js并非同一个js.
    都只是一个名字而已。就像有两个人,即使同名同姓,还是不同的人,虽然大多数情况下,两个人的名字是不同的。而在这里,有两个人同名同姓了。而实际上,无论他们叫什么,在这里这两个变量都是不同的。
      

  4.   

    引用所指对象是同一个的,实际使用的也是同一个JSplitPane对象
      

  5.   

    lanchFrame方法里面定义了一个JSplitPane 对象js。然后调用addCompoment方法将js作为参数传入addCompoment方法
      

  6.   

    LZ是不是想问addCompoment(JSplitPane js)中的js是局部变量,随着addCompoment方法的调用结束,这个js变量也应该消失,而不是问前后两个js变量名字相同的问题吧。
      

  7.   

    addCompoment(JSplitPane js)方法中的参数是object reference,将JSplitPane js中的js传过去,局部变量js复制JSplitPane js的pointer值,两个指向同一个对象,addCompoment(JSplitPane js)运行结束后局部变量js也结束,但非局部变量js指向那个对象还存在。
      

  8.   

    楼主想问的是不是说,那两个JTextArea是局部变量,不应该能看到这两个对象,对吧?
      

  9.   

    addCompoment(JSplitPane js)的js是一个对象引用吧
    也就是说你在lanchFrame()
    调用的addCompoment()中传入的参数指向的就是你实例化的js
      

  10.   

    JSplitPane js中的js是一个对象,这里就是一个引用,相当于是C的一个指针
    所以可以在函数中对js进行操作
      

  11.   

    原来JAVA方法中的变量是基础类型传值,是类传引用(String除外),谢谢各位。