|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。对象边城狂人
Java类中类属性(static变量)和对象属性(非static变量)的初始化按次能够用以下程序测试:
/**
*@(#)Test.java
*@authorfancy
*/
publicclassTest{
staticStringa="string-a";
staticStringb;
Stringc="stirng-c";
Stringd;
static{
printStatic("beforestatic");
b="string-b";
printStatic("afterstatic");
}
publicstaticvoidprintStatic(Stringtitle){
System.out.println("---------"+title+"---------");
System.out.println("a=""+a+""");
System.out.println("b=""+b+""");
}
publicTest(){
print("beforeconstructor");
d="string-d";
print("afterconstructor");
}
publicvoidprint(Stringtitle){
System.out.println("---------"+title+"---------");
System.out.println("a=""+a+""");
System.out.println("b=""+b+""");
System.out.println("c=""+c+""");
System.out.println("d=""+d+""");
}
publicstaticvoidmain(String[]args){
newTest();
}
}
起首,我把main()办法正文失落,运转了局以下:
---------beforestatic---------
a="string-a"
b="null"
---------afterstatic---------
a="string-a"
b="string-b"
java.lang.NoSuchMethodError:main
Exceptioninthread"main"
Processcompleted.
然后,作废对main()办法的正文,运转了局以下:
---------beforestatic---------
a="string-a"
b="null"
---------afterstatic---------
a="string-a"
b="string-b"
---------beforeconstructor---------
a="string-a"
b="string-b"
c="stirng-c"
d="null"
---------afterconstructor---------
a="string-a"
b="string-b"
c="stirng-c"
d="string-d"
由此能够看出Java类属性和对象属性的初始化按次以下:
①类属性(静态变量)界说时的初始化,如上例的staticStringa="string-a";
②static块中的初始化代码,如上例static{}中的b="string-b";
③对象属性(非静态变量)界说时的初始化,如上例的Stringc="stirng-c";
④机关办法(函数)中的初始化代码,如上例机关办法中的d="string-d";
在此过程当中②和③的按次无所断定,由于在静态块中没法打印出非静态变量。一样是由于这个缘故原由,晓得他们的按次对我们写程序也毫无匡助。再由于类成员(静态成员)是在第一次利用到类的时分就举行了响应的初始化,而对象成员(非静态成员)则必要天生类实例(即对象)时才干初始化,以是我把③排在了②的前面。再声名一次,它们事实谁先谁后,从代码上是不克不及断定的,生怕必要往研讨一下JVM(Java假造机)的实行历程才行。
以下是一些回帖的会商:
我对狂人教程"对象成员(非静态成员)则必要天生类实例(即对象)时才干初始化"有些意见!比方你在例程中界说的两个对象成员变量Stringc="stirng-c";
Stringd;我以为当程序实行这个Test类的时分,成员变量(不包含机关函数)和类成员变量一样,都要装载到内存。如许对象成员变量就能够被机关函数所挪用。可是事实静态变量和非静态变量哪一个先实行能够看在代码中的前后按次,可是这关于编写代码来讲并没有多年夜的用途!
--小猪努努
static
{
printStatic("beforestatic");
b="string-b";
printStatic("afterstatic");
}在e第一次利用而d进r绦校抑绦幸淮巍!!!!
--caterpillar
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。 |
|