public class InnerClass {

    class Content {
private int i; public int getVlaue() {
return i;
} } class Description { private String lable; Description(String lab) {
this.lable = lab; } public String readLable() {
return lable;
}
} public Content getContentInstance() { return new Content();
} public Description getDescriptionIntance(String lable) { return new Description(lable);
} public void ship(String lable) { Content content = getContentInstance(); Description description = getDescriptionIntance(lable); System.out.println(description.readLable()); System.out.println(description.readLable()); } /**
* 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
* 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
* JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
* @param args
*/
public static void main(String[] args) { InnerClass parcle2 = new InnerClass(); InnerClass.Content c = parcle2.new Content();
System.out.println(c.getVlaue());
// parcle2.ship("hi");
// InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx InnerClass.Description d = parcle2.new Description("hello");
System.out.println(d.readLable());
// InnerClass.Description d = parcle2.getDescriptionIntance("hello");
} }

使用.this,.new

.this  表达的是在内部类对象域内  通过外部类.this 指向了一个在内部类指向外围类对象引用的关系。只有这样可以访问外围类对象的属性与方法

.new表达的是与.this方向相反  当在外围类作用域上 想创建内部类对象  之前通用的做法是 在外围类创建一个指向内部类的引用来创建内部类,但有一种更加快捷的方式

直接外围类.new  就可以表达一个外围类对象引用 。这里必须强调一点  在拥有外部类对象之前是不可能创建外围类对象的,因为内部类对象会暗暗的连接到创建他的外围类对象上

改变一下上面的内部类例子

public class InnerClass {

    class Content {
private int i; public int getVlaue() {
return i;
} } class Description { private String lable; Description(String lab) {
this.lable = lab; } public String readLable() {
return lable;
}
} public Content getContentInstance() { return new Content();
} public Description getDescriptionIntance(String lable) { return new Description(lable);
} public void ship(String lable) { Content content = getContentInstance(); Description description = getDescriptionIntance(lable); System.out.println(description.readLable()); System.out.println(description.readLable()); } /**
* 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
* 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
* JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
* @param args
*/
public static void main(String[] args) { InnerClass parcle2 = new InnerClass(); InnerClass.Content c = parcle2.new Content();
System.out.println(c.getVlaue());
// parcle2.ship("hi");
// InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx InnerClass.Description d = parcle2.new Description("hello");
System.out.println(d.readLable());
// InnerClass.Description d = parcle2.getDescriptionIntance("hello");
} }

java内部类对象使用.this,.new的更多相关文章

  1. 【Java】对象、类(抽象类与内部类)、接口

    博文内容概况 对象和类 抽象类 接口 内部类 对象和类 对象是对客观事物的抽象,类是对对象的抽象.类是一种数据类型,其外观和行为由用户定义.类中可以设置两种类型的元素:字段(有时被称为数据成员)和方法 ...

  2. 给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException

    前言 1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误: Exception in thread "main" java.lang.NullPointer ...

  3. java 匿名对象,内部类,修饰符,代码块

    匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创 ...

  4. java面对对象(六)--内部类、匿名内部类

    内部类 可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如: class Outer{ … class Inner{ …. } } class Outer1{} // 这个Inner1不是O ...

  5. Java如何创建内部类对象

    public static void main(String[] args) { Person p = new Test().new Person(); } class Person { String ...

  6. 140、Java内部类之实例化内部类对象

    01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; class ...

  7. Java 匿名对象、内部类

    一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...

  8. Java—匿名对象/内部类/访问修饰符/代码块

    匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...

  9. java 匿名对象与内部类

    一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...

随机推荐

  1. java简单的实现搜索框的下拉显示相关搜索功能

    最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索 先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来 ...

  2. MySQL——事务ACID&隔离级别

    数据库事务ACID&隔离级别 什么是事务 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一 ...

  3. 第11.2节 Python 正则表达式支持函数概览

    为了大家熟悉re模块匹配文本的处理,本节将概要介绍与此处理有关的几个主要函数,提供了如下主要函数: 以上函数中的部分的三个重要参数说明如下: pattern都是代表匹配规则的模式字符串,string代 ...

  4. PyQt(Python+Qt)学习随笔:QTableView的gridStyle属性

    老猿Python博文目录 老猿Python博客地址 概述 gridStyle属性用于控制视图数据网格的样式,此属性只有在showGrid属性为True时才有作用. gridStyle属性取值含义 gr ...

  5. git 常用命令 command 1.0(本地 local repository 对远程仓库 remote repository 的操作)

     输入 q 退出 日志界面

  6. Java对象操作工具

    对象复制(反射法) public static void copyProp(Object from, Object to, String... filterProp) { HashSet<Str ...

  7. 如何实现 token 加密(来自github每日一题)

    需要一个secret(随机数) 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端 前端每次request在header中 ...

  8. js 导出div 中的类容为 word 文件

    //引入包 <script src="/FileSaver.js"></script>  <script src="/jquery.word ...

  9. 题解-CF1418G Three Occurrences

    题面 CF1418G Three Occurrences 给一个 \(n\) 个数的序列 \(a_i\),求每个出现过的数出现次数为 \(3\) 的子序列个数. 数据范围:\(1\le n\le 5\ ...

  10. 精尽Spring MVC源码分析 - 一个请求的旅行过程

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...