普通/实例成员内部类

==================================================

1、成员内部类中不能定义静态变量

2、可以访问外部类的所有成员

public class Outer{

private static int i = 1;

private int j=10;

public static void outer_f1(){

//do more something

}

public void out_f2(){

//do more something

}

//成员内部类

class Inner{

int j=100;//内部类中外部类的相同名字的实例变量可以共存

void inner_f1(){

System.out.println(i); //访问外部类中与内部类不同名的实例变量直接用"变量名"

System.out.println(Outer.this.j);//访问外部类中与内部类同名的实例变量用"外部类名.this.变量名"

System.out.println(j); //在内部类中直接用变量名访问内部类自己的变量

System.out.println(this.j);//在内部类中也可以用"this.变量名"来访问内部类自己的变量

outer_f1();

outer_f2();

}

}

//外部类的非静态方法访问成员内部类

public void outer_f3(){

Inner inner = new Inner();

inner.inner_f1();

}

//外部类的静态方法访问成员内部类

public static void outer_f4(){

//step1 建立外部类对象

Outer out = new Outer();

//step2 根据外部类对象建立内部类对象(必须先有外部类的对象才能生成内部类的对象,因为内部类需要访问外部类中的成员变量,成员变量必须实例化才有意义)

Inner inner=out.new Inner();

//step3 访问内部类的方法

inner.inner_f1();

}

public static void main(String[] args){

outer_f4();

}

}

静态内部类----定义在类中,任何方法外,用static定义

=================================================================================

1、静态内部类中可以定义静态或者非静态的成员

2、静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)

public class Outer {

private static int i = 1;

private int j = 10;

public static void outer_f1(){

}

public void outer_f2(){

}

// 静态内部类中可以定义静态或者非静态的成员

static class Inner{

static int inner_i = 100;

int inner_j = 200;

static void inner_f1(){

System.out.println("Outer.i"+i);//静态内部类只能访问外部类的静态成员

outer_f1();

}

void inner_f2(){

}

}

public void outer_f3(){

// 外部类访问内部类的静态成员:内部类.静态成员

System.out.println(Inner.inner_i);

Inner.inner_f1();

// 外部类访问内部类的非静态成员:实例化内部类即可

Inner inner = new Inner();

inner.inner_f2();

}

public static void main(String[] args) {

new Outer().outer_f3();

}

}

3、静态内部类可以用public,protected修饰

4、生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别,静态内部类的对象可以直接生成

而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类,所以静态内部类不可用private来进行定义。

局部内部类----在方法中定义的内部类,与局部变量类似

===========================================================================

1、局部内部类中不能定义静态变量

2、当访问外部类的局部变量(即方法内的变量)时,被访问的局部变量必须是final类型的

public class Outer {

private int s = 100;

private int out_i = 1;

public void f(final int k){

final int s = 200;

int i = 1;

final int j = 10;

class Inner{

int s = 300;

Inner(int k){

inner_f(k);

}

int inner_i = 100;

void inner_f(int k){

System.out.println(out_i); //访问外部类中的与内部类不同名的实例变量用"变量名"

System.out.println(Outer.this.s);//访问外部类中与内部类同名的实例变量用"外部类名.this.变量名"

System.out.println(s); //在内部类中直接用变量名访问内部类自己的变量

System.out.println(this.s);//在内部类中也可以用"this.变量名"来访问内部类自己的变量

System.out.println(k); //访问外部类的局部变量(即方法内的变量),被访问的变量必须是final类型

}

new Inner(k);

}

public static void main(String[] args) {

//访问局部内部类必须先有外部类对象

Outer out = new Outer();

out.f(3);

}

}

3、局部内部类前不能用修饰符public,protected,private修饰,因为其作用范围就在定义它的代码块里

匿名内部类(一种特殊的局部内部类)

======================================================================

1、如同匿名数组一样,当你只需要创建一个类的对象而且用不上它的名字时可以使用java的匿名内部类

2、匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建

它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。

扩:记忆内部类可以记忆变量一样的

类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;

而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同;

综上,所以先有类变量再有成员变量;

所以抛开可见性/访问权限(public,protected,default和private),静态成员(类,方法)只能访问静态成员(类,方法,变量),实例成员(类,方法)即可以访问静态成员又可以访问其他实例成员

java 变量 类之间调用_java内部类与其他类变量之间的调用方式相关推荐

