java 普通类中的静态方法

一个非静态类中有N多个方法,其中只有一个是静态的。
我想问的是,像TOMCAT,JBOSS之类的,在加载是,是把整个类都静态了还是只有这一个方法是静态的?
我关心的是加载时占用的内存。
-------------------
以下两个回答,我实在不知选哪位的好。当然有一位很热心,回答很多。表示感谢。但。。。

首先:类不可以标注static,也就是说没有“静态类”,但是类的成员、方法、块是可以标注static的
比如
public class YourClass{
public static int arg0=0; //这是个静态成员

{
//这是个静态块

}

public static void doSomething(){

//这是个静态方法

}

}

其次: 被标注为static的变量及方法可以脱离本类的实例使用,也就是说不需要实例化这个类就可以使用他的静态变量和方法
比如常用的:System.out.println(); (想想你在使用这个方法的时候是不是也没有实例化System对象,就是因为out是System的一个静态成员)

第三: 既然不需要实例化,就意味着这些静态的家伙在一开始就已经被放到内存里了(不然jvm要到哪里去找数据捏~),至于占用的内存,会根据实际情况而定
比如:int变量会占用8字节
Object对象占用8+4(引用)=12字节
每种类型占用的内容都是固定的追问

多谢回答。但是我不太同意你说的第一点。当然,类不能标记静态。但是你在使用System.out.println()时,明显先指向类“out”,再指向其下的println()方法。所以,就算类没静态,但这个静态方法有了类的标记。
那么我想问的就是,这个类的标记仅仅是个标记,还是它有一个实例化了的类,只是这个类下只有静态的方法?
是不是应该探讨下呢?

追答

我想可能是我解释的有些偏差

我想说的是,类的定义是不能标注static。但是如果一个类A做为类B的成员对象,那么在B中是可以用static来标注A的定义的

比如

public class A{    //如果这里写成public static class A 肯定编译不会通过的
    public void doSomethind(){}
}

public class B{
    public static A a=new A();
}

我们就可以直接调用B.a.doSomething(),因为a作为B的一个静态成员而存在,所以不需要我们去实例化,但是如果直接A.doSomething()就是出错,因为A的doSomething()没有被标注static

追问

看来是我说得不够清楚。
那就按你的例子说。
我们改改:

public class A{
public static void doSomethind(){}
。。。。
}

很明显,这样我们就可以直接使用a.doSomethind(),而不用NEW一个A出来了。
这样,回到我的问题上,a.doSomethind() 的这个 a 怎么来的?

追答

a是B的成员变量啊!
既然在A中定义了static doSomething,何必还要用B.a.doSomethind()
按你所说,System.out.println()中的println()也是静态方法喽?你可以试下直接用out.println()能否执行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-12
类不是静态的
静态方法是静态的。(无论实例多少个类,这个静态方法只固定占用一段内存)追问

请问有没更实在的更直观的例子或信息?

追答

可以用工具分析吧
这方面没研究过
你可以用可以查看内存的工具分析这个程序

本回答被网友采纳
第2个回答  推荐于2016-06-16

直接在普通类中定义静态方法,使用static进行修饰就可以了。

示例:

public class A{//定义一个普通类
   public static void s1(){//定义一个静态方法,使用static进行修饰
   }
}

相似回答