0 0

构造器虚拟机实现是不是static的?10

记忆中的印象构造器应该是默认static的
今天上课跟同学讨论的时候
他说:“如果构造器是static的话,那么它里面的字段和方法都必须是static的,但其实我们使用的时候并不是这样的。”
这句话把我整懵了,到底虚拟机是怎么实现构造器的?
如果真是默认static的,那么里面的字段,方法又怎么解释?
问题补充:
我刚查资料了的,构造器其实就是static的,那这个问题就变成了:为什么我们能在static的构造方法里调用非static的字段和方法?
问题补充:
编程思想上面,具体位置我忘了,因为我有个看书记笔记的习惯,我翻了我的笔记是这么写的
问题补充:
我只是想问,其他的static方法不能访问非static字段和方法,但是构造方法为什么可以?这个真的是底层实现而不需要我们关心吗?
2009年4月02日 13:27

5个答案 按时间排序 按投票排序

0 0

你们说的要是是Java,是其中每个类都有的<init>方法的话,那个确实是静态的没错。但就Java语言的语法/语义定义而言,构造器就不是静态的。举例来说,java.lang.Object中的public Object() { ... }并不是静态的,但由它生成的代码java.lang.Object::<init>()则是静态方法。

2009年4月02日 20:24
0 0

创建新实例时,只给实例变量分配内存。

而实例方法在运行时动态绑定到对象的,骨子里还是个“静态方法”……

2009年4月02日 19:34
0 0

构造器是指构造函数吧?

静态其实比较好理解:new SomeClass() 就是 SomeClass.newInstance() ……

静态方法一般不能访问实例变量,但是这个方法归虚拟机管,解释权在它手里……它让访问哪个实例都行。

其实,“实例方法”是不会被实例化的 -__-,我的理解是隐藏了实例这个参数的静态方法……

所以有人说面向对象是语法糖。

2009年4月02日 19:30
0 0

cantellow 写道
我刚查资料了的,构造器其实就是static的

求资料出处

2009年4月02日 19:07
0 0

先不谈虚拟机的问题。楼主所指的构造器是Java里普通的构造器么?是的话那个总是非静态的。
Java里能做初始化的结构很多,下面的代码里有一堆:

public class Foo {
    private static char bar = 'a'; // static field initializer
    
    // a static initialization block
    static {
        bar = 'b';
    }
    
    // another static initialization block
    static {
        bar = 'c';
    }

    private int baz = 1; // member field initializer
    
    // an anonymous constructor
    {
        baz = 2;
    }
    
    // another anonymous constructor
    {
        baz = 3;
    }
    
    // constructor
    public Foo() {
        baz = 4;
    }

    public int getBaz() {
        return baz;
    }

    public static void main(String[] args) { 
        Foo f = new Foo();
        System.out.printf("bar = %c, baz = %d\n", Foo.bar, f.baz);
        // bar = c, baz = 4
    }
}

2009年4月02日 16:20

相关推荐

    千方百计笔试题大全

    17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一...

    java面试宝典

    17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一...

    java面试宝典2012版.pdf

    19、构造器Constructor是否可被override? 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 21、写clone()方法时,通常...

    java基础题 很全面

    31. 构造器Constructor是否可被override? 10 32. 是否可以继承String类? 11 33. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 11 34. try {}里有一个return语句,那么紧跟在这个try后的...

    java面试题

    30. 构造器Constructor是否可被override 15 31. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 16 32. 应用服务器与WEB SERVER的区别? 16 ...

    最新Java面试宝典pdf版

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    Java面试笔试资料大全

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    Java面试宝典2010版

    19、构造器Constructor是否可被override? 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 21、写clone()方法时,通常...

    JAVA面试宝典2010

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    Java面试宝典-经典

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    java面试题大全(2012版)

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    java面试宝典2012

    19、构造器Constructor是否可被override? 16 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,...

    Java面试宝典2012版

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时...

    Java面试宝典2012新版

    19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java常见面试题整理出来了

    ①抽象类里可以有构造方法,而接口内不能有构造方法。 ②抽象类中可以有普通成员变量,而接口中不能有普通成员变量。 ③抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

Global site tag (gtag.js) - Google Analytics