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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 班志国 中级黑马   /  2012-10-13 09:53  /  2316 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 班志国 于 2012-10-21 08:52 编辑
  1. interface Inter
  2. {
  3.     public static final NUM=3;
  4.    public abstract void show();
  5. }
  6. class Test implements Inter
  7. {
  8.    public void show(){}
  9. }
  10. class InterDemo
  11. {
  12.      public static void main(String[] args)
  13.      {
  14.             Test t = new Test()
  15.              System.out.println(t.NUM);
  16.              System.out.println(Test.NUM);
  17.              System.out.println(Inter.NUM);//请问 这三种 打印 都对吗 生成几个class文件 为什么 解释下最后一个
  18.      }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
本帖最后由 章闽 于 2012-10-13 11:09 编辑

第一种会报错,如果注释掉了,第三种会打印,最后会生成3个class文件.
最后一个就是接口的静态变量,可以打印
回复 使用道具 举报
interface Inter
{
    public static final NUM=3;
   public abstract void show();
}
class Test implements Inter
{
   public void show(){}
}
class InterDemo
{
     public static void main(String[] args)
     {
            Test t = new Test()//这里木有;
             System.out.println(t.NUM);
             System.out.println(Test.NUM);
             System.out.println(Inter.NUM);//请问 这三种 打印 都对吗 生成几个class文件 为什么 解释下最后一个
     }
}
现在3种打印都会报错,漏洞爆出哦,一个都不会生成class文件
  public static final NUM=3;这一个NUM居然没有类型
要是改成  public static final int  NUM=3; 这样,第三种打印还可以打印。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁俊 黑马帝 2012-10-13 11:12:02
板凳
封号必须有啊
回复 使用道具 举报
  1. <p>interface Inter

  2. {

  3.     public static final NUM=3;//这里没有数据类型

  4.    public abstract void show();//注意中英文的切换

  5. }

  6. class Test implements Inter

  7. {

  8.    public void show(){}

  9. }
  10. /**
  11. *这儿说一句,你这个InterDemo类定义的没啥意义啊,你直接就用上面的Test类不就好了
  12. *省得在让这个类实现Inter接口,还要重写接口方法
  13. */
  14. /*interface Inter</p><p>{

  15.     public static final int num=3;

  16.    public void show();

  17. }

  18. class Test4 implements Inter

  19. {
  20.   public static void main(String[] args)
  21.   
  22.      {
  23.    Test4 t=new Test4();
  24.              System.out.println(t.num);

  25.              System.out.println(Test4.num);

  26.              System.out.println(Inter.num);

  27.      }
  28. public void show(){}

  29. }*/
  30. class InterDemo

  31. {

  32.      public static void main(String[] args)

  33.      {

  34.             Test t = new Test()

  35.              System.out.println(t.NUM);//可以打印

  36.              System.out.println(Test.NUM);//可以打印

  37.              System.out.println(Inter.NUM);//你想在一个类中调用接口中的常量,那你要实现这个接口啊

  38.      }

  39. }</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈俊来 发表于 2012-10-13 10:56
interface Inter
{
    public static final NUM=3;

貌似加了数据类型也打印不出来
回复 使用道具 举报
王乐 中级黑马 2012-10-13 13:18:28
7#
interface Inter
{
    public static final NUM=3;     
   public abstract void show();
}
class Test implements Inter
{
   public void show(){}
}
class InterDemo
{
     public static void main(String[] args)
     {
            Test t = new Test()
             System.out.println(t.NUM);
             System.out.println(Test.NUM);
             System.out.println(Inter.NUM);//请问 这三种 打印 都对吗 生成几个class文件 为什么 解释下最后一个
     }
}




NUM变量的定义没有声明类型
INTER接口SHOW方法的括号的输入格式是中文的。。。编译通不过
TEST类的对象创建没有分号结束
LZ要注意养成些代码的正确习惯啊


会生成INTER INTERDEMO TEST 这3个CLASS文件
因为随着主函数的运行。这3个类都需要被加载到内存。所以创建了类文件加载对象的CLASS文件

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
章闽 发表于 2012-10-13 10:39
第一种会报错,如果注释掉了,第三种会打印,最后会生成3个class文件.
最后一个就是接口的静态变量,可以打印 ...

第一种 是对象 调用  没错
回复 使用道具 举报
修改后: public static final int num=3;
生成3个class文件,interface也是生成class文件,num为静态,接口名可以调用成员,所以可以Inner.num.
回复 使用道具 举报
代码改错之后,三种打印都能输出结果。
在接口中的常量都有public static final 进行修饰,这样的变量通常当做全局变量时候,所以一般都采用接口(类)名.调用。
接口是特殊的抽象类。所以必定会生成三个class文件。
回复 使用道具 举报
package com.wenfengkeji.heima;

interface Inter
{
    public static final int NUM=3;
   public abstract void show();
}
class Test implements Inter
{
   public void show(){}
}
class Demo19
{
     public static void main(String[] args)
     {
            Test t = new Test();
             System.out.println(t.NUM);                     //都能够正常打印啊             System.out.println(Test.NUM);
             System.out.println(Inter.NUM);//请问 这三种 打印 都对吗 生成几个class文件 为什么 解释下最后一个
             System.out.println(Inter.class);
             System.out.println(Test.class);
             System.out.println(Test.class == t.getClass());   一共两份class   没算主函数所在Demo19类,若算所有被加载的那lang包里的多了去了
     }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马