  1. java point类求两点间距离_JAVA 根据经纬度获取两点之间的距离(转载)

    原文https://blog.csdn.net/jk940438163/article/details/83147557 思路: 1. 地球本身是个不规则的球体,这里将其看着一个规制球体 2. 半径取 ...

  2. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  3. java建立类的思想_JAVA类和对象创建

    面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...

  4. java对类对象初始化_Java类和对象初始化

    Java类和对象初始化Tag内容描述: 1.解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起 北京高伟达西南分软 Java EE 软件工程师 三年 Java EE 项目经验 行业方向 ...

  5. java实体类命名规范_java实现周易起名-java实体类起名规范

    Java中类的命名规范? java命名规范? Camel-Case(Camel-Case)是编写计算机程序时的一组命名规则(惯例). 程序员能够更轻松地与同行交流自己的代码,因此最好采用具有更好可读性 ...

  6. java 常规类的可见性_Java 12常规可用性

    java 常规类的可见性 马克·雷因霍尔德(Mark Reinhold) 今天宣布 ," Java 12的参考实现JDK 12现在已全面上市." Reinhold在该公告中指出,& ...

  7. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  8. java电脑类的接口_java 一个类实现两个接口的案例

    直接用英文逗号分隔就可以了,比如:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 inerface IHello { String sayHello ...

  9. java日历类add方法_Java日历computeTime()方法及示例

    java日历类add方法 日历类computeTime()方法 (Calendar Class computeTime() method) computeTime() method is availa ...

  10. java日历类add方法_Java日历computeFields()方法及示例

    java日历类add方法 日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is ...

最新文章

  1. openstack的网络、子网、端口的关系
  2. JZOJ__Day 4:【普及模拟】游戏
  3. 这100道Python面试题,你会几道?
  4. 实现织梦dedecms百度主动推送(实时)网页抓取
  5. FMStocks7 , 不错的一个.NET 示例程序
  6. ioca0中断 pic单片机_关于PIC单片机的模块和功能总结
  7. 云服务器虚拟主机区别,云服务器和虚拟主机的区别
  8. 数据结构之散列表实现
  9. QTP自动化测试进阶
  10. 40. MySQL的权限与安全
  11. 基础篇——树莓派通用引脚定义
  12. 一款支持vue3 的颜色选择器
  13. matlab c盘空间,手动清理C盘空间
  14. Python 裁剪九宫格图片 —— 筑梦之路
  15. 三菱系统刀库乱刀处理_数控加工中心刀库乱刀原因以及处理方法
  16. Windows服务器时间不断修改(时间不同步已解决)
  17. 中国公司在2011年世界500强最新排名
  18. 如何用计算机处理图片,修改图片用什么软件 小白必看的图片处理技巧_电脑故障...
  19. 【电源专题】SMPS电源的EMI来源和测量方法
  20. 医疗时鲜资讯:第二十三届中国国际医用仪器设备展览会暨技术交流会 有感

热门文章

  1. java二级 计算复杂利息_java 计算存款利息
  2. oracle中lang的作用,【Oracle】详解Oracle中NLS_LANG变量的使用
  3. 逻辑代数01律的理解_第十课:四个基本子空间——MIT线性代数课程学习笔记
  4. python数据保存为excel_Python读excel生成数据存入txt文件
  5. 阿里巴巴Java开发文档2020版学习-日期时间
  6. docker启动mysql容器报错driver failed programming external connectivity on endpoint mysq
  7. python图形编程环境环境_Python开发环境Wing IDE matplotlib 2D绘图库代码调试技巧小结...
  8. python 中不属于数据挖掘分析模块的是()_大工19秋《数据挖掘》在线作业3(参考答案)...
  9. 解压rar_【RAR安卓】RAR解压v5.91.build93去广告版,解压多种压缩包 与WinRAR完美兼容!...
  10. gin上传文件服务器,gin-上传文件