博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
default、final、static关键字
阅读量:6119 次
发布时间:2019-06-21

本文共 2944 字,大约阅读时间需要 9 分钟。

一、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

转载于:https://my.oschina.net/wuyiyi/blog/863952

你可能感兴趣的文章
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
【Linux】linux经常使用基本命令
查看>>
Java 内存区域和GC机制
查看>>
更新代码和工具,组织起来,提供所有博文(C++,2014.09)
查看>>
HTML模块化:使用HTML5 Boilerplate模板
查看>>