学生视角带你了解Java内部类
作者:笑霸final 发布时间:2022-09-29 17:51:04
一、内部类介绍
1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class)。内部类是类的五大成员之一(属性、 方法、构造器、代码块、内部类)。
分类:
二、成员内部类:
1、非静态内部类
说明:定义在成员位置中(方法或代码块外面),无static修饰。
1.可以直接访问外部类的所有的成员
2.可以 添加任意权限修饰符
3.作用域,和其他成员一样作用在整个外部类
package local_class;
public class localclass {//外部类
//属性位置
private int n1=10;
class localN1{//局部类
public void output(){
//==1==.可以直接访问外部类的所有的成员,包括私有
System.out.println("获取私有成员"+n1);
}
}
//写一个方法来创建局部类的一个实列
public void output(){
localN1 LocalN1 = new localN1();
LocalN1.output();
}
}
实现:
2、静态内部类
**说明:**定义在成员位置中(方法或代码块外面),有或无static修饰。
1.可以直接访问外部类的静态的成员,不能访问非静态成员。
2.可以 添加任意权限修饰符
3.作用域,和其他成员一样作用在整个外部类
代码:
package local_class;
public class _static_localclass {//外部类
private int n1=10;
static int n2=20;
static public class localN2{//静态局部类
public void output(){
//==1==.可以直接访问外部类的所有的成员,包括私有
System.out.println("获取_static_localclass私有成员"+n2);
//System.out.println(n1);
}
}
//写一个方法来创建局部类的一个实列
public void output(){
localN2 LocalN2 = new localN2();
LocalN2.output();
}
}
成员内部类:用法比较简单。
二、局部内部类:
说明:局部类是定义在外部类的方法内或者代码块内。
1.可以直接访问外部类的所有的成员。
2.不能添加访问修饰符,局部内部类的地位就是一个局部变量(所以可以用fianl修饰)。
3.作用域:作用在所定义的方法中或者代码块中。
4.访问方式:局部内部类访问外部外部类成员可以直接访问。外部类访问局部内部类,在外部类作用域内先创建对象再访问。
5.外部其他类不能访问内部类。
6.外部类成员与内部类成员重名时,默认就近原则,如果想用外部类的话可以使用:外部类名.this.成员 。
例如:
2、有名的局部内部类
错误代码
正确代码
package _inner_class;
public class Named_local_inner_class {//外部类
private int a1=1;
int a2=2;
private void fun(){
System.out.println("输出了私有方法");
}
//第一种情况,在方法中
//第二种情况,在代码块中(我就不打代码了和在方法中一样的)
//此处以方法中为例。
public void output(){//方法
class inner_class{//局部内部类
//1.可以访问外部类的所有成员
public void _output(){
System.out.println("a1="+a1);//访问的私有成员
System.out.println("a2="+a2);
fun();
}
}
//只需要实例化就行了,然后调用这个 output()方法。
//注意作用域
inner_class Inner_class=new inner_class();
Inner_class._output();
}//结束方法
}//外部类
调用
1、匿名局部内部类(重要)
1.本质还是一个内部类 就是一个类,该类没有名字(其实有名字,只是我们看不见,系统分配)。
2.同时还是一个对象。 基本语法
new 类名或接口名(参数列表){
类体
};
调用匿名内部类:
输出
和有名的局部内部类的区分
1.A22对象只使用一次,以后不再使用时用匿名局部内部类。
2.A22的编译类型和运行类型是什么?(运行类型其实就是匿名局部内部类,就是XXXXX.外部类名$1)
如图:
最佳实践:当作参数直接传递,简介高效。
来源:https://blog.csdn.net/weixin_52062043/article/details/122567464
猜你喜欢
- Java中避免NullPointerException的方法总结在字符串常量上调用equals// good"string lit
- 一.WebSocket简单介绍WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-d
- java匿名内部类:1:匿名内部类,匿名内部类也就是没有名字的内部类。2:匿名内部类的作用正因为没有名字,所以匿名内部类只能使用一次,它通常
- 前言相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Sp
- 引言最近在工作中结合线程池使用 InheritableThreadLocal 出现了获取线程变量“错误&rdqu
- 1.基本语法key: value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层
- 1.问题产生情况我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_gene
- 前言之前采取项目中嵌套html页面,实现基本的登录校验、权限校验、登出操作、记住我等功能试下。但是,现在的开发基本都是前后分离样式,后端并不
- Java中代码的加载顺序所能了解的知识点类的依赖关系static代码块的加载时间继承类中构造器的隐式调用非static的成员变量初始化时间m
- 什么是JavaMemoryModel(JMM)?JMM通过构建一个统一的内存模型来屏蔽掉不同硬件平台和不同操作系统之间的差异,让Java开发
- Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需
- 序言在flutter开发中,我们使用 bloc 框架,基于状态变更进行响应式开发。本篇文章,小轰将 bloc 核心业务块进行拆解简化,聊一聊
- 概述ConcurrentHashMap(CHM)是日常开发中使用频率非常高的一种数据结构,想对于普通的HashMap,CHM提供了线程安全的
- 本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下引入依赖<dependency>  
- 1. 前言Spring最重要的一个概念当属Bean了,我们写的Controller、Service、Dao凡是加了对应注解交给Spring管
- 前言:什么是JDBCJava 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户
- 在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统
- 前言作为大数据家族中的重要一员,在大数据以及海量数据存储方面,hbase具有重要的地方,本篇将从java对hbase的操作上,进行详细的说明
- 本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下题目描述:猜数字(又称 Bulls and Cows )是一
- 最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地