use*_*246 44 java static constructor
我不明白为什么main方法必须是静态的.我理解静态变量,但我很难掌握静态方法.是否存在静态方法,以便可以在两个不同的类中创建两个具有相同名称的方法,这些方法不会相互冲突?
另外,我不明白为什么我不能创建静态构造函数.
谁能帮助解释这个概念?
小智 84
Java有 [静态构造函数] 静态初始化块,可以看作是"静态构造函数":
class Foo {
static String Bar;
static {
// "static constructor"
Bar = "Hello world!";
}
}
Run Code Online (Sandbox Code Playgroud)
在任何情况下,主类中唯一必须是静态的main方法是方法.这是因为在没有首先创建"主类"的实例的情况下调用它.一种常见的技术,也是我喜欢的技术,是快速摆脱静态环境:
class Main {
int argCount;
// constructor
public Main (String[] args) {
// and back to boring ol' non-static Java
argCount = args.length;
}
void runIt () {
System.out.println("arg count: " + argCount);
}
// must be static -- no Main instance created yet
public static void main (String[] args) {
Main me = new Main(args);
me.runIt();
}
}
Run Code Online (Sandbox Code Playgroud)
而且,静态与"名字冲突"无关.静态方法(或可变的)仅仅是一个的方法(或可变的)不与一种类型的特定实例相关联.我建议阅读Classes and Objects Java Tutorial以及Understanding Instance和Class Variables一节.
快乐的编码.
sre*_*ram 25
我分享的原因之一是"为什么java构造函数不是静态的".
简单地说,"java构造函数总是非静态的"因为,
构造函数的目的只是初始化/构造对象,并使继承成为可能.要做到这些,我们需要使用两个有用的java关键字(兼非静态变量),例如this和super.我们将使用'this'来初始化对象.我们/ Java将使用super(ofcourse super())来调用超类构造函数,以便首先创建超级对象(或Object类),然后创建子对象(因此继承)如果构造函数是静态的,那么我们不能使用这两个关键字(构造函数内部的非静态变量(我们知道非静态的东西不能从静态上下文中引用)
所以java构造函数不应该是静态的.
静态方法属于类,而不是对象.main方法必须是静态的,因为在执行任何其他代码实例化任何对象之前,首先调用它.它提供了该程序的入口点.从对象的容器外部调用静态方法.静态类变量也是如此.整个类只存在一个副本,而不是成员变量,该变量为从类创建的每个对象创建一次.它们用于存储类的数据,例如已创建但未销毁的对象实例数.此数据属于该类.静态方法的一个很好的例子是单例模式,其中构造函数是私有的,只能由静态成员函数访问.类外的函数将无法复制此功能.此方法作用于类数据和对象,因此逻辑上属于同一个类.这一切都归结为封装.一个类只对自己负责,只知道自己.
另一方面,对象方法意味着对与类的一个实例(对象)相关联的数据进行操作.构造函数是用于初始化对象并将其数据设置为初始状态的代码.在分配内存以存储新对象后立即(并自动)执行它们.即使您没有明确定义构造函数,也会执行一种"默认构造函数",以便将对象的成员变量和对象的方法代码映射到新对象.
希望这可以帮助.
构造函数用于创建对象.
静态通常对于所有对象都是相同的.
因此,如果我们有静态构造函数,则创建一个对象会影响所有其他现有对象.
静态方法仅引用静态变量.因此,您为创建对象提供的所有初始参数都将针对所有对象进行更改.没有必要创建类似的对象.
希望这可以帮助.... :)
| 归档时间: |
|
| 查看次数: |
71708 次 |
| 最近记录: |