李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
使用.this与.new
Leefs
2019-11-01 PM
1768℃
0条
# 使用.this与.new ### 前言 本篇因为《Java编程思想》讲述的比较详细,同时在前面的篇章中也进行了详细的概述,小编就偷懒一回,将原文还原给大家。 ### 一、原文概述 如果你需要生成对外部类对象的引用,**可以使用外部类的名字后面紧跟原点和this**。这样产生的引用自动地具有正确的类型,这一点在编译期就被知晓并接受检查,因此没有任何运行时开销。下面展示了如何使用.this : > 代码 ```java public class DotThis { void f() { System.out.println("DotThis.f()"); } public class Inner{ public DotThis outer(){ return DotThis.this; } } public Inner inner(){return new Inner();} public static void main(String[] args) { DotThis dotThis = new DotThis(); DotThis.Inner inner = dotThis.inner(); inner.outer().f(); } } ``` > 运行结果 ```java DotThis.f() ``` > 代码分析 + 1.Inner内部类. + 2.outer()内部类的方法,同时返回值`DotThis.this`中调用外部类DotThis. + 3.inner()外部类DotThis中的方法,返回值中创建一个Inner()对象。 不得不说,这段代码设计的挺巧妙的,建议大家可以试着走一下执行流程。 有时你可能想要告知某些其他对象,去创建其某个内部类的对象。要实现此目的,你必须在new表达式中提供对其他外部类对象的引用,这是需要使用.new语法,就像如下代码: ```java public class DotNew { public class Inner{} public static void main(String[] args) { DotNew dn = new DotNew(); DotNew.Inner dni = dn.new Inner(); } } ``` 要想直接创建内部类的对象,你不能按照你想像的方式,去引用外部类的名字`DotNew`,而是必须使用外部类的对象来创建内部类对象,就像在上面的程序中所看到的那样,这也解决了内部类名字作用域的问题,因此不必声明`dn.new.DotNew.Inner()`. **在拥有外部类对象之前是不可能创建内部类对象的。这是因为内部类对象会暗暗地连接到创建它的外部类对象上。但是,如果你创建的是嵌套类(静态的内部类),那么它就不需要对外部类对象的引用。** > 代码示例 ```java public class Parce13 { class Contents{ private int i = 11; public int value(){ return i; } } class Destination{ private String label; Destination(String whereTo){ label = whereTo; } String readLabel(){ return label; } } public static void main(String[] args) { Parce13 parce13 = new Parce13(); Parce13.Contents c = parce13.new Contents(); Parce13.Destination d = parce13.new Destination("Tasmania"); } } ```
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/120.html
上一篇
链接到外部类
下一篇
访问权限控制简介
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Java编程思想
pytorch
LeetCode刷题
ajax
Beego
Flume
二叉树
ClickHouse
查找
前端
Docker
SpringCloud
数据结构
Spark
Sentinel
Linux
Java阻塞队列
MyBatis
Quartz
容器深入研究
排序
Jquery
Golang
并发编程
Azkaban
随笔
JavaSE
MySQL
Redis
JVM
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