在应用程序中,有专门的静态区来存放静态的变量和方法,当你一个类初始化时,里面如果有静态变量或者方法,那么它先看静态区中有没有这个静态变量,如果有的话,直接使用这个变量,如果没有则在静态区中申请新的空间来存储变量,所以引用的时候,如果修改了一个类的静态变量,再次申请一个新的类实例时他的静态变量的值,和原有的实例的值是相同的。但是在applacation中,每个变量的生命周期不同,所以不是所有的静态变量都能像Web中那样,我觉得Web中就好像一个程序始终在运行着,所以创建的实例始终在内存中,和Scope相关,如果你要在Applacation中使用静态变量像在Web中一样,你要保证你的静态实例不被destroy。
这是我的理解。
你的例子改成这样就只打印一次了。
public class Hello
{
private static String str;
public static void doTest()
{
if(str==null)
{
str = "Hello";
System.out.println("init str......" +str);
}
}
public static void main(String[] args){
Hello h1 = new Hello();
h1.doTest();
Hello h2 = new Hello();
h2.doTest();
}
}
这是我的理解。
你的例子改成这样就只打印一次了。
public class Hello
{
private static String str;
public static void doTest()
{
if(str==null)
{
str = "Hello";
System.out.println("init str......" +str);
}
}
public static void main(String[] args){
Hello h1 = new Hello();
h1.doTest();
Hello h2 = new Hello();
h2.doTest();
}
}
解决方案 »
- 天啊!为什么?为什么每次都报错!我受不了javaweb的配置了,原本想学软件,学桌面应用方面的,学校学着学者就学到javaweb,这完全是网路方面的。
- 用JAVA做网站要学些什么??
- 类对象返回值问题
- 【求助】关闭窗口时session失效(模式对话框的情况)
- 多个input如何用JS获取他们的值wayList为一个list得出结果在本页面显示
- [200分] 解决了给两百分。
- 一个JAVABEAN访问相对路径文件的问题
- 一JSP网站,统一指定一个errorPage页面,统一处理异常,在指定的errorPage页面中,我想知道具体是哪个页面出错的,即想知道出错页面的具
- No property findDistinctEsBlogByTitle found for type EsBlog
- springboot+openoffice 实现在线预览,怎么禁用预览页面的下载和打印按钮?
- 简单问题,高手扎实的人请进!
- 动态菜单
而我想要的结果是再次运行的话就不打印这个语句了,因为静态对象在上次运行的时候已经创建,所以if(str==null)不成立,不知道能不能实现。
,*********, , ,@@,
.****+++****,*: ,WW.
,***:.,,,.+****+ ,WW.
***., ,:***+ ,WW.
.**: ****+ ,WW.
+*+, ,.+++. :@@*, +@@:,WW.*@*.#@:
**: ,,,,,WWWWWW: ,WWWWWWWW.#WWWWWWW,+++,
,**: @WW@*WW. WWW**WWWW.#WWW#*WW* ::
,**: WWW*,.., #WW:,,.@WW.#WW+.,+WW,. .
+*+, .WWWW+, WW+, .WW.#W@. .WW,+#
.**, ,:WWWWW:,WW: ,WW.#W@, .WW,@@,
,***, ., ,.:#WWW.WW*, .WW.#W#, .WW.#+,
.***, +**, +,,,WWW:+WW. WWW.#W#, .WW. ,
,.*****+*****. WWWWWWW.,WWWWWWWWW.#W#, .WW,**,
,.********+., :WWWWWW+, .@WWWW@WW.#W#, .WW,**
,.+++++:, ,.:++:., ,:++:.++..++, ,++,,,
,,,,, ,,,, ,,, ,,,,,, ,,
用http://bbs.soulsky.net/pub/ascii/做的。
而一个应用程序和一个容器属于同一级,如果你想实现这个的话,那么也要有个应用程序来一直维持这些已经加载的类,不然它是不会孤立而且还一直存在的。
这时候jvm的一个实例也会启动,随后就是jvm读取byte code, 分配内存,开始执行,main方法结束后,jvm也就退出。 当你再次在控制台中输入:java Hello
就会重复上述过程,所以那句话还会打印