本章主要回顾一些类的相关知识:

(1)static:

static 静态的: 属于类的资源, 使用类名访问.
  静态属性: 只有一份的变量
  静态方法: 是属于类方法, 可以使用类名直接访问. 静态方法中没有this引用
  静态代码块: 是在类加载期间执行的代码块

延伸:代码块,在对象创建期间执行, 类似于构造器中的代码

参考例子:

 /**
  * 代码块: 在对象创建期间执行, 类似于构造器中的代码
  * 静态代码块: 在类加载期间执行. 静态代码可以用于只加载一次的静态资源, 如: 图片的加载
  */
 public class Demo01 {
     public static void main(String[] args) {
         Foo f1 = new Foo();
         Foo f2 = new Foo();
     }
 }

 class Foo {
     //静态代码块
     static {
         System.out.println("加载 Foo.class");
     }
     {
         System.out.println("HI");
     }// 代码块, 很少使用!
 }

运行结果:加载 Foo.class
              HI
              HI

是有顺序的,请注意看上面的注释

(2)匿名内部类:匿名内部类也就是没有名字的内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

实例1:不使用匿名内部类来实现抽象方法

 abstract class Person {
     public abstract void eat();
 } 

 class Child extends Person {
     public void eat() {
         System.out.println("eat something");
     }
 } 

 public class Demo {
     public static void main(String[] args) {
         Person p = new Child();
         p.eat();
     }
 } 

运行结果:eat something

可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?

这个时候就引入了匿名内部类

实例2:匿名内部类的基本实现

 abstract class Person {
     public abstract void eat();
 } 

 class Child extends Person {
     public void eat() {
         System.out.println("eat something");
     }
 } 

 public class Demo {
     public static void main(String[] args) {
         Person p = new Child();
         p.eat();
     }
 } 

运行结果:eat something

可以看到,我们直接将抽象类Person中的方法在大括号中实现了

这样便可以省略一个类的书写

并且,匿名内部类还能用于接口上

实例3:在接口上使用匿名内部类

 interface Person {
     public void eat();
 } 

 public class Demo {
     public static void main(String[] args) {
         Person p = new Person() {
             public void eat() {
                 System.out.println("eat something");
             }
         };
         p.eat();
     }
 } 

运行结果:eat something

由上面的例子可以看出,只要一个类是(抽象非抽象均可)或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

实例4:Thread类的匿名内部类实现

 public class Demo {
     public static void main(String[] args) {
         Thread t = new Thread() {
             public void run() {
                 for (int i = 1; i <= 5; i++) {
                     System.out.print(i + " ");
                 }
             }
         };
         t.start();
     }
 } 

运行结果:1 2 3 4 5

实例5:Runnable接口的匿名内部类实现

 public class Demo {
     public static void main(String[] args) {
         Runnable r = new Runnable() {
             public void run() {
                 for (int i = 1; i <= 5; i++) {
                     System.out.print(i + " ");
                 }
             }
         };
         Thread t = new Thread(r);
         t.start();
     }
 } 

运行结果:1 2 3 4 5

以上例子摘自http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html,一个人懒得整理,见谅,不过楼主整理的真心不错

重拾java系列一java基础(4)的更多相关文章

  1. 重拾java系列一java基础(1)

    前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这 ...

  2. 【java系列】java开发环境搭建

    描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1   安装 ...

  3. 重拾java系列一java基础(2)

    1.分支流程控制 if(布尔表达式/分支条件){  //语句块} if(布尔表达式/分支条件){  //语句块1}else{  //语句块2} if(条件1){  //语句块1}else if(条件2 ...

  4. 重拾java系列一java基础(3)

    这一章主要复习下以前所接触的算法, (1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较 ...

  5. java系列(1/4)基础阶段-MySQL(2/13)

    本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停 ...

  6. Java系列: JAVA字符串格式化-String.format()的使用(zz)

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...

  7. 重拾Java Web应用的基础体系结构

    目录 一.背景 二.Web应用 2.1 HTML 2.2 HTTP 2.3 URL 2.4 Servlet 2.4.1 编写第一个Servlet程序 2.5 JSP 2.6 容器 2.7 URL映射到 ...

  8. 夯实Java基础系列5:Java文件和Java包结构

    目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...

  9. 【Java】 重拾Java入门

    [概论与基本语法] 取这个标题,还是感觉有些大言不惭.之前大三的时候自学过一些基本的java知识,大概到了能独立写一个GUI出来的水平把,不过后来随着有了其他目标,就把这块放下了.之后常年没有用,早就 ...

随机推荐

  1. C++疑难杂症

    1.如果在类成员函数外部显示的调用其父类的某个接口. 2.对于一个父类的成员, 子类如何在构造函数中对其进行特殊的定制生成. 3.对于一个需要用常量来声明的类型, 如何定义这个常量.   比如int ...

  2. C#的对象内存模型

    转载自:http://www.cnblogs.com/alana/archive/2012/07/05/2577893.html C#的对象内存模型: 一.栈内存和堆内存1.栈内存 由编译器自动分配和 ...

  3. js高级程序设计(三)基本概念

    数据类型 ECMAscript中有五种简单数据类型Undefined,Null,Boolean,Number,String 还有一种复杂数据类型Object. typeof操作符 typeof可能返回 ...

  4. ubuntu14 eclipse luna 无法显示菜单 , 解决方案

    使用命令行 , 输入 Exec=env UBUNTU_MENUPROXY=0 <eclipse的安装路径>/eclipse 就可以了 或者建立一个Eclipse的快捷方式,eclipse. ...

  5. EasyUI TreeGrid

    数据格式1: { , "rows": [ { "id": 1, "name": "All Tasks", "b ...

  6. 初学ExtJs 表格显示后台数据

    最近开始接触ExtJs,贴出自己的代码,一个简单的表格显示 版本 3.4.1 需要json包 代码清单1.jsp引入的ExtJs文件 <!-- 资源文件 ExtJs --> <lin ...

  7. 关于python中的编码:unicode, utf-8, gb2312

    计算机早期是只支持ASCII码的,经过long long的发展,出现了这些支持世界上各种语言字符的编码:unicode, utf-8, gb2312. 对于unicode, utf-8, gb2312 ...

  8. 解决Putty连接不上服务器的方法

    1.vi /etc/ssh/sshd_config 将PermitRootLogin的注释取消,或者将no改为yes. 2.service sshd restart 3.setup命令进入将防火墙关闭 ...

  9. qt 提高ui响应度

    如何使Qt 平台中的GUI保持响应流畅?一般来说耗时较长的操作,分为计算密集型操作和IO密集型操作,对于这两类操作如何提高响应速度. 而从操作的本质上来说,操作又可分为不可分解操作,如在第三方库中耗时 ...

  10. JS访问剪切板中的图片

    google出来一个html2canvas,它利用canvas来渲染读取的DOM树,也就是说它只能截取document里的内容,如果要像qq截图那样,应该怎么做?用过百度的Ueditor编辑器的朋友都 ...