JAVA基础补漏--内部类
2024-10-07 01:12:10
成员内部类
public class InnerClass {
public static void main(String[] args) {
System.out.println("+++++++++++++++++++++++");
Outer.Inner oi = new Outer().new Inner();
oi.methodInner();
}
}
public class Outer {
int num = 10;
public class Inner{
int num = 20;
public void methodInner(){
int num =30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
局部内部类
public class InnerClass {
public static void main(String[] args) {
Outer out = new Outer();
out.methodOuter();
}
}
public class Outer {
int num = 10;
public void methodOuter(){
class Inner{
int num = 10;
public void methodInner(){
System.out.println(num);
}
}
Inner in = new Inner();
in.methodInner();
}
}
权限修饰符
外部类:public / default
成员内部类:public protect default private
局部内部类:什么都不能用
局部内部类,如果希望访问所在方法的局部变量,这个局变量必是final的。如果这个变量不变,final可不写。
原因
1.new 的对象在堆内存中。
2.局部变量跟着方法走,在栈内部中。
3.方法运行结束后,立即出栈,局部变量会消失。
4.但是内部类的方法要使用,必须要new一个对象,new出来对象在内存中一直存在,直到垃圾回收,这时局部变量可能已经销毁了。如果要使用,就自己要拷贝一个,但如果变量总变,没有办法拷贝,如果是final,则可以直接拷贝。
public class Outer {
public void methodOuter{
final int num = 10;
class Inner{
public void methodInner(){
System.out.println(num);
}
}
}
}
匿名内部类
如果接口实现类(或者父类的子类)只使用一次,这时候可以省略类的定义,而使用匿名内部类。
格式:
接口类名称 对象 = new 接口名称(){
//覆盖重写所有抽象方法
}
public class main {
public static void main(String[] args) {
myInterface obj = new myInterface() {
@Override
public void method() {
System.out.println("Inner method");
}
};
obj.method();
new myInterface(){
@Override
public void method() {
System.out.println("匿名对象使用匿名内部类");
}
}.method();
}
}
最新文章
- angularjs中ng-controller中绑定对象
- WebKit示例解读
- obout editor Absolute path for uploaded image
- 戴文的Linux内核专题:06配置内核(2)
- Nginx Location配置语法介绍、优先级说明
- List GetEnumerator
- table总结insertRow、deleteRow
- Snapchat
- C 语言学习guideline
- <;六>; jQuery 获得内容和属性
- 0x00000000该内存不能为read
- window 远程在Linux(centOS7.0)上安装JDK以及配置环境变量
- 【Android Developers Training】 10. 序言:支持不同设备
- YAML书写规范
- Bootstrap优秀模板-ColorAdmin.4.3.0
- js 手写 Promise
- 题目--统计一行文本的单词个数(PTA预习题)
- JAVA 多线程(4)
- Google Chrome 下载&;绿化&;增强
- 离开(切换)当前页面时改变页面title
热门文章
- Delphi StringReplace – 替换字符函数
- python中matplotlib绘图封装类之折线图、条状图、圆饼图
- Centos7 下Boost 1.61.0源码 配置开发环境
- responsive and functional programming RxJava
- 在VMW里安装Ghost操作系统遇到的问题及解决的办法
- 《深入理解Linux网络技术内幕》阅读笔记 --- 路由查找
- Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令
- Java基础—内部类(转载)
- getElementsByClassName - 兼容详细介绍
- Apache和Nigix