Java从不在方法中声明变量的访问级别,无论是不是是静态的[关闭]
Posted
技术标签:
【中文标题】Java从不在方法中声明变量的访问级别,无论是不是是静态的[关闭]【英文标题】:Java never declares access level of variables in methods whether static or not [closed]Java从不在方法中声明变量的访问级别,无论是否是静态的[关闭] 【发布时间】:2013-04-14 08:04:28 【问题描述】:今天我突然意识到,当我尝试为 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代码,没有意识到这个现象。
你能给我一些提示吗?我不能仅仅通过消除 t1 的 public 关键字来说服自己。
【问题讨论】:
如果你需要一个公共静态变量,也就是一个在这个类的所有实例之间共享的变量——不要把它放在 main() 方法中。 那是因为不存在局部变量的访问修饰符之类的东西。局部变量在方法(以及其中定义的局部类)之外是不可见的。访问修饰符没有意义;没有人知道他们在那里。 【参考方案1】:因为它没有意义。方法中声明的变量是方法的局部变量;即它们不能在方法之外访问。为什么以及如何在方法之外修改这些变量?方法之外的代码甚至不知道它们,因此您不需要保护它们免受外部代码的影响。
【讨论】:
【参考方案2】:你不能在方法中添加访问修饰符,因为它只属于你创建变量的那个方法。所以在方法中添加访问修饰符是没有用的
【讨论】:
【参考方案3】:方法变量的范围仅限于该方法。当方法启动/变量声明并在方法结束时销毁时,此平均引用会在堆栈上创建。
允许它公开或任何其他访问说明符不会有任何好处,因为该字段不会存在于方法之外。
另一个问题,您将如何在方法之外访问它们?
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???
因此编译器不允许使用这些访问说明符,因为声明它们没有用处。
【讨论】:
以上是关于Java从不在方法中声明变量的访问级别,无论是不是是静态的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用