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. intersect for multiple vectors in R

    Say you have a <- c(1,3,5,7,9) b <- c(3,6,8,9,10) c <- c(2,3,4,5,7,9) A straightforward way ...

  2. #414 Div2 C

    #414 Div2 C 题意 两个人每个人都有一串字母序列,他们要替换一个长度为 n 包含问号的新序列,他们每次可以使用自己序列中的字母代替新序列的问号(使用自己序列中的字母后那个字母就会消失),第一 ...

  3. 转自52 梦回凉亭的她 Java常见问题,面试题

    收集整理分享# 相关概念## 面向对象的三个特征封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象.## 多态的好处允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不 ...

  4. css块级元素居中

    <!DOCTYPE html> <html> <head> <title>index</title> </head> <b ...

  5. Unity3D 骨骼动画原理学习笔记

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1. ...

  6. MAC下解决eclipse卡顿或者运行慢的问题

    提示:假设你已经装了固态硬盘,并且有至少8Gb的内存.如果没有的话,带来的性能提升可能不大. 1.eclipse中加载的SDK数量过多会导致程序运行缓慢,解决方法删除plaforms下面用不到的SDK ...

  7. Go 从入门到精通(三)字符串,时间,流程控制,函数

    一.strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirn ...

  8. webpack 实现的多入口项目脚手架

    简介 基于 webpack2 实现的多入口项目脚手架,主要使用 extract-text-webpack-plugin 实现 js .css 公共代码提取,html-webpack-plugin 实现 ...

  9. $.Deferred 延迟对象

    一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们 ...

  10. 论文笔记 Generative Face Completion

    这篇paper将巧妙地将四个loss函数结合在一起,其中每一个loss的功能不同.但这篇paper不够elegant的地方也是loss太多!在本文中,我采用散文的写作方法谈谈自己对这篇paper的理解 ...