网站首页 > java教程 正文
好程序员Java教程浅谈Java中的内部类,最近在讲Java中的内部类,感觉内部类实际上对于初学者用得不多,那么内部类简单的说,其实就是在一个类的内部定义的类。
按照定义的情况分为:成员内部类,局部内部类,静态内部类,匿名内部类。
成员内部类,就是定义一个当作类的成员变量的类。
局部内部类,就是在类里面定义一个当作局部变量的类,通常是在方法或代码块中使用。
静态内部类,就是在类中定义一个静态变量,而该静态变量是一个类。
匿名内部类,通常是在创建一个接口对象,该对象是在创建对象的同时实现接口,而该接口的实现只是在此处使用一次,所以不需要定义名字,称为匿名内部类。
请看如下代码:
public interface MyInter{
public void method();
}
public class Outter {
//public static int i; // 普通静态变量
// 静态内部类
public static class Inner3{
}
//public String name; // 普通成员变量
// 成员内部类
public class Inner1{
}
public void test() {
//String n; // 普通局部变量
// 局部内部类
class Inner2{
}
// 匿名内部类,在运行时会生成一个临时的名字,类似:Outter$1.java
MyInter in = new MyInter() {
@Override
public void method() {
}
};
}
}
上面的代码展示了4种不同的内部类的情形。
接下来看看这4种情形的具体用法。
静态内部类:
public class Outter {
public int o1;
public static int os1;
public void om1() {
System.out.println(Inner3.ns3);
System.out.println(new Inner3().n3);
System.out.println("om1");
}
public static void oms1() {
System.out.println("oms1");
}
//public static int i;
// 静态内部类
public static class Inner3{
// 在静态内部类中可以定义基本的成员和方法,以及静态成员和方法
public int n3;
public static int ns3;
public void m3() {
System.out.println("m3");
}
public static void ms3() {
System.out.println(os1);
oms1();
System.out.println("ms3");
}
}
}
静态内部类的使用:
public static void main(String[] args) {
Outter.Inner3 i3 = new Outter.Inner3();
i3.n3 = 3;
Outter.Inner3.ns3 = 4;
Outter.Inner3.ms3();
i3.m3();
}
可以看到静态内部类和静态变量使用方式差不多,直接使用类名即可。
成员内部类:
//成员内部类
public class Inner1{
public int n1;
public int o1;
public void m1(int o1) {
o1 = 1; // 局部变量
this.o1 = 2; // 当前属性
Outter.this.o1 = 4; // 外部属性
om1();
System.out.println("m1");
}
}
成员内部类的使用:
public static void main(String[] args) {
// 调用
Outter.Inner1 i1 = new Outter().new Inner1();
i1.n1 = 3;
i1.m1(3);
}
由于是成员,所以需要先创建对象才能使用。
局部内部类和匿名内部类:相当于局部变量,只能在方法里面调用和创建对象等,可以调用外部的变量和方法,外部不能调用它。请看如下方法:
public void test() {
//String n;
// 局部内部类
class Inner2{
public void m2() {
o1 = 3;
}
}
Inner2 i2 = new Inner2();
i2.m2();
// 匿名内部类,在运行时会生成一个临时的名字,类似:Outter$1.java
MyInter in = new MyInter() {
@Override
public void method() {
o1 = 3;
}
};
in.method();
}
至此,内部类简单的使用基本就到这了。
猜你喜欢
- 2024-09-27 内部类Java(内部类和静态内部类的区别)
- 2024-09-27 你好,我是java中的内部类(java中的内部类包括)
- 2024-09-27 Java基础:Java 内部类和静态内部类的区别
- 2024-09-27 java - 普通内部类和静态内部类的区别
- 2024-09-27 JAVA内部类的经典总结(java内部类分别有哪几种?)
- 2024-09-27 Java内部类(java内部类的作用)
- 2024-09-27 Java内部类浅析(java内部类详解)
- 2024-09-27 如何在 Java 中定义一个内部类?(java用内部类声明对象)
- 2024-09-27 Java 内部类和异常类(详细版)(java第七次实验 内部类与异常类)
- 2024-09-27 Java学习:内部类的概念于分类(java内部类分别有哪几种?)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)