声明main函数时前面一定要加static吗? 我知道去掉不能编译 错了 去掉也能编译入口函数么 没必要让java虚拟机生成这个类的实例 然后再调用main吧你觉得有必要么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java概念,类方法,main是类方法,类方法必须要static,没有就是实例的方法了 加也可以,不加也可以,就是个名字.作为应用软件用,在所有的程序中必须有一个main 必须加,不然程序不知道从那开始,一般情况下,你吧它当一个函数,方法,什么都可以不加.但你做函数,方法的时候没必要用这个main来命名. 只要知道static的具体含义,你就知道main为什么要加上static了加上static后你不用实例化对象也能够访问对象的方法 Static的含义就是静态标志只有写上static编译的时候才能执行举个例子:1 || public class test{ 2 || int i = 0; 3 || static int i2 = 1; 4 || public static void main(String args[]){ 5 || // System.out.println(i); 6 || System.out.println(i2); 7 || } 8 || } 这样写是对的,若不注销第5句,那肯定是找不到i这个变量的,为什么?先搞懂这段程序的执行顺序! 程序编译好后,先执行第3句,因为有static然后执行第4句,一样有static所以,i2就能初始化,而i就在整个程序中没有执行到,就没有i这个引用!不知道搂主明白否? 静态修饰符:static frhwxx讲的真不错啊! frhwxx(笑对^_^人生) 说的很详细,它举的例子很好。 静态数据的初始化若数据是静态的(static),那么同样的事情就会发生;如果它属于一个基本类型(主类型),而且未对其初始化,就会自动获得自己的标准基本类型初始值;如果它是指向一个对象的句柄,那么除非新建一个对象,并将句柄同它连接起来,否则就会得到一个空值(NULL)。如果想在定义的同时进行初始化,采取的方法与非静态值表面看起来是相同的。但由于static值只有一个存储区域,所以无论创建多少个对象,都必然会遇到何时对那个存储区域进行初始化的问题。下面这个例子可将这个问题说更清楚一些://: StaticInitialization.java// Specifying initial values in a// class definition.class Bowl { Bowl(int er) { System.out.println("Bowl(" + er + ")"); } void f(int er) { System.out.println("f(" + er + ")"); }}class Table { static Bowl b1 = new Bowl(1); Table() { System.out.println("Table()"); b2.f(1); } void f2(int er) { System.out.println("f2(" + er + ")"); } static Bowl b2 = new Bowl(2);}class Cupboard { Bowl b3 = new Bowl(3); static Bowl b4 = new Bowl(4); Cupboard() { System.out.println("Cupboard()"); b4.f(2); } void f3(int er) { System.out.println("f3(" + er + ")"); } static Bowl b5 = new Bowl(5);}public class StaticInitialization { public static void main(String[] args) { System.out.println( "Creating new Cupboard() in main"); new Cupboard(); System.out.println( "Creating new Cupboard() in main"); new Cupboard(); t2.f2(1); t3.f3(1); } static Table t2 = new Table(); static Cupboard t3 = new Cupboard();} ///:~Bowl允许我们检查一个类的创建过程,而Table和Cupboard能创建散布于类定义中的Bowl的static成员。注意在static定义之前,Cupboard先创建了一个非static的Bowl b3。它的输出结果如下:Bowl(1)Bowl(2)Table()f(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()f(2)Creating new Cupboard() in mainBowl(3)Cupboard()f(2)Creating new Cupboard() in mainBowl(3)Cupboard()f(2)f2(1)f3(1)static初始化只有在必要的时候才会进行。如果不创建一个Table对象,而且永远都不引用Table.b1或Table.b2,那么static Bowl b1和b2永远都不会创建。然而,只有在创建了第一个Table对象之后(或者发生了第一次static访问),它们才会创建。在那以后,static对象不会重新初始化。初始化的顺序是首先static(如果它们尚未由前一次对象创建过程初始化),接着是非static对象。大家可从输出结果中找到相应的证据。在这里有必要总结一下对象的创建过程。请考虑一个名为Dog的类:(1) 类型为Dog的一个对象首次创建时,或者Dog类的static方法/static字段首次访问时,Java解释器必须找到Dog.class(在事先设好的类路径里搜索)。(2) 找到Dog.class后(它会创建一个Class对象,这将在后面学到),它的所有static初始化模块都会运行。因此,static初始化仅发生一次——在Class对象首次载入的时候。(3) 创建一个new Dog()时,Dog对象的构建进程首先会在内存堆(Heap)里为一个Dog对象分配足够多的存储空间。(4) 这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值(零用于数字,以及boolean和char的等价设定)。(5) 进行字段定义时发生的所有初始化都会执行。(6) 执行构建器。正如第6章将要讲到的那样,这实际可能要求进行相当多的操作,特别是在涉及继承的时候。Thinking in Java ... 自己多看看。 只要知道static的具体含义,你就知道main为什么要加上static了加上static后你不用实例化对象也能够访问对象的方法 是这样的, java 作为一个调用者,要调用 a.class但必须把 a.class放到 jvm中才行啊! 我用反证法证明一下吧! 1 如果 a.class中main不设为 static 2 根据 不同的类的函数访问原则 3 java这个看成一个类吧! 是不能访问 a.class中的 main函数 ,(因为内存中还没有a.class啊!) JavaEE-web语音 域名绑定网站问题 用update set where之后数据库相应的字段变成了null.....求教大家,给个答案吧 java和主机托管 eclipse中启动tomcat出现异常 有偿求救 Web自动化测试方案 求树型菜单(动态数据库)!! 如何设置端口不用的虚拟主机(tomcat) 请教高手:jsp配置问题 java怎样计算两个日期之间的差 大量(2-3g)orreily电子书免费下载,www.icuc.cn,我看你顶不你?!喜欢的话记住顶,让其他的朋友也看到。
作为应用软件用,在所有的程序中必须有一个main 必须加,不然程序不知道从那开始,一般情况下,你吧它当一个函数,方法,什么都可以不加.
但你做函数,方法的时候没必要用这个main来命名.
加上static后你不用实例化对象也能够访问对象的方法
2 || int i = 0;
3 || static int i2 = 1;
4 || public static void main(String args[]){
5 || // System.out.println(i);
6 || System.out.println(i2);
7 || }
8 || } 这样写是对的,若不注销第5句,那肯定是找不到i这个变量的,为什么?先搞懂这段程序的执行顺序! 程序编译好后,先执行第3句,因为有static
然后执行第4句,一样有static
所以,i2就能初始化,而i就在整个程序中没有执行到,就没有i这个引用!
不知道搂主明白否?
若数据是静态的(static),那么同样的事情就会发生;如果它属于一个基本类型(主类型),而且未对其初始化,就会自动获得自己的标准基本类型初始值;如果它是指向一个对象的句柄,那么除非新建一个对象,并将句柄同它连接起来,否则就会得到一个空值(NULL)。
如果想在定义的同时进行初始化,采取的方法与非静态值表面看起来是相同的。但由于static值只有一个存储区域,所以无论创建多少个对象,都必然会遇到何时对那个存储区域进行初始化的问题。下面这个例子可将这个问题说更清楚一些:
//: StaticInitialization.java
// Specifying initial values in a
// class definition.class Bowl {
Bowl(int er) {
System.out.println("Bowl(" + er + ")");
}
void f(int er) {
System.out.println("f(" + er + ")");
}
}class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int er) {
System.out.println("f2(" + er + ")");
}
static Bowl b2 = new Bowl(2);
}class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int er) {
System.out.println("f3(" + er + ")");
}
static Bowl b5 = new Bowl(5);
}public class StaticInitialization {
public static void main(String[] args) {
System.out.println(
"Creating new Cupboard() in main");
new Cupboard();
System.out.println(
"Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
} ///:~Bowl允许我们检查一个类的创建过程,而Table和Cupboard能创建散布于类定义中的Bowl的static成员。注意在static定义之前,Cupboard先创建了一个非static的Bowl b3。它的输出结果如下:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)static初始化只有在必要的时候才会进行。如果不创建一个Table对象,而且永远都不引用Table.b1或Table.b2,那么static Bowl b1和b2永远都不会创建。然而,只有在创建了第一个Table对象之后(或者发生了第一次static访问),它们才会创建。在那以后,static对象不会重新初始化。
初始化的顺序是首先static(如果它们尚未由前一次对象创建过程初始化),接着是非static对象。大家可从输出结果中找到相应的证据。
在这里有必要总结一下对象的创建过程。请考虑一个名为Dog的类:
(1) 类型为Dog的一个对象首次创建时,或者Dog类的static方法/static字段首次访问时,Java解释器必须找到Dog.class(在事先设好的类路径里搜索)。
(2) 找到Dog.class后(它会创建一个Class对象,这将在后面学到),它的所有static初始化模块都会运行。因此,static初始化仅发生一次——在Class对象首次载入的时候。
(3) 创建一个new Dog()时,Dog对象的构建进程首先会在内存堆(Heap)里为一个Dog对象分配足够多的存储空间。
(4) 这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值(零用于数字,以及boolean和char的等价设定)。
(5) 进行字段定义时发生的所有初始化都会执行。
(6) 执行构建器。正如第6章将要讲到的那样,这实际可能要求进行相当多的操作,特别是在涉及继承的时候。
Thinking in Java ... 自己多看看。
加上static后你不用实例化对象也能够访问对象的方法
java 作为一个调用者,要调用 a.class
但必须把 a.class放到 jvm中才行啊!
我用反证法证明一下吧!
1 如果 a.class中main不设为 static
2 根据 不同的类的函数访问原则
3 java这个看成一个类吧! 是不能访问 a.class中的 main函数 ,(因为内存中还没有a.class啊!)