JAVA基础补漏--内部类
成员内部类
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();
}
}
JAVA基础补漏--内部类的更多相关文章
- java基础之 内部类
Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...
- Java基础(53):内部类(转)
java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...
- Java基础(五)--内部类
内部类简单来说就是把一个类的定义放到另一个类的定义内部 内部类分为:成员内部类.局部内部类.匿名内部类.静态内部类 成员内部类:最常见的内部类 public class Outter { privat ...
- java基础之 内部类 & 嵌套类
参考文档: 内部类的应用场景 http://blog.csdn.net/hivon/article/details/606312 http://wwty.iteye.com/blog/338628 定 ...
- java基础随笔-内部类
今天来复习下内部类的一些基础知识. 首先是内部类的分类: 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 下面逐一来介绍下. 首先是成员内部类,就是将内部类作为一个成员变量来处理.具体 ...
- java基础语法-内部类与匿名内部类
1.成员内部类(声明在类内部&&方法之外) class Person{ String name = "韩梅梅"; int age; class Bird{ Stri ...
- JAVA基础补漏--基础数据类型与引用数据类型
==在不同数据类型中意义不同. 在基础数据类型中,表示的是数值的比较. 在引用数据类型中,表示的是内存地址值的比较. 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit), ...
- JAVA基础知识|内部类
一.什么是内部类? 内部类(inner class)是定义在另一个类中的类 为什么使用内部类? 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 2)内部类可以对同一个包中的其他类隐藏 ...
- Java基础加强-内部类及代理
/*内部类是一个编译时的概念,*/ 常规内部类.静态内部类.局部内部类.匿名内部类 1.常规内部类(常规内部类没有static修饰且定义在外部类类体中) 1.常规内部类中的方法可以直接使用外部类的实例 ...
随机推荐
- mysql-bin.000001文件的来源及处理方法【转】
在MySQL数据库中,mysql-bin.000001.mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令 ...
- LoadLibrary失敗,GetLastError 返回127錯誤
該原因一般是由於DLL或其依賴的DLL使用了高版本的API,而在低系統中運行時,找不到該函數所引發的錯誤. 比如:該函數:InterlockedExchange64, 看MSDN: Client Re ...
- ilbc编解码在android实现
iLBC 是为专为提供稳健的 IP 语音通信而开发的语音 codec,以窄带语音为设计基础,具有 8 kHz 的采样率.iLBC codec 支持两种基本的帧长度:13.3 kbps 比特率下编码帧长 ...
- HDU 5892 Resident Evil
题目链接:传送门 题目大意:有50种动物,给你n*n的矩阵,m次操作,P代表加入操作,在左上角 x1,y1 到右下角 x2,y2,的矩形范围内加入 种类为x,数量为y的动物. Q代表询问操作,在左上角 ...
- md5 算法类 java
package com.sunyard.p2p.util; import java.security.MessageDigest; import java.security.NoSuchAlgorit ...
- 【BZOJ4388】JOI2012 invitation 堆+线段树+并查集(模拟Prim)
[BZOJ4388]JOI2012 invitation Description 澳洲猴举办了一场宴会,他想要邀请A个男生和B个女生参加,这A个男生从1到A编号,女生也从1到B编号.现在澳洲猴知道n组 ...
- [Algorithms] Heap and Heapsort
Recently I reviewed the classic heapsort algorithm and implement it according to contents in Introdu ...
- flex组合流动布局实例---利用css的order属性改变盒子排列顺序
flex弹性盒子 <div class="container"> <div class="box yellow"></div> ...
- 手动爬虫之流程笔记1(python3)
一.引入拓展库 由于刚刚起步学习爬虫,故从urllib库开始 首先引入urllib,这里主要用到urllib中request类 import urllib.request as ur 二.设置全局参数 ...
- 制作简易app个人总结
1.每次修改app.js或者其他路由js文件,都必须重启node app.js,否则修改不起作用!!! 2.<link rel="stylesheet" href=" ...