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

(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. Java 中String常用方法

    java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len ...

  2. cocos2dx从入门到精通课程

    一.移动开发基础 二.cocos2dx跨平台理论 三.cocos2dx框架 四.cocos2dx内存管理 五.cocos2dx的事件与消息机制 六.cocos2dx的定时器 七.cocos2dx的渲染 ...

  3. noip2016酱油记day1

    真的是noip2016酱油记了. t1模拟,应该可以过. t2用了个简单的桶瞎搞,估计剩50pt了. t3直接不会写. 心好累... 考的分数肯定没去年高. 但不论如何,明天正常发挥就好. 正常发挥下 ...

  4. 浅谈线程池(上):线程池的作用及CLR线程池

    原文地址:http://blog.zhaojie.me/2009/07/thread-pool-1-the-goal-and-the-clr-thread-pool.html 线程池是一个重要的概念. ...

  5. 30-Razor语法基础

    以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...

  6. robot.libdocpkg package

    mplements the Libdoc tool. The command line entry point and programmatic interface for Libdoc are pr ...

  7. C实现多线程

    #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <iostream& ...

  8. PHP + Memcache 实现多服务器session共享

    很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么php默认的files保存session的方式就无能为力了.这时我们可以考虑使用memcache 来接 ...

  9. NSInternalInconsistencyException: loaded the "XXXView" nib but the view outlet was not set

    运行过程中App崩溃,报错如标题. 原因: viewController的view没有绑定xib的view. 解决方法: 在File's Owner中将view与viewController的view ...

  10. ie6 ie7 绝对定位 相对定位 层被遮住

    relative 上加上z-index有多个,则z-index递减, absolute层显示则不会被其它标签挡住.