Java知识点:内部类
内部类class文件命名规则
- 普通内部类、静态内部类:<Outer>\$<Inner>.class,其中<Outer>为外部类类名,<Inner>为内部类类名。
- 方法内部类:<Outer>\$<number><Inner>.class,其中<Outer>为外部类类名,<Inner>为内部类类名,<number>为在外部类中定义的第number个Inner内部类。因为每个外部类(比如Outer)方法都能够定义一个名字相同的内部类(比如Inner),则命名这些名字相同的内部类的方法为:Outer\$1Inner.class、Outer\$2Inner.class。
- 匿名内部类:<Outer>\$<number>.class,其中<Outer>为外部类类名,<number>为第number个匿名内部类,因为匿名内部类没有类名,因此只能用编号代替。
普通内部类
语法注意点:
- 在普通内部类中不允许定义任何的静态成员,否则Compile Error。
public class InnerClass01
{
public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner inn = out.new Inner(); //创建内部类实例之前,必须创建外部类实例
inn.print();
}
}
class Outer
{
private int a = 1;
class Inner
{
public void print()
{
System.out.println("Inner " + a); //内部类能够访问外部类的私有实例变量
}
}
}
上面的代码中:
- 第12~18行:定义了内部类,声明方法和定义普通类类似。
- 第16行:内部类能够访问外部类的私有实例变量。
- 第4~6行:实例化内部类之前必须要有一个外部类的对象,内部类的类型是:<Outer>.<Inner>。
静态内部类
public class InnerClass04
{
public static void main(String[] args) {
Outer.Inner inn = new Outer.Inner();
inn.fun();
}
}
class Outer
{
static class Inner
{
public void fun()
{
System.out.println("hello");
}
}
}
注意点:
- 第4行:创建静态内部类的对象的方法:<Outer>.<Inner> in = new <Outer>.<Inner>();
- 静态内部类其实不像内部类,因为不需要创建外部类实例就能创建内部类实例。
匿名内部类
public class InnerClass03
{
public static void main(String[] args) {
Outer out = new Outer();
out.addListener(new ClickListener(){ //匿名内部类,命名为:InnerClass03$1.class
public void onClick()
{ }
});
}
}
class Outer
{
public void addListener(ClickListener listener)
{ }
}
interface ClickListener
{
public void onClick();
}
在监听器、触发器的使用中经常用到,上面是一个典型的匿名内部类的使用方法,这个匿名内部类是实现ClickListener接口的子类。
方法内部类
在方法内部定义内部类,一般不太用到。
注意点:
- 方法内部类不能使用方法的局部变量,因为内部类实例的生命周期可能比方法的局部变量长。
- 方法内部类可以和普通内部类一样,方法外部类的实例变量。
- 如果要创建方法内部类的实例,则必须在方法内部类声明后才能定义。
内部类的优先级
下面代码输出:内部类。
class Inner //第一个Inner类
{
public void print()
{
System.out.println("外部类");
}
}
public class InnerClass05
{
class Inner //第二个Inner类
{
public void print()
{
System.out.println("内部类");
}
}
public void fun()
{
Inner in = new Inner();
in.print(); //输出 “内部类”
class Inner //第三个Inner类
{
public void print()
{
System.out.println("方法内部类");
}
}
}
public static void main(String[] args) {
InnerClass05 inclass = new InnerClass05();
inclass.fun();
}
}
注意点:
- 优先级:方法内部类 > 普通内部类/静态内部类 > 外部类。
Java知识点:内部类的更多相关文章
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- Java的内部类
Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...
- 给Java新手的一些建议----Java知识点归纳(Java基础部分)
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...
- java使用内部类的好处及其初始化
java使用内部类的原因 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响 java内部类初始化 ForeCatal ...
- java知识点梳理
网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) ...
- JAVA基础——内部类详解
JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...
- JAVA面向对象-----内部类的概述
JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...
- 自己整理的所有java知识点(不断迭代中)
1. 自己整理的所有java知识点(不断迭代中) 画图工具注册 https://www.processon.com/i/599d35fae4b00d97d7f9bb17 1.1. Java整体知识架构 ...
- Java的内部类真的那么难以理解?
01 前言 昨天晚上,我把车停好以后就回家了.回家后才发现手机落在车里面了,但外面太冷,冷到骨头都能感受到寒意——实在是不想返回一趟去取了(小区的安保还不错,不用担心被砸车玻璃),于是打定主意过几个小 ...
随机推荐
- IntelliJ IDEA 比较当前版本文件与历史文件
前言: 写代码修改后怎样比较与历史文件的区别呢?idea提供了2种比较方式(目前笔者所了解到的) 一.SVN的版本比较 二.当前文件与历史版本比较
- 【BestCoder】【Round#29】
T1 啊……a^b 与 c^d比较大小,我们可以两边取对数,转化成 log(a^b)=b*log(a) 和d*log(c) 这样就能直接算了……然后稍微搞一下精度什么的就A了=.= //BC #29 ...
- 树形dp求树的重心
Balancing Act http://poj.org/problem?id=1655 #include<cstdio> #include<cstring> #include ...
- android 解析XML方式(三)
上一节中,我们使用SAX方式解析xml文档, SAX方式是基于事件驱动的.当然android的事件机制是基于回调函数的.在这一节中,我们用另外一种方式解析xml文档,这种方式也是基于事件驱动的,与SA ...
- CentOS(RHEL) 操作备忘
1.安装中文语言包及切换 yum groupinstall chinese-support vi /etc/sysconfig/i18n change en_US to zh_CN 2.用户自动登录 ...
- Pyp 替代sed,awk的文本处理工具
Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...
- Eclipse Error: Unable to set localhost. This prevents creation of a GUID.
Symptoms The following error appears in the atlassian-confluence.log: 2011-03-16 18:20:03,021 ERROR ...
- ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)
题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若 最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则 就要另加上不够的数量,具体看代 ...
- NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
在Objective-c进行网络编程时,经常需要把数据转换成URLEncoding编码,如对+号编码后,变成%2b.这里我们给出一种实现. //NSString+URLEncoding.h #impo ...
- 使用getJSON()方法异步加载JSON格式数据
使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数组,并对获取的数据进行解析,显示在页面中,它的调用格式为: jQuery. ...