文档章节

default、final、static关键字

lara-
 lara-
发布于 2017/03/21 15:58
字数 1096
阅读 10
收藏 0

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

© 著作权归作者所有

lara-
粉丝 2
博文 69
码字总数 30761
作品 0
浦东
高级程序员
私信 提问
Java基础笔试题

1、面向对象有(4)个特性,分别为:(抽象)、(继承)、(封装)、(多态性)。有的地方说是3个特性,去掉抽象。 2、在使用super 和this关键字时,以下描述正确的是(A) A) 在子类构造方法...

开拓者-2017
2015/10/24
1K
0
【计算机本科补全计划】Java学习笔记(四) 修饰符

正文之前 今天总算是把那个党员谈话给弄完了,三个学弟轮番跟我来聊天,讲自己的入党动机啥的,看到他们就仿佛看到了大一的自己,原来当时面对学长,面对这类事情,会紧张,会局促,被学长安...

HustWolf
2017/11/26
0
0
1.Java 基础复习

1.Java 中的基本数据类型4类8中 整型 -->byte、short、int、long 浮点型-->float double 字符类型--> char 布尔类型--> boolean 2.类型之间转换 byte、short、char ----> int ---> long --> ......

baibuxiha
2016/01/18
6
0
Java面试基础篇——第八篇:抽象类与接口的区别

1.抽象类 抽象类:如果一个类中包含有抽象方法,或这个类使用abstract关键字修饰,则称这个类是抽象类。抽象方法是什么呢?抽象方法就是指用abstract关键字修饰的方法。需要注意的是:抽象类...

developlee的潇洒人生
2018/07/21
57
0
Java中final与static的使用

Final关键字 根据使用环境不同,final的含义会有细微的区别,但通常是指无法改变的内容。final关键字可以修饰变量、方法和类。 Final变量 final数据是用来向编译器告知变量是恒定不变的。对使...

徐涛
2013/06/26
671
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
20分钟前
2
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
52分钟前
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部