1 接口  interface implement

  接口的所有方法自动地属于public。因此,在接口中声明方法时,不必提供关键字public。
 
  接口可以包含多个方法,接口中可以定义常量。接口中的域将被自动设为public static final。
  SwingConstants就是只定义了常量,而没有定义方法,任何实现了SwingConstant接口的类都自动地继承了这些常量,并可以在方法中直接地引用一些常量。

1.1 接口的特性

接口不是类,尤其不能使用new运算符实例化一个接口
但是可以声明接口变量,必须引用实现了接口的类对象
 
使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instance检查一个对象是否实现了某个特定的接口。
 
每个类只能够拥有一个超类,但却可以实现多个接口

1.2 接口与抽象类

抽象类也是只定义方法,但是不实现
总点在于继承只能继承一个,实现接口可以实现多个

2 对象克隆

当拷贝一个变量时,原始变量与拷贝变量引用同一个对象。也就是说,改变一个变量所引用的对象将会对另一个变量产生影响
拷贝与克隆:

clone方法
clone方法时Object类的一个protected方法,也就是说,在用户编写的代码中不能直接调用它。
  • 1默认的clone方法是否满足要求
  • 2默认的clone方法是否能够通过调用可变子对象的clone得到修补
  • 3是否不应该使用clone
  3是默认的
  如需要选择1和2
  • a 实现Cloneable接口类
  • b 使用public访问修饰符重新定义clone方法
 

3 接口和回调

  回调callback是一种常见的程序设计模式。在这种模式下,可以指出某个特定发生应该采取的动作。
 

4 内部类

 inner class 是定义在另一个类中的类
需要内部类的原因:
  • a 内部类方法可以访问该类定义所在作用域的所有数据,包括私有数据
  • b 内部类可以对同一个包中的其他类隐藏起来
  • c 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷
 

4.1 使用内部类访问对象状态

  访问外围类的实例类
  内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域
  内部类的对象总有一个隐式引用(outer),它指向创建它的外部类对象。

4.2 内部类的特殊语法规则

  访问外围类引用的正规语法复杂,表达式OuterClass.this 表示外围类引用。
  在外围类的作用域之外,可以这样引用内部类
    OuterClass.InnerClass

4.3 内部类是否有用、必要和安全

           编译器会把内部类翻译成用($)美元符号分隔外部类名域内部类名的常规类文件。
           如果内部类访问了私有数据域,就有可能通过附加在外围类所在包中的其他类访问它们,但做这些事情需要高超的技巧和极大的决心。

4.4 局部内部类

           局部类不能用public和private访问说明符进行声明。它的作用域被限定在声明这个局部类的块中。
           局部类有一个优势,即对外部世界可以完全隐藏起来。

4.5 由外部方法访问final变量

           与内部类相比,不仅能够访问包含它们的外部类,局部类还可以访问局部变量。那些局部变量必须是final
           在内部类被首次提出时,原型编译器对内部类中修改的局部变量自动地进行转换。

4.6 匿名内部类

           假如只创建这个类的一个对象,就不必命名了。这种累叫做匿名内部类。

4.7 静态内部类

使用内部类只是为了把一个类隐藏在另一个类的内部,可以将内部类声明为static,以便取消产生的引用
 

5 代理 proxy java1.3

  利用代理可以在运行时创建一个实现了一组给定接口的新类。
      假设有一个表示接口的Class对象,它的确切类型在编译时无法知道。
  要想构造一个实现这些接口的类,就需要使用newInstance方法或反射找出这个类的构造器。但是不能实例化接口,需要在程序处于运行状态时定义一个新类
      代理机制是一种解决方案,代理类可以在运行时创建全新的类。这样的代理类能够实现指定的接口。
      指定接口所需要的全部方法
      Object类中的全部方法,
      然而不能再运行时定义这些方法的新代码,而是要提供一个调用处理器(invocation handler)。调用处理器是实现了invocationHandler接口的对象。在这个接口中只有一个方法:
      Object invoke(Object proxy,Method method,Object[] args)
      无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数。调用处理器必须给出处理调用的方法。
      要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这方法有三个参数

    一个类加载器 作为java安全模型的一部分,对于系统类和从因特网上下载下来的类,可以使用不同的类加载器。

    一个Class对象数组,每个元素都是需要实现的接口

    一个调用处理器。

  • 这有两个需要解决的问题
           如何定义一个处理器?
           能够用结果代理对象做些什么?
 
           路由对远程服务器的方法调用
           在程序运行期间,将用户接口事件与动作关联起来。
           为调试,跟踪方法调用

