java匿名类和匿名对象及this的其他用法
/*
匿名内部类:就是内部类的简写格式。
必须前提:内部类必须继承或者实现一个类或者接口。
匿名内部类其实就是一个匿名 子类对象。
格式:new 父类对象 or 接口(){
子类内容;(覆盖父类的, 而且可以增加自己的方法)
}//相当于将 继承父类 和 new 的过程 写到了一起有某有!很方便有某有!
*/
class Outer{
int num;
public Outer(){
num = 5;
} class Inner{
int num;
public Inner(){
num = 10;
}
public void show(){//也就是调用该方法会有两个this指针入栈,why?很简单,因为内部类要访问外部类的数据啊!
int num = 11;
System.out.println("Inner part num " + num);//打印内部类中方法中的局部num变量
System.out.println("Inner num " + this.num);//打印内部类中num成员变量
//System.out.println("Inner num " + Inner.this.num);//打印内部类中num成员变量
System.out.println("Outer num " + Outer.this.num);//打印外部类中num成员变量
}
} public void methods(){
final int num = 55;//这个变量为什么一定要用final修饰呢?
//因为如果不用final修饰,num就是一个局部变量,当这个函数结束之后就会消失!
//而我们是在局部内部类的中访问这个num,这个类产生的对象是在堆上的,函数结束
//对象也不会消失,那么这个对象在以后可能会多次访问这个num变量,这样就出错了!
//如果是final, num 就是 55这一个值,不会变!
class InnerTwo{
void show(){
System.out.println("part Inner final num = " + num);
}
} InnerTwo in = new InnerTwo();
in.show();
} public void way(){
System.out.println("******************************************");
//普通内部类:
new Inner().show();//匿名对象
new Inner(){ // 匿名内部类
public void show(){
System.out.println("内部类的匿名类!");
}
}.show();
//静态内部类:
new InnerOne().way();
new InnerOne(){
public void way(){
System.out.println("静态内部类的匿名类!");
}
}.way();
//外部类:
new Outer().show();
new Outer(){
public void show(){
System.out.println("外部类的匿名类!");
}
}.show();
} static class InnerOne{
public static int num = 100; public void way(){
System.out.println("静态内部类中的方法!");
} public static void show(){
System.out.println("static InnerOne num " + num);
}
} public void show(){
System.out.println("Outer num " + num);
}
} public class PC{
public static void main(String[] args){
Outer out = new Outer();
out.show();
Outer.Inner in = out.new Inner();
in.show(); // out.InnerOne.show();//类的所属是类, 类是加载到方法区的,当然对象实例中不存在类;
Outer.InnerOne.show(); //匿名类和匿名对象的测试:
out.way();
}
}
java匿名类和匿名对象及this的其他用法的更多相关文章
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理
package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...
- .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
1.自动属性 Auto-Implemented Properties 2.隐式类型 var var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...
- java synchronized类锁,对象锁详解(转载)
觉得还不错 留个记录,转载自http://zhh9106.iteye.com/blog/2151791 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看 ...
- Java的类锁、对象锁和方法锁
在Java中,对于synchronized关键字,大家看到的第一反应就是这个关键字是进行同步操作的,即得名"同步锁". 当用它来修饰方法和代码块时,默认当前的对象为锁的对象,即对象 ...
- java 匿名类和匿名方法
package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...
- Java工具类 通过ResultSet对象返回对应的实体List集合
自从学了JDBC用多了像一下这种代码: List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); ...
- java的类class 和对象object
java 语言的源代码是以类为单位存放在文件中,已public修饰的类名须和存放这个类的源文件名一样.而 一个源文件中只能有一个public的类,类名的首字母通常为大写. 使用public修饰的类可以 ...
随机推荐
- IntelliLock
IntelliLock的使用说明: http://blog.csdn.net/gnicky/article/details/20737107 http://download.csdn.net/deta ...
- EventBus的简单使用与原理
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- 利用html5 canvas实现纯前端上传图片的裁剪
今天跟大家分享一个前端裁剪图片的方法.许多网站都有设置用户头像的功能,用户可以选择一张本地的图片,然后用网站的裁剪工具进行裁剪,然后设置大小,位置合适的头像.当然,网上也有一些用js写的诸如此类裁剪的 ...
- 原创 Datareader 导出为csv文件方法
DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源.因为Datatable 其实就是内存中的一个数据表 代码如下 /// <summary> ...
- mysql客户端导入sql文件命令
mysql -h localhost -u root -p dbname < filename
- 如何向MyEclipse项目的文件夹中添加JSP页面?
1.鼠标选中该文件夹:2.鼠标右键单击该文件夹,选择“new->file”菜单项,创建一个空白文件:3.将JSP页面的所有源代码全部复制到该文件4.单击工具栏的“保存”按钮
- node(规则引擎)
本文主要记录node的下的一个开源规则引擎nools,给出简单的实例,github地址为: https://github.com/C2FO/nools 定义规则引擎(test.nools) defin ...
- java线程与并发(一)
有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...
- 简述Python模块和包
我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...
- Java-继承,多态练习0922-03
编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public void ...