我有非常非常基本的java问题:对于下面的类:
public class Hello {
public final static int a;
public final int a;
public int a;
int a;
static public void Method(){}
public void Method(){}
private void Method(){}
}
上面的声明和方法有什么区别?
public final static int a;
这声明了一个静态的常量属性。这意味着它不依赖于Hello类的任何实例,并且可以在Hello类和内部访问。由于它是最终的,您将无法修改此值,它将始终是其默认值0。
public final int a;
与上面的类似,除了它绑定到Hello的这个实例。
public int a;
这是Hello实例的公共属性,可以在Hello类的内部和外部进行修改。这被认为是不好的做法。
int a;
此Hello实例的默认级别属性。只能在这个Hello实例中修改。
static public void Method() {}
Hello类中的静态(不绑定到实例)方法,可以在内部和外部访问。它无法访问以下内容:
public final int a;
public int a;
int a;
它无法访问这些,因为此方法与所有这些值都不相关。
public void Method() {}
Hello类的公共方法。它可以在内部和外部访问。
private void Method() {}
与上述方法类似,只是内部可访问。
Corey Sunwold的答案非常明确。如果您还不知道,我只想补充几句话。如果final
用于对象引用,则意味着您无法将其更改为引用另一个对象,但对象本身仍然是可变的。例如
public final static List a = new ArrayList();
变量a
设置为引用ArrayList
的实例。您将无法将a
设置为另一个ArrayList
对象,但您仍然可以将元素添加到a
。
Java中的final
关键字并不意味着常量,并且不等同于C ++中的const
关键字。它确实意味着变量(原始),引用(对象),方法或类是最终的,不能进一步修改。
public final static int a;
它不属于任何实例并保持不变。
public final int a;
它是常量,不能在整个程序/应用程序中更改
public int a;
变量的正常声明,可以在任何时候通过应用程序/程序进行更改。
int a;
与public int a相同,默认情况下,未使用说明符声明的变量仍为public。所以,没有区别
static public void Method(){}
此方法不属于任何类的实例。
public void Method(){}
任何其他类都可以通过扩展(即在继承的帮助下)访问此方法。
private void Method(){}
此方法只能由其所属的类访问。因此在任何时候都不能被其他类访问。
有关访问说明符click here的更多信息有关继承click here的更多信息
我们做你的功课:
public final static int a;
a
是公开的,所以它可以从任何地方访问。这是最终的,所以它的价值在宣布后不能改变。它是静态的,因此它不属于Hello
类的实例,而属于类本身。
public class Hello {
public final static int a;
public final int a;
public int a;
int a;
static public void Method(){}
public void Method(){}
private void Method(){}
}
上面的声明和方法有什么区别? =>声明前4行,因为你没有给它分配任何东西。如果使用=(ex.int a = 3)赋值,则将其作为赋值语句调用。 最后三行是方法。他们的格式为: 访问修饰符(例如public)返回类型(例如,void)方法名称(ex.Method)参数(())body({})
声明和方法之间的区别是: - 声明:你声明了一些名字,但你还没有指定任何东西。 - 方法:执行体内代码的函数。
这里有两件事很棘手,第一:
public final static int a;
实际上这是静态变量的意思(不依赖于实例),然后是最终的,所以它的平均值应该在整个程序中保持不变,而且公共意味着它可以在内部和外部访问。
第二:
static public void Method() {}
与此方法相同,不与实例绑定,可在内部和外部访问