问几个java问题What will be the output on compiling/running the following code?
public class MyThread implements Runnable
{
String myString = "Yes ";
public void run()
{
this.myString = "No ";
}
public static void main(String[] args)
{
MyThread t = new MyThread();
new Thread(t).start();
for (int i=0; i < 10; i++)
System.out.print(t.myString);
}
}
问题是,myString 不是public的,为什么main()最后一行不会报错呢? 我把main()移到另一个class中,也能run,都有点学糊涂了我 :P
第二个问题
public class Static
{
static
{
int x = 5;
}
static int x,y;
public static void main(String args[])
{
x--;
myMethod();
System.out.println(x + y + ++x);
}
public static void myMethod()
{
y = x++ + ++x;
}
}
这里有两个static, 一个是static{ int x = 5;} 另一个是static int x;
如何拿到在那个static{}中的x? 还想知道前者有什么用吗?
多谢!!
java tutorial from Sun is always a good resource to consult
First q: t is an local variable, t.MyString is accessing a member variable of t via t. Thus it is nothing related to public/protected/private limitation.
Second q: static initialization blocks are used for initilize a class member.
Note declaration also do the initialization for class member/instance member:
byte,short,int,long -> 0
float, double, -> 0.0
bool -> false
char -> empty character
object -> null
If you really want to access the thing in static{}, put static statements before define class member.
Seems you are doing SCJP, if yest, better read Java tutorial carefully.
Second q: static initialization blocks are used for initilize a class member.
Note declaration also do the initialization for class member/instance member:
byte,short,int,long -> 0
float, double, -> 0.0
bool -> false
char -> empty character
object -> null
If you really want to access the thing in static{}, put static statements before define class member.
Seems you are doing SCJP, if yest, better read Java tutorial carefully.
Yeah!