一、default关键字
1)用于switch语句中,如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。
2)java 8的新特性。我们都知道在java语言的接口中只能定义方法名,而不能包含方法的具体实现。接口中定义的方法必须在接口的非抽象子类中实现。因为接口的这个限制,直接改变或者扩展接口内的方法变得非常困难。为了克服这个困难,java 8 中引进了一个新的概念,叫做default方法。default方法是指在接口内部包含一些默认的方法实现。这样使得接口在扩展时,不会破坏与接口相关的实现类的代码。
示例:
public interface SimpleInterface { public void print(); default public void say(){ System.out.println("i am default method"); }}
public class SimpleInterfaceImpl implements SimpleInterface{ @Override public void print() { System.out.println("print SimpleInterfaceImpl"); }// public void say(){// System.out.println("i am SimpleInterfaceImpl method");// } public static void main(String[] args) { SimpleInterfaceImpl simpleInterface = new SimpleInterfaceImpl(); simpleInterface.print(); simpleInterface.say(); }}
二、static关键字
《java编程思想》中:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。”
static修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
1)static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的。正式因为静态方法不依赖于任何对象,因此静态方法不能访问非静态变量或者方法。反之可以。
最常见的静态方法就是main方法了,因为程序在执行main方法时未创建任何对象,因此只能通过类名来访问。
2)static变量
static变量也称为静态变量,静态变量与非静态变量的区别是:静态变量被所有的随行所共有,在内存中只有一个副本,它当且仅当类在初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候存在多个副本,各个对象拥有的副本互不影响。
3)static代码块
static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。
4)static常见误区
1.static关键字会改变类中成员的访问权限吗? no,java中的static关键字不会影响到变量或者方法的作用域。在java中能影响到访问权限的只有private、public、protected这些关键字。
2.能通过this访问静态成员变量吗?
public class Main { static int value = 33; public static void main(String[] args) throws Exception{ new Main().printValue(); } private void printValue(){ int value = 3; System.out.println(this.value); }}
输出为33.这里主要考察对this和static的理解。this代表当前对象,那么通过new Main()来调用printValue的话,当前对象就是通过new Main()生成的对象。而static变量是被对象所享有的,因此在printValue中调用this.value值为33。在printValue方法内部的value是局部变量,不可能与this关联,所以输出是33.
5)static修饰类
java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。
示例:
public class InnerClass { public static class Inner{ public void print(){ System.out.println("i an static inner method"); } }}
public class InnerClassTest { public static void main(String[] args) { new InnerClass.Inner().print(); }}
如果没有用static修饰InterClass,则只能按如下方式调用:
public class InnerClass { public class Inner{ public void print(){ System.out.println("i an static inner method"); } }}
public class InnerClassTest { public static void main(String[] args) { InnerClass innerClass = new InnerClass(); innerClass.new Inner().print(); }}
三、final关键字
final修饰类表示类不可被继承,final类中的方法默认是final,修饰方法表示方法不可被重写,修饰变量表示变量不可被修改,只能被赋值一次。final不能用于修饰构造方法。
参考博文连接:
http://www.importnew.com/7302.html
http://blog.csdn.net/aflydreams/article/details/54628921 http://zuoqiang.iteye.com/blog/734842