Java:证明在接口中的域隐式地是static和final的

证明在接口中的域隐士地是static和final的

首先,我们都明白,Java的接口,默认的域都是static和final的,而方法默认的也是public的,那么怎么确定呢?

对于final,这个比较简单,直接改写该域,如果可以,则不是final修饰,如果不能,则是final修饰。

对于static,其实也是一样,如果可以直接访问,那么则是static修饰的,如果不能,则说明不是static修饰的。

除了上面的方法外,还有一种,使用Java的反射机制。

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test 
{
	interface TestInterface{
		int data = 1;
		void test();
	}
	public static void main(String[] args)
	{
		try{
			Class obj = TestInterface.class;
			Field field = obj.getField("data");
			System.out.println("修饰符:"+Modifier.toString(field.getModifiers()));
			Method method = obj.getMethod("test", null);
			System.out.println("修饰符:"+Modifier.toString(method.getModifiers()));

        }catch(Exception e){
            e.printStackTrace();
        };
	}
}

具体就无需解释,运行结果如下:

修饰符:public static final
修饰符:public abstract

第二种办法:

final的:

package  caofeng;
 
interface  t12 {
     int  ONE =  1 , TWO =  2 ;
}
 
public  class  Test4 {
     public  static  void  main(String args[]) {
         // t12.ONE--;说明是final域
     }
}


static的:

public  class  InterfaceDemo  implements  T12 {
 
     public  static  void  main(String[] args) {
         System.out.println(InterfaceDemo.ONE);
     }
}
 
interface  T12 {
     int  ONE =  1 , TWO =  2 ;
}
非静态的域必须用实例名才能引用其域,用类名或接口名引用它就会编译错误,只有静态的域才能直接类名或接口名直接引用。t12.ONE 这个引用没有错,已经证明了ONE是静态的,因为t12不是实例名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值