5.1 代理类的特性

  代理类是在程序运行过程中创建的。
  所有的代理类都扩展于Proxy类,一个代理类只有一个实例域——调用处理器,它定义在Proxy的超类中。
  所有的代理类都覆盖了Object类中的方法toString、equals和hashCode。如同所有的代理方法一样,这些方法仅仅调用了调用处理器的invoke。Object类的其他方法都没有被重新定义。
  没有定义代理类的名字,sun虚拟机中的Proxy类将生成一个以字符串$Proxy开头的类名
  代理类一定是public 和 final 。如果代理类实现的所有接口都是public,代理类就不属于某个特定的包,否则,所有非公有的接口都必须属于同一个包,同时,代理类也属于这个包。
  可以通过Proxy类中的isProxyClass方法检测一个特定的Class对象是否代表一个代理类。
 
          
 

Java基础语法<九> 接口与内部类的更多相关文章

  1. Java 基础三、接口与内部类

    1.   在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...

  2. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  3. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

  4. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  5. Java基础语法(上篇)

                     Java基础语法(上篇) 知识概要: (1)关键字的表示与规范       (2)标示符              (3)注释                (4 ...

  6. java基础语法(一)

    java基础语法(一) 1.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成 对象(Object).对象又叫做实例(Instance). 2.类由两大部分构成:属性 ...

  7. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  8. Java匹马行天下之JavaSE核心技术——Java基础语法

    Java基础语法 一.   认识Java 1. Java 简介 java 是一种高级的面向对象的程序设计语言,使用Java语言编写的程序时跨平台的.从pc到手机,都有Java开发的程序和游戏,Java ...

  9. Java基础语法(基本语句)

    Java基础语法 标识符在程序中自定义的一些名称.由26个英文字母大小写,数字:0-9符号:_&组成定义合法标识符规则:1.      数字不可以开头2.      不可以使用关键字Java中 ...

随机推荐

  1. 基于HTML5 Canvas 实现弹出框

    用户鼠标移入时,有弹出框出现,这样的需求很常见.这在处理HTML元素实现时简单,但是如果是对HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为Canvas使用的是另外一套机制,无论在 ...

  2. [转]tomcat部署(1)

      阅读目录 1 目录结构 2 部署 3 发布 4 测试 本篇参考Tomcat官方文档:<First Webapp>翻译,并结合自己的开发经验介绍关于tomcat部署以及发布的相关内容. ...

  3. D语言需要大公司支持

    Facebook开源flint:一个用D语言编写的C++静态代码分析器 http://www.csdn.net/article/2014-02-27/2818565-Building-and-open ...

  4. htm语言的语法基础及规则

    HTML的主要语法是元素和标签.元素是符合DTD(文档类型定义)的文档组成部分,如title(文档标题).IMG(图象).table(表格)等等.元素名不区分大小写的.HTML用标签来规定元素的属性和 ...

  5. 读Zepto源码之样式操作

    这篇依然是跟 dom 相关的方法,侧重点是操作样式的方法. 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2. ...

  6. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  7. git rebase -i命令修改commit历史

    [TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史 ...

  8. [0] DDD领域驱动设计(三) 之 聚合(根)、实体、值对象

    1.      聚合根.实体.值对象的区别? 从标识的角度: 聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法: 从是否只读的角度 ...

  9. 东北育才 DAY2组合数取mod (comb)

    组合数取模(comb) [问题描述] 计算C(m,n)mod 9901的值 [输入格式] 从文件comb.in中输入数据. 输入的第一行包含两个整数,m和n [输出格式] 输出到文件comb.out中 ...

  10. Jenkin-持续集成

    1.Jenkins安装 本文将会介绍如何在windows 中安装Jenkins,并且使用Jenkins进行项目的构建. 首先我们进入到Jenkins 的官网下载地址:https://jenkins.i ...