像各位大哥请教,我在做个网站,后台有很多类,请问方法可以用static来标示么?(如果可以,同时有很多线程在启用,是不是只维持一个实例,维持一个变量。希望解释的详细点。)要是不可以,每次调用方法都得new一下对象,怎么样控制资源,不让内存泄漏?
解决方案 »
- 关于HASHMAP 和while循环的查询效率问题
- 求各位大师指点:如何用java制作微博
- ----------关于首页静态化,如何把登陆等动态的东西包含进来?
- 请问这样的JSP程序员能找到工作吗?
- 引起tomcat服务荡掉的异常,请求帮忙?
- 紧急求救
- 请教大哥大姐们一个问题
- 关于forward跳转到action
- 高手急救:如何在tomcat中配置,使我的程序的地址:http://127.0.0.1:8080/com/usdl/login.jsp?language=ch&country=CN变成只需输入:htt
- 初学springmvc求助, 404 not found
- [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
- 递归问题
static关键字用来声明成员属于类,而不是属于类的对象。
1. static (类)变量
类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来。
2. static (类)方法
静态方法可以通过类名直接调用该方法,而不用通过对象调用。
例如:
class PersonCount {
private int personID; private static int num = 0; public PersonCount() {
num++;
personID = num;
} public static String getPersonDes() {
return "this is a policeman";
}
}class TestPersonCount {
public static void main(String[] args) {
// 直接用类名来访问该静态方法,而不需要该类的对象
String s = PersonCount.getPersonDes();
System.out.println(s);
}
}main()是静态的,因为它必须在任何实例化发生前被顺序地访问,以便应用程序的运行。
静态方法不能被覆盖成非静态。同样,非静态方法也不能被覆盖成静态方法。
3 "独身"设计模式
独身设计模式,也就是说一个类只产生一个对象。那么怎么才能做到这一点呢??我们知道构造器是用来构造对象的。首先要对构造器入手。既然只产生一个对象,那么我们就干脆先一刀砍断,把构造器的访问权限定义成私有,不能在类的外面再构造该类的对象。也就是说只能在类的里面调用该类的构造器来产生对象。那么在该类里应该定义一个静态的属性,并初始化该类的一个对象。(原因是静态的东西只执行一次,也就是说该属性只初始化一次。那么每次得到的应该是同一个实例)
class TestSC {
public static void main(String[] args) {
SingleClass sc1 = SingleClass.sc;
SingleClass sc2 = SingleClass.sc;
sc1.test();
sc2.test();
}
}class SingleClass {
int i = 0; static SingleClass sc = new SingleClass(); private SingleClass() {
} public void test() {
System.out.println("hello " + (++i));
}
}运行的结果为:
hello 1
hello 2
说明是同一个实例。
在类的设计的时候,我们也应该遵守封装的要求。把属性定义成私有的。再定义一个共有的方法来去到该属性的值。
改后的代码:
class TestSC {
public static void main(String[] args) {
SingleClass sc1 = SingleClass.getSingleClass();
SingleClass sc2 = SingleClass.getSingleClass();
sc1.test();
sc2.test();
}
}class SingleClass {
int i = 0; private static SingleClass sc = new SingleClass(); private SingleClass() {
} /*
* 因为在类的外面不能来构造给类的实例了, 所有该方法定义成静态的,通过类名直接可以调用。
*/
public static SingleClass getSingleClass() {
return sc;
} public void test() {
System.out.println("hello " + (++i));
}
}
如果还是经常内存溢出不妨考虑下BEA的Jrockit
而不参与数据处理的情况,你要是参与数据处理的话,在并发时会把数据搞的一团糟,要是同步的话恐怕你的网站响应速度会
慢吧,所以最好还是 new 的好,有JVM 的垃圾收集器,内存泄漏你应该不用太担心的。