李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
使用.this与.new
Leefs
2019-11-01 PM
1291℃
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
标签云
MyBatis
Hive
Golang基础
机器学习
Spark Core
散列
Spring
Git
Flink
锁
字符串
BurpSuite
Spark RDD
Azkaban
稀疏数组
Java
Jquery
Zookeeper
国产数据库改造
NIO
MyBatisX
SpringCloudAlibaba
算法
JavaWEB项目搭建
Flume
Java阻塞队列
Docker
Map
容器深入研究
DataWarehouse
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