- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!