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. Python环境安装及基本概念

    1.安装Python ①官网下载Python包安装 ②添加环境变量(新版Python包可直接添加环境变量) 手动添加环境变量:控制面板-系统-高级系统设置-环境变量-编辑Path添加python安装目 ...

  2. 网络编程应用:基于TCP协议【实现一个聊天程序】

    要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...

  3. linux系统必学-部分链接

    vi操作笔记 vim操作笔记 好网站,临时收藏  SEO十万个为什么 9RIA.com天地会--中国最大的专业Flash论坛 ===互联网=============================== ...

  4. gradle 使用总结

    什么是gradle 书面化解释: Gradle可以自动化地进行软件构建.测试.发布.部署.软件打包,同时也可以完成项目相关功能如:生成静态网站.生成文档等. Gradle是一种依赖管理工具. 它和ma ...

  5. [1] Entity Framework / Code First

    CodeFirst是EntityFramework的一种技术手段,因为传统编程方式都是先建立数据库,然后根据数据库模型为应用程序建模,再进行开发:CodeFirst从字面上理解就是代码先行,先在程序中 ...

  6. 一劳永逸的解决AFNetworking3.0网络请求问题(面向对象封装大法,block回调)

    AFNetworking在iOS网络请求第三方库中占据着半壁江山,前段时间将AFNetworking进行了3.0版本的迁移,运用面向对象的设计将代码进行封装整合,这篇文章主要为还在寻找AFNetwor ...

  7. .net 4.0 中的特性总结(五):并行编程

    1.任务并行库 从 .NET Framework 4 开始,TPL 是编写多线程代码和并行代码的首选方法. 但是,并不是所有代码都适合并行化:例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次 ...

  8. mysql中group by和order by同时使用无效的替代方案

    前言 最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生.在此做个记录,以备不时之需. 需求 首先,看一下 ...

  9. 【Netty】TCP粘包和拆包

    一.前言 前面已经基本上讲解完了Netty的主要内容,现在来学习Netty中的一些可能存在的问题,如TCP粘包和拆包. 二.粘包和拆包 对于TCP协议而言,当底层发送消息和接受消息时,都需要考虑TCP ...

  10. 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...