概述
静态变量或方法:
就是以static修饰的变量或方法, 如static int count; 它的意义是让系统分配一个静态空间给这个变量count, 那么包含这个变量的类的全部实例就会共用这个变量, 任何一个改变了count都会对其余的实例产生影响, 它是在文件编绎时就被初始化的, 比一切其它non-static 变量都要早;
non-static 变量就是:
每一个类实例都有自己的count, 任何实例的改变都不会影响到其它的实例的count(也就是分配了各自的空间), 它们是第一次使用的时候才被初始化的
静态变量与非静态变量的区别如下: 1.内存分配 静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡; 而非静态变量需要被实例化后才会分配内存。 2.生存周期 静态变量生存周期为应用程序的存在周期; 非静态变量的存在周期取决于实例化的类的存在周期。 3.调用方式 静态变量只能通过“类.静态变量名”调用,类的实例不能调用; 非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。 4.共享方式 静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值; 非静态变量是局部变量,不共享的。 5.访问方式 静态成员不能访问非静态成员; 非静态成员可以访问静态成员。
其中为什么静态方法不能访问非静态属性?JAVA举例如下:
分析原因如下:
静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,不知道引用的是哪个对象的非静态方法,所以编译器会在这种时候给各错误. 修改如下:
package com.deppon.tps.module;
public class Test3 {
//非静态变量
int a1=6;
//静态方法
public static void main(String[] arg){
System.out.print((new Test3()).a1);
}
}
或者修改为静态变量如下:
package com.deppon.tps.module;
public class Test3 {
//静态变量
public static int a1=6;
//静态方法
public static void main(String[] arg){
System.out.print(a1);
}
}
注:单例是不安全的,会导致属性重复使用,举例如下:
如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。
因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package
com.lavasoft.demo.web.controller.lsh.ch5;
import
org.springframework.context.annotation.Scope;
import
org.springframework.stereotype.Controller;
import
org.springframework.ui.ModelMap;
import
org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by Administrator on 14-4-9.
*
* @author leizhimin 14-4-9 上午10:55
*/
@Controller
@RequestMapping(
"/demo/lsh/ch5"
)
public
class
MultViewController {
private
int
index =
0
;
//非静态
@RequestMapping(
"/show"
)
public
String
toShow(ModelMap model) {
System.out.println(++i);
return
"/lsh/ch5/show"
;
}
@RequestMapping(
"/test"
)
public
String
test() {
return
"/lsh/ch5/test"
;
}
}
|
改为多例的(就是在class上面加一个@Scope("request")):
最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。
最后
以上就是典雅煎饼为你收集整理的静态变量与非静态变量的区别的全部内容,希望文章能够帮你解决静态变量与非静态变量的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复