匿名对象:

是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量

创建一个普通对象:

Person p = new Person();

创建一个匿名对象:

new Person();

注意:

1.匿名对象只能使用一次

2.匿名对象可以作为参数传递

3.匿名对象可以当作方法的返回值

示例:

public class Demo {
public static Person getPerson(){
//普通方式
//Person p = new Person();
//return p; //匿名对象作为方法返回值
return new Person();
} public static void method(Person p){}
} public class Test {
public static void main(String[] args) {
//调用getPerson方法,得到一个Person对象
Person person = Demo.getPerson(); //调用method方法
Demo.method(person);
//匿名对象作为方法接收的参数
Demo.method(new Person());
}
}

内部类:

在类的内部定义类

什么时候需要呢?比如,一个汽车,包含发动机,发动机就可以用内部类来描述

内部类的分类:成员内部类,局部内部类

成员内部类的建立和调用示例:

public class Outer {
private int a = 1;
//内部类可以使用外部类成员,包括私有
//外部类无法直接使用内部类变量,必须建立内部类对象
class Inner{
public void inner(){
System.out.println("内部类方法"+a);
}
}
}
public class Test {
public static void main(String[] args) {
//内部类调用格式:
Outer.Inner in = new Outer().new Inner();
in.inner();
}
}

同名变量的调用问题:

public class Outer {
int i = 1;
class Inner{
int i =2;
public void inner(){
int i = 3;
System.out.println(i);//
System.out.println(this.i);//
System.out.println(Outer.this.i);//
}
}
}

局部内部类:

把一个类写在了一个方法里面

调用方法相对复杂

示例:

public class Outer {
public void out(){
class Inner{
public void inner(){
System.out.println("局部内部类方法");
}
}
Inner inner = new Inner();
inner.inner();
}
}
public class Test {
public static void main(String[] args) {
new Outer().out();
}
}

内部类的实际使用:

匿名内部类:

临时定义某一指定类型的子类,定义后立即创建刚刚定义的这个子类对象

示例:

public interface Smoking {
public abstract void smoking();
}
public class Test {
public static void main(String[] args) {
//固定格式
//实际上创建了接口的实现类,重写方法
//这里也可以这样写Smoking s = new Smoking() {};
//然后s.方法调用
new Smoking() {
public void smoking() {
System.out.println("人在吸烟");
}
}.smoking();
//注意这个分号
}
}

Java学习笔记15(面向对象八:匿名对象、内部类)的更多相关文章

  1. 疯狂java学习笔记之面向对象(八) - static和final

    一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...

  2. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  3. Java学习笔记:01面向对象-继承

    01面向对象-继承 一.java中的数据类型 1.基本数据类型:四类 八种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) do ...

  4. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  5. 【原】Java学习笔记020 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...

  6. 【原】Java学习笔记018 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系的子类可以 ...

  7. 【原】Java学习笔记015 - 面向对象

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 传递 值类型参数 ...

  8. Java 学习笔记 ------第四章 认识对象

    本章学习目标: 区分基本类型与类类型 了解对象与参考的关系 从打包器认识对象 以对象观点看待数组 认识字符串的特性 一."=" 和 "==" 当=用于基本类型时 ...

  9. Java 学习笔记(4)——面向对象

    现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...

随机推荐

  1. javaweb学习总结(六)——Servlet开发(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文 ...

  2. 读《淘宝技术这十年》 总结下web架构的发展

    关键词就两 分布式 缓存 分布式 数据库,应用服务器等的多节点部署,数据库的读写分离,剥离文件系统 缓存 数据缓存 静态页面缓存 php时代 最初LAMP起步 并将数据库做读写分离,拆分为主库+从库 ...

  3. 【并查集】HDU 1325 Is It A Tree?

    推断是否为树 森林不是树 空树也是树 成环不是树 数据: 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 1 0 0 1 2 2 3 4 5 0 0 2 5 0 0 ans: no ...

  4. 用HTML5实现的各种排序算法的动画比較

    用HTML5实现的各种排序算法的动画比較 非常有意思,详见: http://www.webhek.com/misc/comparison-sort/

  5. String 经常用法最优算法实现总结 (二)

    1. String getOrderedString(boolean isDuplicated, String - str) 说明: Orders all characters in the inpu ...

  6. 【SqlServer系列】表达式(expression)

    1   概述 本篇这文章主要概述SqlServer表达式. 2   具体内容 2.1  使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure  SQL数据仓库:并行数 ...

  7. 微服务架构之RPC-client序列化细节

    通过上篇文章的介绍,知道了要实施微服务,首先要搞定RPC框架,RPC框架的职责要向[调用方]和[服务提供方]屏蔽各种复杂性: (1)让调用方感觉就像调用本地函数一样 (2)让服务提供方感觉就像实现一个 ...

  8. 用jQuery绑定事件到动态创建的元素上

    jQuery最常用的一个功能就是对DOM的操作,与之相关的比如对事件的绑定和Ajax动态内容加载.当我们绑定事件到Ajax load回来的内容上或其他动态创建的元素上时会发现事件没响应,和你预想的结果 ...

  9. Shell编程中的变量作用域

    有两个shell脚本文件: a.sh name=Tom echo $name ./b.sh b.sh echo "name in b.sh:"$name 运行./a.sh时输出结果 ...

  10. 微信小程序使用场景延伸:扫码登录、扫码支付

    微信小程序使用场景延伸:扫码登录.扫码支付 小程序最适合的使用场景有哪些?相比大家能列举出来很多,但这个场景,大家可能多数没想到_^ 笔者团队近期接到了一个PC项目:转转游戏租号PC官网,该项目要求在 ...