今天我突然意识到,当我试图为main方法声明一个变量时,Java从来没有为局部变量指定访问级别。我还试图给它一个访问级修饰符,但它不编译。错误是:参数t1的非法修饰符;
package myThread;
import java.lang.Thread;
import java.lang.String;
import java.lang.System;
public class PrintThread extends Thread{ //extends Thread class
private long sleepTime;
public PrintThread(String name)
{
super(name);
this.sleepTime = (long) (java.lang.Math.random() * 5000);
System.out.println("Thread: " + getName() + ", sleepTime: " + sleepTime);
}
public void run() // override run method
{
System.out.println(getName() + " go to sleep...");
try
{
sleep(sleepTime);
} catch (InterruptedException e)
{
e.getMessage();
}
System.out.println(getName() + " out of sleep!");
}
public static void main(String[] args)
{
public PrintThread t1 = new PrintThread("T1"); // CANNOT COMPILE
t1.start(); // start thread by start() method
}
}
如我们所知,我们需要使用public protected package private static final等来指定java类的成员变量。
但是对于类方法(静态或非静态)变量,我们从不这样做。
我一整天都被这个想法困住了。以前,我只是像往常一样写java代码,但没有意识到这个现象。
你能给我提示吗?我不能仅仅通过消除public关键字来说服自己。
因为这没有意义。方法中声明的变量是该方法的局部变量;也就是说,它们不能在方法外部被访问。为什么以及如何在方法之外修改这些变量?方法外部的代码甚至不知道它们,所以您不需要保护它们免受外部代码的侵害。
您不能在方法中添加访问修饰符,因为它只属于您创建变量的方法。所以没有必要在
方法变量的作用域仅限于该方法。这意味着当方法启动/变量声明时在堆栈上创建引用,并在方法结束时销毁引用。
允许它是公共的或任何其他访问说明符不会有任何好处,因为该字段将不存在于方法之外。
另一个问题如何在方法外部访问它们?
class A{
public String s="test";
void myMethod(){
public String s=this.s+"not allowed"; // If allowed how will you access the local s variable outside of method???
}
所以编译器不允许允许这些访问说明符因为没有必要声明它们