A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chuanyueing 中级黑马   /  2013-3-8 12:25  /  2274 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.text;

interface Inter
{
        public static final int NUM=3;
        public abstract void show();
}

class Text implements Inter
{
        public void show(){}
}
public class Text3 {

        public static void main(String[] args) {
                Text t= new Text();
                System.out.println(t.NUM);
                System.out.println(Text.NUM);            //这里为什么可以用类名调用,不是静态的才可以吗?
                                                                        //而上面的Text类不是静态的,求解释下。
                System.out.println(Inter.NUM);

        }

}


10 个回复

倒序浏览
你的Test类实现了接口Inter, 在接口Inter中你第一了一个常量NUM,此常量属于类变量,因为接口是不能被实例化的,
当你第一次使用Test类的时候,就已经给NUM分配了内存空间,并初始化。所以NUM属于Test的类变量。
因此System.out.println(Text.NUM); 这句代码是可以通过类访问NUM的。
回复 使用道具 举报
静态成员是属于整个类的,在类加载进内存,静态就被加载了。也就是说,静态成员时类的一部分,就相当于呼吸是人的基本功能,随着出生就有的功能,所以是属于类自身的。当然可有通过类自己调用了。
回复 使用道具 举报
你见过静态的类?
只有成员才能被修饰为静态的,
你的代码中NUM是静态的啊,当然可以用实现接口的子类.NUM直接调用了
回复 使用道具 举报
在接口中定义的成员变量都是默认public static final类型的,还有在接口中方法都是abstract抽象的。当你用子类去实现它的时候,它就装进了内存。所以你是可以用类名来访问的
回复 使用道具 举报
贾文泽 发表于 2013-3-8 12:38
你见过静态的类?
只有成员才能被修饰为静态的,
你的代码中NUM是静态的啊,当然可以用实现接口的子类.NUM ...

你说到重点了,根本就没有静态类,thanks
回复 使用道具 举报
黄玉昆 发表于 2013-3-8 12:37
静态成员是属于整个类的,在类加载进内存,静态就被加载了。也就是说,静态成员时类的一部分,就相当于呼吸 ...

那这个静态NUM,是不在方法区当中?
回复 使用道具 举报
袁见 发表于 2013-3-8 12:37
你的Test类实现了接口Inter, 在接口Inter中你第一了一个常量NUM,此常量属于类变量,因为接口是不能被实例 ...

问题解决了,谢谢。
回复 使用道具 举报
1、类不能用静态修饰。
2、通过类名访问类中的成员是要求成员是静态的,而NUM是静态的。
回复 使用道具 举报
朱玺 发表于 2013-3-8 12:46
那这个静态NUM,是不在方法区当中?

没错,常量都在常量池中,常量池在方法区中,静态static也在方法区中
回复 使用道具 举报
黄玉昆 发表于 2013-3-8 13:35
没错,常量都在常量池中,常量池在方法区中,静态static也在方法区中

嗯,好的。谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马