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

(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. js上下滚屏效果,代码通过测试

    这是html代码 <div class="box"> <div class="bcon"> <h1><b>领号实 ...

  2. form表单控件

    $("select option[value='" + queryparams['vendor'] + "']").attr("selected&qu ...

  3. 杂谈:Servlet(2)

    Servlet的方法剖析: 1.service()方法里面做了什么? 2.doGet()与doPost()做了什么?应该怎么写? 回答 1.service()方法里面做了什么? 如果你的service ...

  4. Symmetric Tree [LeetCode]

    Problem description: http://oj.leetcode.com/problems/symmetric-tree/ Basic idea: Both recursive and ...

  5. 集成 Apple Pay

    作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...

  6. sqlserver 修改替换text,ntext类型字段的两种方案

    方案一 用Update和Replace --替换语句(因为varchar(max)最大值是8000,所以大于8000的部分会被截掉) UPDATE dbo.SNS_UserBlog SET [Desc ...

  7. Storm(3) - Calculating Term Importance with Trident

    Creating a URL stream using a Twitter filter Start by creating the project directory and standard Ma ...

  8. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  9. Ubuntu用户相关基本命令

    Linux是一个用户权限管理得很严格的系统,Ubuntu作为最受欢迎的桌面发行版,提供了简单易用的图形界面工具来管理用户,但是命令行工具往往更强大,用得熟练的话效率会更高.用户管理命令常用的有如下几个 ...

  10. Storm实时流处理Hello World

    近来在看Storm的相关资料,以下总结一下配置过程和Hello World例子. Storm是分布式的实时计算系统.详细文档可参考Storm网站,也可以参阅<Getting started wi ...