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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

用public来修饰比较好理解,因为接口定义后就是给别人用的,所以它里面的属性和方法都是用public来修饰,那static和final又该如何理解呢?:'(
各位道友快快来给出你们的见解吧!

14 个回复

倒序浏览
static关键字:可以用来修饰类中的成员变量,成员方法,除此以外还可以修饰程序的代码块,称为静态代码块。
1、用static修饰的方法称为静态方法。
特点:
(1)静态方法不需要通过类的实例化就可以直接使用。
(2)静态方法不依赖对象而存在,依赖于类而存在。
(3)特别需要注意的是静态方法不能用abstract修饰,因为静态方法必须在本类中提供实现,而abstract方法是在子类中实现,二者互相矛盾。
2、用static修饰的变量称为静态变量
特点:
(1)在类加载的过程中完成静态变量的内存分配,可以直接通过类名加变量名直接访问该变量。
(2)静态变量还是变量,可以进行赋值,不是final修饰的常量
3、用static修饰的代码块称为静态代码块。静态代码块在类加载的时候只执行一次,如果把构造方法看成对象的初始化,则可以把静态代码块看成类的初始化,在代码块中可以初始化类中的静态变量

接口中的变量必须是常量,所以要用final修饰,static就是为了实例化接口的类对象访问变量方便
回复 使用道具 举报
比如我是一个维修工人....public相当于我接任何活,static相当于10分钟之内赶到,final相当于就我一家.
回复 使用道具 举报 1 0
非static的话,因一个类可以继承多个接口,容易出现重名的变量然后就会导致编译错误
方法都是抽象的,可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。因此必须是final
回复 使用道具 举报
我也不知道
回复 使用道具 举报
为什么接口中的常量必须使用public static final修饰
public: 使接口的实现类可以使用这个常量
static:static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,
    就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以
    接口的常量必须定义为static
final:final修饰就是保证接口定义的常量不能被实现类去修改,如果没有final的话,
    由子类随意去修改的话,接口建立这个常量就没有意义了。

捕获.PNG (9.45 KB, 下载次数: 118)

捕获.PNG

点评

不错,恰到点子上了  发表于 2015-1-10 00:30
回复 使用道具 举报 1 0
static通常用来修饰类的成员变量和类的方法,它可以用在以下场合:

1.修饰类的成员变量:意味着这个成员变量作为整个类而不是类的某个特定对象而存在,可以通过类名直接引用它们。一个static成员变量对每个类来说都只有一份存储空间,而非static成员变量则是对每个对象有一份存储空间。
2.修饰方法:static方法可以通过类名直接访问。
3.静态导入:静态导入static成员变量和static方法。
4.静态程序块:通常用来做一些初始化,static{}。
5.修饰成员类型:如修饰嵌套类(nested class),嵌套类和普通的内部类的区别就在于static的修饰。普通的内部类不能包含static数据和static属性,也不能包含嵌套类,但是嵌套类可以包含所有东西。注意static不能用来修饰最顶层的类。
final关键字通常表示一个东西是不能改变的,它可以修饰的元素有:

1.修饰数据:通常用来定义常量。对于基本类型,final使数值恒定不变,而对于对象引用,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法把它改为指向另一个对象,然而,对象其本身是可以被修改的。

2.修饰参数:和修饰数据一样。

3.修饰方法:通常用来防止方法被子类覆盖(overriden),一个类中的所有private方法都隐含是final的,因为它无法被子类读取,也就不会被覆盖。另外,编译器针对final方法的调用都采用内嵌(inline)调用,可提高效率,但不是final的主要用途。

4.修饰类:表明该类(class)不能被继承。在final类里,所有的方法都被隐含的指定为final的,因为永远不存在子类,也就不存在子类覆盖一说。final类的字段可以根据个人的意愿选择是或不是final,不论类是否定义为final,相同的规则都适用于final字段。

平日在编程中用的最多的应该是使用final修饰数据,尤其是定义常量。
回复 使用道具 举报
lwj123 发表于 2015-1-9 21:09
为什么接口中的常量必须使用public static final修饰
public: 使接口的实现类可以使用这个常量
static:sta ...

楼上说的对
Java是不支持多继承的,为什么呢?如果两个父类中有同名变量或相同的函数,那么在调用时就会出现分歧,不知道到底要调用哪一个,所以不支持多继承,但为了弥补只支持单继承带来的缺点,Java可以只继承一个类,但可以同时实现多个接口,而接口中的成员变量都用static和final修饰,使其成为一个常量,如果不怎么做,那就又会出现上面的分歧。
回复 使用道具 举报
DH柯 中级黑马 2015-1-10 08:21:23
9#
    Static用来修饰变量时称为静态变量,也称类变量;static用来修饰方法时称为静态方法,也称为类方法。 因为这些成员都是类的而不是单个实例的,实际上这里的类指的是类对象,在一个JVM中一个类都拥有一个 类对象,它是内存中创建实例的蓝本,本身也是一个对象,在类被加载时创建。      static的方法有以下几条限制:     它们仅能调用其他的static 方法。     它们只能访问static属性。     它们不能以任何方式引用this 或super。    final是可以修饰类的,而static是只能修饰方法和变量。 final修饰类时,类不可被继承,同时里面的方法和变量也是final,因为都不可以修改嘛 final修饰方法时,方法不能被覆盖重写 fianl修饰变量时,变量赋值后不可修改,过程中不变化 希望对你有帮助
回复 使用道具 举报
DH柯 中级黑马 2015-1-10 08:22:33
10#
    Static用来修饰变量时称为静态变量,也称类变量;static用来修饰方法时称为静态方法,也称为类方法。
因为这些成员都是类的而不是单个实例的,实际上这里的类指的是类对象,在一个JVM中一个类都拥有一个
类对象,它是内存中创建实例的蓝本,本身也是一个对象,在类被加载时创建。
     static的方法有以下几条限制:
   它们仅能调用其他的static 方法。
   它们只能访问static属性。
   它们不能以任何方式引用this 或super。
   final是可以修饰类的,而static是只能修饰方法和变量。
final修饰类时,类不可被继承,同时里面的方法和变量也是final,因为都不可以修改嘛
final修饰方法时,方法不能被覆盖重写
fianl修饰变量时,变量赋值后不可修改,过程中不变化
希望对你有帮助
回复 使用道具 举报
接口主要用于定义常量和抽象方法。定义常量用于static和final。抽象方法不能定义成final。
回复 使用道具 举报
说的都挺好!
回复 使用道具 举报
前面已经有人给出正确答案了
回复 使用道具 举报
lwj123 发表于 2015-1-9 21:09
为什么接口中的常量必须使用public static final修饰
public: 使接口的实现类可以使用这个常量
static:sta ...

点个赞,说的很到位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马