- 浏览: 254584 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
在interface里面的变量默认都是public static final 的。所以可以直接省略修饰符:
String param="ssm";//变量需要初始化
为什么接口要规定成员变量必须是public static final的呢?
答:
首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public 的 ,是所有实现类共有的 .否则具体实现类不能使用该变量,则就没有了定义的意义。
static的原因是,假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?所以必须定义成static的,以便区分。
例如一个类实现了两个不同的接口,这两个接口中有相同名字的变量定义,示例代码如下:
public class MultiInmpl implements InTF, InTFOther{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MultiInmpl m = new MultiInmpl();
//如果实现的接口中有同名的变量,则不能引用
System.out.println(m.str);//str在2个接口中都有定义
}
}
以上代码编译错误!!!
Multiple markers at this line
- The field m.str is ambiguous
- Line breakpoint:MultiInmpl [line: 11] - main(String[])
其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。
String param="ssm";//变量需要初始化
为什么接口要规定成员变量必须是public static final的呢?
答:
首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public 的 ,是所有实现类共有的 .否则具体实现类不能使用该变量,则就没有了定义的意义。
static的原因是,假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?所以必须定义成static的,以便区分。
例如一个类实现了两个不同的接口,这两个接口中有相同名字的变量定义,示例代码如下:
public class MultiInmpl implements InTF, InTFOther{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MultiInmpl m = new MultiInmpl();
//如果实现的接口中有同名的变量,则不能引用
System.out.println(m.str);//str在2个接口中都有定义
}
}
以上代码编译错误!!!
Multiple markers at this line
- The field m.str is ambiguous
- Line breakpoint:MultiInmpl [line: 11] - main(String[])
其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。
发表评论
-
servletcontext 的获取
2013-05-12 20:10 480容器在初始化servlet时,会为其注入servletconf ... -
取得下一个sequence。 getNextInterval
2013-03-15 11:47 9431. 初始sequence值放置于数据库。 2. 启动时产 ... -
java 脚本,编译与注解处理
2013-02-05 10:04 8571.java中支持脚本调用 通过脚本引擎来执行。 Obj ... -
java 安全管理器
2013-02-04 11:24 8351.在java语言实现中,扩展和系统加载器都是java实现的, ... -
RMI 底层实现
2013-01-28 16:43 9181. server端代码: Registry regist ... -
Java获取当前路径
2013-01-22 18:12 899无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 ... -
java1.5 新特性
2013-01-10 16:50 768"JDK1.5"的一个重要主题就是通过新增 ... -
import static静态导入
2013-01-10 12:12 850import static静态导入是JDK1.5中的新特性。一 ... -
类加载器加载的类的访问权限问题
2013-01-04 15:34 10591.父加载器加载的类不能访问子加载器加载的类。 (向下可见性) ... -
java 内部类总结
2012-12-28 12:31 748主要从分类和使用情境来看 1. 普通内部类。 位置: 在 ... -
java构造函数和静态变量的执行顺序
2012-12-18 11:18 1042java初始化顺序 1在new B一个实例时首先要进行类的装载 ... -
Java多线程之Condition接口的实现
2012-11-26 17:03 950在实际中一个lock可产生多个Condition对象。个人认为 ... -
java线程同步原理(lock,synchronized)
2012-11-26 14:26 1002一。 java线程同步原理 java会为每个object对象分 ... -
总结下java中abstract,interface,final,static,加深理解
2012-11-16 17:16 893一,抽象类:abstract 1,只要有一个或一个 ... -
为什么interface的变量必须是public final static的
2012-11-16 17:15 1019public 感觉是因为Java对接口的要求是所有类都可以实现 ... -
stack在排序的应用
2012-10-22 17:04 726对于list, 可用Collections的静态方法 Coll ... -
随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
2012-09-25 14:59 1579RandomAccessFile RandomAccessF ... -
Java 服务器端支持断点续传的源代码
2012-09-25 14:44 4043Java 服务器端支持断点续传的源代码【支持快车、迅雷】(仅支 ... -
new File(String parent,String child)
2012-08-22 23:00 1176//user_dir:E:\workspace\javates ... -
System.getProperty
2012-08-22 22:07 916System.getProperty(String name) ...
相关推荐
- 在两个类中,`SERVICE_PORT` 和 `BUFSIZE` 都被声明为 `public static final` 常量。`static` 关键字表示这些变量是属于类的,而非实例对象,因此可以直接通过类名访问,无需创建对象。`final` 表示这些变量一旦...
在Java编程语言中,`static`、`final`、`abstract`和`interface`是四个非常重要的关键字,它们分别代表不同的特性,用于定义类、变量和方法的行为。下面是对这些关键字的详细解释: 1. **static(静态)** - **...
接口中的变量默认类型是public static final,也是就是说是 公有静态常量 。 而方法默认是public abstract,公有抽象方法,但是事实真的是这样吗? 一.新特性 Java 1.8对接口有两个方面的增强:接口中可以添加使用...
Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建对象的情况下被调用。Java 中的静态方法使用 static 关键字来修饰,例如 public static void main...
在Java编程语言中,`static`和`final`都是关键字,它们用于定义不同的特性,但同时也有一些相似之处。下面我们将详细探讨这两个关键字的区别和用法。 首先,`static`关键字是用来声明类级别的变量或方法,这意味着...
在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...
3. 实例变量:对于`final`修饰的实例变量,如果不初始化,编译器会报错,因为`final`变量必须在声明时或者在构造器中被初始化。一旦初始化,其值不能再改变。 四、final修饰常量 当`final`与`static`一起使用时,...
- **静态变量**:即类级别的常量,如`public static final int C = 80;`。 - **实例变量**:每个对象的副本都有各自的值,如`private final String S = "final实例变量S";`。 - **局部变量**:仅限于方法、构造器或...
3. 用 public 修饰的 static 成员变量和成员方法,本质是全局变量和全局方法,当声明它类的对象时,不生成 static 变量的副本,而是类的所有实例共享同一个 static 变量。 4. 用 private 修饰的 static 成员变量和...
final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前必须被初始化。 二、static 关键字 static 关键字在 Java 中用于修饰变量和方法,...
当 `static` 和 `final` 一起使用时,表示创建了一个全局常量,这类变量在定义时必须赋予初始值,并且在整个程序运行过程中其值不能改变。这种做法常见于定义配置参数等不会改变的值,例如: ```java public class ...
在Java编程语言中,`final` 和 `static` 是两个非常重要的关键字,它们分别具有不同的含义和用法,但都对代码的结构和行为产生深远影响。本文将深入探讨这两个关键字,并结合实际示例来解释它们的应用场景。 首先,...
- 如果要访问方法中的局部变量,则该局部变量必须被声明为final。 2. **final修饰符** - 在Java中,final关键字可以用于修饰变量、方法和类。 - 当用于变量时,表示该变量不可变。 - final局部变量可以在局部...
在Java语言中,`final`关键字被广泛应用于各种场景,如定义不可变的变量、禁止类的继承等,具有重要的作用。 1. **final修饰变量** - `final`用于修饰变量时,该变量将变为常量,其值一旦初始化后便不能再更改。 ...
接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。 6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 7.接口中...
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。 6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 7.接口中的方法...
Static Final 是 Java 中的静态最终修饰符,可以用来修饰变量。Static Final 变量的值不能被修改,也不能被继承。 ```java public class StaticFinalBean { public static final String A = "A"; public void test...
"Java 中 static、this、super、final 用法详解" ...Java 中的 static、this、super、final 关键字都是非常重要的,它们用于定义静态变量和静态方法,指代当前对象,访问父类的成员,和定义不可变的变量和方法。
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
public static final String SUCCESS="success"; public static final String FAIL="fail"; static double [] d =new double[10];//??? static{ //可以初始化静态常量 d[0]=1; d[0]=2; d[0...