cc06208
cc06208
采纳率0%
2015-10-15 01:07

Java中静态方法在内存的位置?

最近在复习JAVA的内存知识。静态变量是加载在方法区的,内存分配即在方法区,当创建类的时候堆里有静态变量的指向地址,然后栈内的对象可以通过堆内地址找到该静态变量,为大家共用。
那静态方法呢?也是在方法区中分配内存吗?是随着类的加载而初始化的吗?但是我测试的如下运行代码,却并没有运行此静态方法。
package com.learn.java.cc;

class Static1{

static void sys1(){
    System.out.println("hello!");
}

}

public class StaticDemo {
public static void main(String[] args){
Static1 s = new Static1();
}

}
求解?
原因:感谢各位的回答,在类中还有一个叫做静态代码块和构造代码块(即没有静态修饰的只被{}的代码),创建对象的时候会默认先加载静态代码块和构造代码块,这里的print会被打印出来,然后加载构造方法,而本类中的静态方法只是在调用的时候才被使用。
package com.learn.java.cc;

class Static1{
{
System.out.println("hello2!");
}
static{
System.out.println("hello1!");
}

static void sys1(){
    System.out.println("hello3!");
}

}

public class StaticDemo {
public static void main(String[] args){
Static1 s = new Static1();
}

}

结果:
hello1!
hello2!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • havedream_one havedream_one 6年前

    静态方法和普通方法是一样的,只有调用的时候才会使用,方法不存在什么初始化的。
    调用方法的时候,静态方法和普通方法生成的字节指令是不一样的,所以这样就可以辨别出你调用的是静态方法还是普通方法

    点赞 评论 复制链接分享
  • wojiushiwo945you 毕小宝 6年前

    java的方法,都被编译成字节码了,作为类的类型信息保存在.class文件中。
    静态方法不需要初始化,方法的本质就是一系列的字节码(也就是执行指令),只有类才需要初始化,方法不会被初始化的。
    建议看看深入浅出JVM,了解下字节码的组成,以及java代码的执行流程。

    点赞 评论 复制链接分享
  • lzp_lrp WorldMobile 6年前
    点赞 评论 复制链接分享
  • supertechman supertechman 3月前

    所以最终的答案是?

    点赞 1 评论 复制链接分享
  • BunnyCoffer BunnyCoffer 4年前

    静态方法属于类所有,类放在堆里

    点赞 评论 复制链接分享

相关推荐