Java 在主方法外声明变量和在主方法内声明变量有什么区别?
当我读关于Java的书时,我看到一个这样写的例子。我想知道我可以在main方法之外声明变量吗?在main方法外部和内部声明变量有什么区别?“静态”在这里扮演什么角色?请谁给我解释一下?我是java新手Java 在主方法外声明变量和在主方法内声明变量有什么区别?,java,Java,当我读关于Java的书时,我看到一个这样写的例子。我想知道我可以在main方法之外声明变量吗?在main方法外部和内部声明变量有什么区别?“静态”在这里扮演什么角色?请谁给我解释一下?我是java新手 public class Printstuff { static int an_integer = 0; public static void main(String[] args) { int an_integer = 2; S
public class Printstuff {
static int an_integer = 0;
public static void main(String[] args) {
int an_integer = 2;
String[] some_strings = {"Shoes", "Suit", "Tie" };
an_integer = an_integer - 1;
some_strings[an_integer] = some_strings[an_integer] +"+++";
for (int i = 0; i < some_strings.length; i++)
System.out.println(some_strings[Printstuff.an_integer]);
}
}
公共类Printstuff{
静态整数=0;
公共静态void main(字符串[]args){
整数=2;
字符串[]一些字符串={“鞋子”、“西装”、“领带”};
一个整数=一个整数-1;
一些_字符串[一个_整数]=一些_字符串[一个_整数]+“+++”;
for(int i=0;i
致以最诚挚的问候。在main方法中声明变量将使其仅在main方法中可用。在外部声明变量将使该类的所有方法都可以使用它,包括main方法 例如:
public class Foo {
private String varOne = "Test";
public void testOne() {
System.out.println(varOne);
System.out.println(varTwo); // Error, this variable is available in the testTwo method only
}
public void testTwo() {
String varTwo = "Bar";
System.out.println(varOne); // Will display "Test"
System.out.println(varTwo); // Will display "Bar"
}
}
存在范围差异。 你必须声明它是静态的,因为你的主函数是静态的,所以它只允许你使用静态变量。 声明main方法内部的变量只能在main方法内部使用 现在你可能想知道为什么我需要将main方法设置为static!!!
因为java中的任何应用程序都将从main方法运行,所以它只能通过类名调用,而不需要创建任何对象,所以我们将它定义为静态的。所有静态方法都可以使用类引用进行调用,不需要对象。不同之处在于现在您的
整数具有更大的范围
例如,如果您有其他方法
public class Printstuff {
static int an_integer = 0;
public static void main(String[] args) {
int an_integer = 2;
String[] some_strings = {"Shoes", "Suit", "Tie" };
an_integer = an_integer - 1;
some_strings[an_integer] = some_strings[an_integer] +"+++";
for (int i = 0; i < some_strings.length; i++)
System.out.println(some_strings[Printstuff.an_integer]);
}
public void anotherMethod(){
an_integer++;
}
}
公共类Printstuff{
静态整数=0;
公共静态void main(字符串[]args){
整数=2;
字符串[]一些字符串={“鞋子”、“西装”、“领带”};
一个整数=一个整数-1;
一些_字符串[一个_整数]=一些_字符串[一个_整数]+“+++”;
for(int i=0;i
正如你宣布的那样
intan_整数=0代码>
同一包中的所有类别都可以访问此变量。1)内部与外部:
如果在方法中声明对象,则它将仅在此方法中可见。基本上,如果你在它周围放上括号,它只能从括号中看到/访问
如果在方法外部(类内部)声明对象,则它取决于。
默认情况下,它在该类和整个包中可见/可访问
2)静态
静态意味着这个对象/变量属于类本身,而不是它的对象
例如:
memberCount
只存在一次,无论类中存在多少个对象。(甚至在创建任何对象之前!)
每次创建成员
的新对象时,成员数
都会增加。现在您可以这样访问它:Members.memberCount
您所指的是变量的范围
方法内的变量只能在此方法内访问,即main
-方法内的整数不能在main
方法外引用。变量甚至可以有更窄的范围,例如在循环内部。for
循环的经典迭代变量仅在其循环内可用,之后就消失了
方法之外的变量称为字段。它取决于它的访问修饰符在哪里可以看到它<例如,code>Private
字段仅在此类中可用,public
字段可以从任何位置访问(其他访问修饰符是受保护的和无,这取决于默认设置)。基本上,您可以使用类内的字段从该类内的每个方法访问其值,但是,如果多个线程访问同一个类的实例,这可能是危险的,但这完全是另一回事
字段和局部变量可能具有相同的名称,这可能会导致混淆。我通常不希望这样做,或者,也许更好,总是引用带有this
访问器的字段。我不能完全确定是否存在局部变量相对于同名字段的偏好,但我猜在确定哪个是局部变量时,局部变量的优先级更高
静态
字段现在表示此变量不属于类的实例,而是属于类本身<可以读取(或调用)代码>静态
字段(和方法),而无需先初始化类。例如,可以是类的标准值,也可以是factorymethod(如果是方法的话)<代码>静态
字段与最终
修饰符一起也可用于常量。公共最终静态
字段几乎是一个全局常量。我很感兴趣,没有人提到内存问题。许多年前,在main()中实例化会将变量分配给堆栈,而在ot main中实例化则会将变量分配给堆。在那个时候,系统的堆栈非常小,所以不检查这个细节很容易导致堆栈溢出。虽然我不是内存架构方面的专家,但我希望有人能对这个微妙的细节做出贡献,因为它适用于当前的软件架构/内存 从类外到同一包中的其他类too@nachokk:就在这种情况下。它取决于访问说明符。此代码不会编译,因为varOne
是非静态的,因此无法从静态main()
方法访问。@bcsb1001 M
public class Members {
static int memberCount;
public Members() {
memberCount++;
}
}