1.static:

a)抽象类(abstract class):使用了 abstract 关键字所修饰的 类叫做抽象类。抽象类无法实例化,不能 new 出来一个抽象类的对象(实例)。

抽象方法(abstract method):使用 abstract 关键字所修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中。相对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。抽象方法只能存在与抽象类和接口中,但是抽象类中可以含有具体方法,接口中只能含有抽象方法。

b)抽象类的继承:在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明成一个抽象类。

c)static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是 static 的,那么我们可以通过类名.成员变量名的方式来使用它(推荐使用这种方式)。

d)static 修饰方法:static 修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问。静态方法只能继承,不能重写(Override)。

 package eameple;
public class Test
{
public static void main(String[] args)
{
R r = new R();
r.method();
T t= new R();
t.method();
}
} abstract class T
{ public static void method()
{
System.out.println("test");
}
}
class R extends T
{
public static void method()
{
System.out.println("method");
}
}

e)static 代码块:静态代码块。静态代码块的作用也是完成一些初始化工作。首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到 Java 虚拟机上(JVM),然后由 JVM 加载这个类来生成对象。类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以 new 一次就会调用构造方法一次。如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法。注意:静态代码块只会执行一次。

f)静态的只能访问静态的;非静态的可以访问一切。

g)不能在静态方法中使用 this 关键字。

2.interface

  接口(interface):接口的地位等同于 class,接口中的所有方法都是抽象方法。在声明接口中的方法时,可以使用 abstract 关键字,也可以不使用。通常情况下,都会略掉 abstract 关键字。类可以实现接口,实现使用关键字 implements 表示,代表了某个类实现了某个接口。一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。如果该类是个抽象类,那么就无需实现接口中的方法了。Java 是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号分隔。接口中所声明的方法都是抽象方法。接口中的方法都是 public 的。 接口中也可以定义成员变量。接口中的成员变量都是 public、final、static 的。

3.final

  final 关键字:final 可以修饰属性、方法、类。当一个类被 final 所修饰时,表示该类是一个终态类,即不能被继承。当一个方法被 final 所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。当一个属性被 final 所修饰时,表示该属性不能被改写。当 final 修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从 10 变为 20);如果 final 修饰一个引用类型时,表示该引用型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

  对于 final 类型成员变量,一般来说有两种赋初值方式:在声明 final 类型的成员变量时就赋上初值;在声明 final 类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值。

一个类不能既是 final,又是 abstract 的。因为 abstract 的主要目的是定义一种约定,让子类去实现这种约定,而 final 表示该类不能被继承,这样 abstract 希望该类可以被继承而 final 明确说明该类不能被继承,两者矛盾。因此一个类不能既是 final 的,又是abstract的。

static,interface and final的更多相关文章

  1. Java中的一些关键字:static,final,和abstract,interface,以及访问修饰符说明

    1.关键字可以修饰的说明: 关键字 属性(是否可修饰) 方法(是否可修饰) 类(是否可修饰) static 是 是 是 final 是 是 是 abstract 否 是 是 2.关键字的意义: 关键字 ...

  2. java基础复习:final,static,以及String类

    2.final 1)为啥String是final修饰的呢? 自己答: 答案: 主要是为了“效率” 和 “安全性” 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所 ...

  3. java 小结1(static ,final,泛型)

    static,final. (1)final: final:属于“终态”,意思就是不可以改变.可以修饰非抽象类,非抽象类的方法等.反正就是不能够再改变赋值了. 注意:1)fina类不能被继承,所以它没 ...

  4. static ,final 、abstract的作用,以及它们的联系和区别

    static可以修饰变量,修饰的变量直接属于某各类,不局限于某个方法,无法在成员方法中修饰变量,也不可以在静态方法中修饰变量.被static修饰的方法属于静态方法(类方法),与对象无关,与类有关.fi ...

  5. final,static,super,this

    ## final 关键字 **final关键字主要用在三个地方:变量.方法.类.** 1. **对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变 ...

  6. 4)抽象方法不能为private,final或者static,为什么?

    抽象方法的最实质的意 义在于被未来的子类覆盖实现掉.它自己是个空方法.private的实质意义在于本类其他方法调用它.你自己是个空方法,别人调用你有什么用?所以 abstract和private在一起 ...

  7. 抽象方法不能为private,final或者static,为什么?

    4)抽象方法不能为private,final或者static, native, synchrozied为什么?[新手可忽略不影响继续学习]马克-to-win:抽象方法的最实质的意义在于被未来的子类覆盖 ...

  8. 《Java编程那点事儿》读书笔记(三)——static,this,抽象类,接口和包

    1. static 1)静态变量:Java虚拟机为静态变量开辟单独的存储空间,所以所有的对象内部的静态变量在内存中都指向同一个地址,那么不管哪个对象改变这个成员变量,所有对象中该成员变量的值都发生变化 ...

  9. static,this,抽象类,接口和包

    1. static 1)静态变量:Java虚拟机为静态变量开辟单独的存储空间,所以所有的对象内部的静态变量在内存中都指向同一个地址,那么不管哪个对象改变这个成员变量,所有对象中该成员变量的值都发生变化 ...

随机推荐

  1. zoj 3720

    为什么注释掉的地方是错的?  自己的代码好糟烂..... 直接枚举点  判是否在多边形内  加起来求概率    求面积的时候代码写搓了....     比不过别人两行的代码    而且到现在还找不到错 ...

  2. java基本对象Integer,String比较相等及equal案例说明

    Integer i = new Integer(100); Integer i2 = new Integer(100); if(i == i2){ System.out.println("A ...

  3. the structure of the project (MVC)

    HTML <--- JSP <---- JS <---- Java controller <---- DAO <---- Database The JSP Model 2 ...

  4. 漫话C++0x(五)—- thread, mutex, condition_variable

    熟悉C++98的朋友,应该都知道,在C++98中没有thread, mutex, condition_variable这些与concurrency相关的特性支持,如果需要写多线程相关程序,都要借助于不 ...

  5. redis其他问题

    如何解决redis高并发客户端频繁time out? 现在业务上每天有5亿+的请求,平时redis的操作在2K+每秒左右.到了高峰有3K+,这时候客户端就会频繁的报connect time out的异 ...

  6. 思科模拟器软件教程---教你如何划分Vlan

    方法/步骤 1.打开Cisco Packet Tracer,点击[交换机],选择第三个图标2960交换机,按住鼠标左键拖动到工作区.这里有很多类型的交换机,但是我们比较常用的是这个. 2.我们选择[终 ...

  7. Servlet课程0424(一) 通过实现Servlet接口来开发Servlet

    //这是我的第一个Servlet,使用实现Servlet接口的方式来开发 package com.tsinghua; import javax.servlet.*; import java.io.*; ...

  8. messagePack编解码

    首先引入javassist-3.20.0-GA.jar与msgpack-0.6.12.jar两个包,然后就可以使用. package com.ming.netty.code; import java. ...

  9. 【HDOJ】4355 Party All the Time

    好久没做过三分的题目了. /* 4355 */ #include <iostream> #include <sstream> #include <string> # ...

  10. 【HDOJ】4601 Letter Tree

    挺有意思的一道题,思路肯定是将图转化为Trie树,这样可以求得字典序.然后,按照trie的层次求解.一直wa的原因在于将树转化为线性数据结构时要从原树遍历,从trie遍历就会wa.不同结点可能映射为t ...