请帮我看一下这段代码(50分)

  • 主题发起人 主题发起人 socket
  • 开始时间 开始时间
S

socket

Unregistered / Unconfirmed
GUEST, unregistred user!
public class test1 {
private String Str ;
public static void main(String arge[]){
test1 f = new test1() ;
f.Str = "hello world" ;
//为什么这里在 Str 前要加上 f.
f.test() ;

}
void test(){
System.out.println(Str) ;
// 这里Str前不用加,并且加了还会错
}
//都是引用成员变量Str为什么一个要加前缀一个不用加

}
 
当然要加了 除非你这样写了
private static String Str ;
//声明它是静态变量
 
你要都研究一下Class
f.Str = "hello world" ;
//为什么这里在 Str 前要加上 f.
是因為你定義了test1 f = new test1() ;
而且後面有f.test()的調用
===============================================
void test(){
System.out.println(Str) ;
// 这里Str前不用加,并且加了还会错
}
是因為test()是class test1 的Void
 
因为你的F是继承于test1的一个类,你是使用F类来进行显示的.如果用7syw老兄的方法,那么
在void test()中无法使用STR,因为在J中规定,静态类变量只能在静态类方法中使用.
不知道本人解释如何?如果有哪位J高手批评指正,不胜感激
 
to holyknight
是因為test()是class test1 的Void
test( ) 和 Str都是class test1的成员为什么一个要加一个不要加呢
//是因為你定義了test1 f = new test1() ;
//而且後面有f.test()的調用
有什么关系吗?
你解释的我还是不太明白
 
to holyknight
你说" 是因為test()是class test1 的Void",
但main()也是class test1的void呀
 
main是主函数,与class test1没有任何关系,它可以加到其他函数中去.是因为你定义了F类变量,如果你单纯的使用STR,J无法知道STR是属于哪个类的.
holyknight说的没有错,如果你要使用test1类的STR变量成员一定要使用THIS.STR
 
感觉楼主面向对象思想没变过来
>>private String Str ;
Str是实例变量,也就是说只有构造了类的对象,才可以访问实例变量
每一个对象都有一份类的实例变量的拷贝 ,而静态成员是类成员,
在相同类的对象,只有一份.
main()方法是静态的,也就是类方法,在对象没产生之前就可以访问,
既然是对象没产生之前,你怎么可以访问实例成员Str呢?,所以要先构造
对象f才可以.
 
ZRWeng说的很对,要注意实例变量和静态类方法
當你定義一個變量為 Classname valname = new Classname();時
valname可以訪問Classname中所有公用的變量和函數;
>test1 f = new test1() ;
>而且後面有f.test()的調用
因此才需要定義f.Str = "Hello world";
 
多人接受答案了。
 
to 爱多
应该是
static函数不能访问非static函数和变量
而非static函数是可以访问static变量的
private boolean t;
private static int i;
public int test(int ii)//合法
{
super.test();
i=ii;
return i;
}
public static boolean s() //不合法
{
t=true;
return t ;
}
不信可以自己试一下呀
 
后退
顶部