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

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

(1)static:

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

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

参考例子:

 1 /**
 2  * 代码块: 在对象创建期间执行, 类似于构造器中的代码
 3  * 静态代码块: 在类加载期间执行. 静态代码可以用于只加载一次的静态资源, 如: 图片的加载
 4  */
 5 public class Demo01 {
 6     public static void main(String[] args) {
 7         Foo f1 = new Foo();
 8         Foo f2 = new Foo();
 9     }
10 }
11
12 class Foo {
13     //静态代码块
14     static {
15         System.out.println("加载 Foo.class");
16     }
17     {
18         System.out.println("HI");
19     }// 代码块, 很少使用!
20 }

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

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

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

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

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

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

 1 abstract class Person {
 2     public abstract void eat();
 3 }
 4
 5 class Child extends Person {
 6     public void eat() {
 7         System.out.println("eat something");
 8     }
 9 }
10
11 public class Demo {
12     public static void main(String[] args) {
13         Person p = new Child();
14         p.eat();
15     }
16 } 

运行结果:eat something

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

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

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

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

 1 abstract class Person {
 2     public abstract void eat();
 3 }
 4
 5 class Child extends Person {
 6     public void eat() {
 7         System.out.println("eat something");
 8     }
 9 }
10
11 public class Demo {
12     public static void main(String[] args) {
13         Person p = new Child();
14         p.eat();
15     }
16 } 

运行结果:eat something

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

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

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

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

 1 interface Person {
 2     public void eat();
 3 }
 4
 5 public class Demo {
 6     public static void main(String[] args) {
 7         Person p = new Person() {
 8             public void eat() {
 9                 System.out.println("eat something");
10             }
11         };
12         p.eat();
13     }
14 } 

运行结果:eat something

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

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

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

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Thread t = new Thread() {
 4             public void run() {
 5                 for (int i = 1; i <= 5; i++) {
 6                     System.out.print(i + " ");
 7                 }
 8             }
 9         };
10         t.start();
11     }
12 } 

运行结果:1 2 3 4 5

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

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Runnable r = new Runnable() {
 4             public void run() {
 5                 for (int i = 1; i <= 5; i++) {
 6                     System.out.print(i + " ");
 7                 }
 8             }
 9         };
10         Thread t = new Thread(r);
11         t.start();
12     }
13 } 

运行结果:1 2 3 4 5

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

时间: 2024-10-07 05:36:52

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

Java系列(1)----Java特性

一.Java的关键特性1.简单性2.安全性3.可移植性4.面向对象5.健壮性6.多线程7.体系结构中立8.解释执行9.高性能10.分布式11.动态性 二.J2SE 5的主要特性1.泛型2.注解(annotation)3.自动装箱和自动拆箱4.枚举5.增强for-each风格的for循环6.可变长度参数7.静态导入8.格式化I/O9.并发实用工具 三.J2SE 7的重要特性1.String现在能够控制switch语句2.二进制整型字面值3.数值字面值下的下划线4.扩展的try语句,称为带资源的tr

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

描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1   安装材料准备 java开发环境搭建前,需要准备JDK和Eclipse. 1.1  JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.2  Eclipse 下载地址:http://www.eclips

重拾java系列一java基础

前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这种状态实在不好,作为一名开发人员,不应该只是会用,能满足需求就满足,而不去深究为什么这样做就行,它的实质是什么,底层到底是怎么样的结构,这样才能达到知其然知其所以然,所以,我觉得在工作闲暇时间,重新对我所认识的java进行一遍梳理,总结,实践,希望我可以坚持下来,争取突破自己!!!         

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

这一章主要复习下以前所接触的算法, (1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 1 /** 2 * 选择排序算法 在未排序序列中找到最小元素,存放到排序序列的起始位置 3 * 再从剩余未排序元素中继续寻找最小元素,然后放到前面已排序序列末尾. 4 * 以此类推,直到所有元素均排序完毕. 5 * 6 * @param numbers 7 */ 8 public stati

【Java系列】【基础版】多线程基础

多线程基础 1.1 认识进程和线程 1.1.1 什么是进程 1.1.1.1 进程是正在进项的程序,是资源分配的一个基本单位,有内存分配: 1.1.2 什么是线程 1.1.2.1 线程是进程的一个执行单位,也是进程的执行顺序: 1.1.2.2 一个进程至少有一个线程,可以由两个或以上的线程: 1.1.3 JVM至少有几个线程 1.1.3.1 至少有一个或两个线程,main方法和垃圾回收线程: 1.1.4 什么是多线程 1.1.4.1 2个或以上的线程去执行 1.1.5 多线程的作用 1.1.5.1

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

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】

对象比较器 public class LogUtils<T> { /** * 对象比较器 * 比较结果eg:1.字段名称loginName,旧值:liu,新值:gu;2.字段名称address,旧值:hunan,新值:neimenggu * @param oldBean * @param newBean * @return */ public String compareObject(Object oldBean, Object newBean) { String str = "&q

[java]基础重拾

7.17 重新学习了包管理 对于没有使用package打包的类,归到默认包.使用其他包名打包类,必须在工程文件夹下新建对应包名的目录.比如 package com.tencent.demo 则需要在工程文件夹下,新建名为com的文件夹,并在com文件夹下新建tencent文件夹,再简历demo文件夹,依次类推. [java]基础重拾

【小白的java成长系列】——Java基础知识

今天来说说java的基础知识,个人感觉都不知道要说啥的,还是为后面的内容做一些铺垫吧~ 今天主要说的都是java面向对象之前的基础知识,比如数据类型呀,表达式运算符呀~等等一系列的知识,下节来说说面向对象.今天这节我就不用程序来说明,直接用文字说明.因为个人感觉真木有啥好说的,这些程序后续都会说到的,比较简单,写写就会了的..好吧~开始了... 1. Java数据类型划分: 基本数据类型:都是一个个具体的值 数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的