java内部类的基本理解
来源:互联网 发布:adobe cc2018 mac破解 编辑:程序博客网 时间:2024/04/20 09:08
一、内部类(Nested Class)的分类
1、静态内部类
2、非静态内部类
1)、普通内部类(成员内部类)
2)、匿名内部类
3)、方法内部类(局部内部类)
二、内部类的一些特性
1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成一个独立的class文件,但是名称前面是外部类名称和$符号
三、内部类的具体实现如下
1、静态内部类1)静态内部类可以包含静态成员,非静态成员;2)静态内部类可以直接调用外部类的静态属性,静态方法,但是不能调用外部类的普通属性和普通方法;3)在不相关的类中,可以直接创建静态内部类的对象,不需要通过外部类;4)静态内部类实际上和外部类的联系不多,也只有命名空间上的联系。实例如下:
import com.silence.nested.StaticInnerClass.StaticClass;
/**
* 测试静态内部类的详细用法
* 1、内部类可以声明静态变量和普通变量
* 2、内部类方法只能调用外部类的静态变量和方法,不能调用普通变量和方法
*
* @author zhuxiang
*
*/
public class StaticInnerClass {
//定义静态内部类/*private*/ static class StaticClass{ //内部类可以声明静态变量和普通变量 int a = 3; static int b = 5;}
}
class Test{
public static void main(String[] args) {
//在其他不相关类中调用内部类的时候,可以用外部类名.内部类来声明
StaticInnerClass.StaticClass sClass = new StaticInnerClass.StaticClass();
//也可以直接用内部类来声明,不过会导入一个类似于包的结构:
//import com.silence.nested.StaticInnerClass.StaticClass;
StaticClass stclas = new StaticClass();
}
}
2、成员内部类(普通内部类)基本用法
1)成员内部类就像一个成员变量一样存在于外部类中;
2)成员内部类可以访问外部类的所有成员,包括private修饰的变量;
3)成员内部类的this指的是内部类对象本身,要拿到外部类对象可以使用外部类名.this。成员内部类的对象是一定要绑定到一个外部类的对象上的,因此,创建成员内部类对象时需要持有外部类的对象的引用。要先有外部类的对象,后有成员内部类对象;
4)成员内部类不能有静态成员,但是可以声明为final,并且只能是编译器可以确定值的表达式。
5)成员内部类的对象的创建方式:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
实例如下:
public class FiledInnerClass {
public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.test();}
}
class Outer{
int a = 3;private int b = 3;class Inner{ void test(){ System.out.println(a+b); System.out.println("内部类:" + this); System.out.println("外部类:" + Outer.this); }}
}
3、方法内部类(局部内部类)的基本使用
1)方法内部类的地位和方法内的局部变量的位置类似,因此不能修饰局部变量的修饰符也不能修饰方法内部类,如public,private等;
2)方法内部类只能在声明的方法内才可见,因此定义局部内部类之后,想用的话就要在此方法内直接实例化,但要先声明后使用,否则编译器找不到;
3)方法内部类不能访问定义它的方法内的局部变量,除非这个变量为final,本质原因是:局部变量和方法内部类的生命周期不一致。
4)方法内部类只能包含非静态成员!
实例如下:
/**
* 测试方法内部类(局部内部类)
* 只在该方法中有效
* 只能定义非静态变量
* 不能引用所在方法的局部变量,除非是final:
* 方法的生命周期和方法内部类的生命周期不一致
* @author zhuxiang
*
*/
public class MethodInnerClass {
}
class MethodOuter{
public void test(){ int a = 2; class Inner{//只在该方法中有效 }}
}
4、匿名内部类基本用法
1)匿名内部类的实例化方式:new InterfaceOrClass(){};意思是创造了一个实现(继承)了InterfaceOrClass的类的对象;
2)根据声明的位置,判断匿名内部类是成员内部类还是方法内部类;
注意:一般是方法内部类,这时就是具备方法内部类的特性。
3)三种使用方法:
继承式:
接口式:
参数式:
实例如下:
public class UnNameInnerClass {
public static void main(String[] args) { NameOuter outer = new NameOuter(); outer.test();}
}
class NameOuter{
public void test02(Car car){ car.run();}public void test(){ //匿名内部类,接口式 定义在方法中时,同时也是方法内部类 /*Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub } };*/ //匿名内部类,继承式 Car car = new Car(){ @Override public void run() { // TODO Auto-generated method stub System.out.println("子类的车开了!"); } }; car.run(); //参数式匿名内部类 test02(new Car(){ @Override public void run() { System.out.println("参数式匿名内部类!"); } });}
}
class Car{
public void run(){
System.out.println(“车开了!”);
}
}
- java内部类的基本理解
- java内部类的理解
- Java静态内部类,普通内部类的理解
- 理解 java 内部类
- Java内部类理解
- Java内部类理解
- java内部类理解
- 理解java内部类
- java内部类 -- 基本的一些知识
- Java内部类的使用与理解
- Java内部类的自我理解
- 对Java中内部类的理解
- Java 匿名内部类的理解
- java中匿名内部类的理解
- java 匿名内部类的理解
- 关于Java内部类的理解
- 理解Java内部类 匿名内部类
- 内部类的理解
- Linux 配置笔记
- 通州首家民营文化企业——点创世纪文化传播有限公司成功上市
- 自定义实现String类
- android中实现求昨天的日期的代码工具类
- NSNumber
- java内部类的基本理解
- android自定义view粒子效果之雨-续
- DFS Construct Binary Tree from Preorder and Inorder Traversal
- 单点登录(SSO)服务
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- Spring MVC基础
- 《剑指Offer》学习笔记--面试题43:n个骰子的点数
- org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current 出错
- MySQL命令大全