- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java内部类原理、概述与用法实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了java内部类原理、概述与用法。分享给大家供大家参考,具体如下:
内部类的概述 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/*
内部类概述:
把类定义在其他类的内部,这个类就被称为内部类。
举例:在类a中定义了一个类b,类b就是内部类。
内部的访问特点:
a:内部类可以直接访问外部类的成员,包括私有。
b:外部类要访问内部类的成员,必须创建对象。
*/
class
outer {
private
int
num =
10
;
class
inner {
public
void
show() {
//内部类可以直接访问外部类的成员,包括私有。
system.out.println(num);
}
}
public
void
method() {
//找不到符号
//show();
//外部类要访问内部类的成员,必须创建对象。
inner i =
new
inner();
i.show();
}
}
class
innerclassdemo {
public
static
void
main(string[] args) {
}
}
|
内部类位置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*
内部类位置
成员位置:在成员位置定义的类,被称为成员内部类。
局部位置:在局部位置定义的类,被称为局部内部类。
成员位置:在成员位置定义的类,被称为成员内部类。
*/
class outer {
private int num = 10;
//成员位置
/*
class inner {
}
*/
public
void
method() {
//局部位置
class
inner {
}
}
}
class
innerclassdemo2 {
public
static
void
main(string[] args) {
}
}
|
如何直接访问成员内部类的成员 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*
成员内部类:
如何直接访问内部类的成员。
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
*/
class
outer {
private
int
num =
10
;
class
inner {
public
void
show() {
system.out.println(num);
}
}
}
class
innerclassdemo3 {
public
static
void
main(string[] args) {
//需求:我要访问inner类的show()方法
//格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
outer.inner oi =
new
outer().
new
inner();
oi.show();
}
}
|
成员内部类的修饰符:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/*
成员内部类的修饰符:
private 为了保证数据的安全性
static 为了方便访问数据
注意:静态内部类访问的外部类数据必须用静态修饰。
案例:我有一个人(人有身体,身体内有心脏。)
class body {
private class heart {
public void operator() {
system.out.println("心脏搭桥");
}
}
public void method() {
if(如果你是外科医生) {
heart h = new heart();
h.operator();
}
}
}
按照我们刚才的讲解,来使用一下
body.heart bh = new body().new heart();
bh.operator();
//加了private后,就不能被访问了,那么,怎么玩呢?
body b = new body();
b.method();
*/
class
outer {
private
int
num =
10
;
private
static
int
num2 =
100
;
//内部类用静态修饰是因为内部类可以看出是外部类的成员
public
static
class
inner {
public
void
show() {
//system.out.println(num);
system.out.println(num2);
}
public
static
void
show2() {
//system.out.println(num);//报错。静态内部类访问的外部类数据必须用静态修饰。
system.out.println(num2);
}
}
}
class
innerclassdemo4 {
public
static
void
main(string[] args) {
//使用内部类
// 限定的新静态类
//outer.inner oi = new outer().new inner();//这个访问方式错误
//oi.show();
//oi.show2();
//成员内部类被静态修饰后的访问方式是:
//格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
outer.inner oi =
new
outer.inner();
oi.show();
oi.show2();
//show2()的另一种调用方式。因为静态方法,可以通过类名调用。
outer.inner.show2();
}
}
|
内部类和外部类没有继承关系.
通过外部类名限定this对象 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/*
案例:
要求请填空分别输出30,20,10。
注意:
1:内部类和外部类没有继承关系。
2:通过外部类名限定this对象
outer.this
*/
class
outer {
public
int
num =
10
;
class
inner {
public
int
num =
20
;
public
void
show() {
int
num =
30
;
system.out.println(num);
system.out.println(
this
.num);
//system.out.println(new outer().num);
system.out.println(outer.
this
.num);
}
}
}
class
innerclasstest {
public
static
void
main(string[] args) {
outer.inner oi =
new
outer().
new
inner();
oi.show();
}
}
|
局部位置的内部类访问局部变量问题 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
局部内部类
a:可以直接访问外部类的成员
b:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
注意事项:
局部内部类访问局部变量的注意事项?
a:局部内部类访问局部变量必须用final修饰
b:为什么呢?
局部变量是随着方法的调用而调用,随着调用完毕而消失。
而堆内存inner的内容并不会立即消失。所以,我们加final修饰。
加入final修饰后,这个变量就成了常量。既然是常量。你消失了。
我在内存中存储的是数据20,所以,我还是有数据在使用。
*/
class
outer {
private
int
num =
10
;
public
void
method() {
//int num2 = 20;
final
int
num2 =
20
;
//局部内部类访问局部变量必须用final修饰
class
inner {
public
void
show() {
system.out.println(num);
//从内部类中访问本地变量num2; 需要被声明为最终类型
system.out.println(num2);
//20
}
}
//system.out.println(num2);
inner i =
new
inner();
i.show();
}
}
class
innerclassdemo5 {
public
static
void
main(string[] args) {
outer o =
new
outer();
o.method();
}
}
|
匿名内部类格式,方法调用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
匿名内部类
就是内部类的简化写法。
前提:存在一个类或者接口
这里的类可以是具体类也可以是抽象类。
格式:
new 类名或者接口名(){
重写方法;
}
本质是什么呢?
是一个继承了该类或者实现了该接口的子类的匿名对象。
*/
interface
inter {
public
abstract
void
show();
public
abstract
void
show2();
}
class
outer {
public
void
method() {
inter i =
new
inter() {
//多态
public
void
show() {
system.out.println(
"show"
);
}
public
void
show2() {
system.out.println(
"show2"
);
}
};
i.show();
//是一个继承了该类或者实现了该接口的子类的匿名对象。所以可以调用方法
i.show2();
}
}
class
innerclassdemo6 {
public
static
void
main(string[] args) {
outer o =
new
outer();
o.method();
}
}
|
匿名内部类在开发中的使用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/*
匿名内部类在开发中的使用
*/
interface
person {
public
abstract
void
study();
}
class
persondemo {
//接口名作为形式参数
//其实这里需要的不是接口,而是该接口的实现类的对象
public
void
method(person p) {
p.study();
}
}
//实现类
class
student
implements
person {
public
void
study() {
system.out.println(
"好好学习,天天向上"
);
}
}
class
innerclasstest2 {
public
static
void
main(string[] args) {
//测试
persondemo pd =
new
persondemo();
person p =
new
student();
pd.method(p);
system.out.println(
"--------------------"
);
//匿名内部类在开发中的使用
//匿名内部类的本质是继承类或者实现了接口的子类匿名对象
//用完一次就消失
person ss =
new
person(){
public
void
study() {
system.out.println(
"好好学习,天天向上"
);
}
};
pd.method(ss);
// pd.method(new person(){
// public void study() {
// system.out.println("好好学习,天天向上");
// }
// });
}
}
|
案例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/*
案例:
按照要求,补齐代码
interface inter { void show(); }
class outer { //补齐代码 }
class outerdemo {
public static void main(string[] args) {
outer.method().show();
}
}
要求在控制台输出”helloworld”
*/
interface inter {
void show();
//记得默认有 public abstract
}
class outer {
//补齐代码
public static inter method() {
//子类对象 -- 子类匿名对象
return new inter() {
public void show() {
system.out.println("helloworld");
}
};
}
}
class outerdemo {
public static void main(string[] args) {
outer.method().show();
/*
1:outer.method()可以看出method()应该是outer中的一个静态方法。
2:outer.method().show()可以看出method()方法的返回值是一个对象。
又由于接口inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
*/
}
}
|
希望本文所述对大家java程序设计有所帮助.
原文链接:https://www.cnblogs.com/baiyangyuanzi/p/6831624.html 。
最后此篇关于Java内部类原理、概述与用法实例详解的文章就讲到这里了,如果你想了解更多关于Java内部类原理、概述与用法实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
本文全面深入地探讨了Docker容器通信技术,从基础概念、网络模型、核心组件到实战应用。详细介绍了不同网络模式及其实现,提供了容器通信的技术细节和实用案例,旨在为专业从业者提供深入的技术洞见和实
📒博客首页:崇尚学技术的科班人 🍣今天给大家带来的文章是《Dubbo快速上手 -- 带你了解Dubbo使用、原理》🍣 🍣希望各位小伙伴们能够耐心的读完这篇文章🍣 🙏博主也在学习阶段,如若发
一、写在前面 我们经常使用npm install ,但是你是否思考过它内部的原理是什么? 1、执行npm install 它背后帮助我们完成了什么操作? 2、我们会发现还有一个成为package-lo
Base64 Base64 是什么?是将字节流转换成可打印字符、将可打印字符转换为字节流的一种算法。Base64 使用 64 个可打印字符来表示转换后的数据。 准确的来说,Base64 不算
目录 协程定义 生成器和yield语义 Future类 IOLoop类 coroutine函数装饰器 总结 tornado中的
切片,这是一个在go语言中引入的新的理念。它有一些特征如下: 对数组抽象 数组长度不固定 可追加元素 切片容量可增大 容量大小成片增加 我们先把上面的理念整理在这
文章来源:https://sourl.cn/HpZHvy 引 言 本文主要论述的是“RPC 实现原理”,那么首先明确一个问题什么是 RPC 呢?RPC 是 Remote Procedure Call
源码地址(包含所有与springmvc相关的,静态文件路径设置,request请求入参接受,返回值处理converter设置等等): spring-framework/WebMvcConfigurat
请通过简单的java类向我展示一个依赖注入(inject)原理的小例子虽然我已经了解了spring,但是如果我需要用简单的java类术语来解释它,那么你能通过一个简单的例子向我展示一下吗?提前致谢。
1、背景 我们平常使用手机和电脑上网,需要访问公网上的网络资源,如逛淘宝和刷视频,那么手机和电脑是怎么知道去哪里去拿到这个网络资源来下载到本地的呢? 就比如我去食堂拿吃的,我需要
大家好,我是飞哥! 现在 iptables 这个工具的应用似乎是越来越广了。不仅仅是在传统的防火墙、NAT 等功能出现,在今天流行的的 Docker、Kubernets、Istio 项目中也经
本篇涉及到的所有接口在公开文档中均无,需要下载 GitHub 上的源码,自己创建私有类的文档。 npm run generateDocumentation -- --private yarn gene
我最近在很多代码中注意到人们将硬编码的配置(如端口号等)值放在类/方法的深处,使其难以找到,也无法配置。 这是否违反了 SOLID 原则?如果不是,我是否可以向我的团队成员引用另一个“原则”来说明为什
我是 C#、WPF 和 MVVM 模式的新手。很抱歉这篇很长的帖子,我试图设定我所有的理解点(或不理解点)。 在研究了很多关于 WPF 提供的命令机制和 MVVM 模式的文本之后,我在弄清楚如何使用这
可比较的 jQuery 函数 $.post("/example/handler", {foo: 1, bar: 2}); 将创建一个带有 post 参数 foo=1&bar=2 的请求。鉴于 $htt
如果Django不使用“延迟查询执行”原则,主要问题是什么? q = Entry.objects.filter(headline__startswith="What") q = q.filter(
我今天发现.NET框架在做计算时遵循BODMAS操作顺序。即计算按以下顺序进行: 括号 订单 部门 乘法 添加 减法 但是我四处搜索并找不到任何文档确认 .NET 绝对 遵循此原则,是否有此类文档?如
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
API 回顾 在创建 Viewer 时可以直接指定 影像供给器(ImageryProvider),官方提供了一个非常简单的例子,即离屏例子(搜 offline): new Cesium.Viewer(
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我是一名优秀的程序员,十分优秀!