一、内部类的分类:

(1)静态内部类(2)成员内部类(3)局部内部类(4)匿名内部类

二、静态内部类

1.静态内部类可以等同的看做是静态变量

内部类的重要作用:可以访问外部类中的私有数据

2.静态内部类可以直接访问外部类的静态变量,静态方法,无法直接访问成员变量和成员方法。

package com.bjpowernode.java_learning;

​

public class D58_1_OuterClass {

  //静态变量

  static String s1 = "A";

  //成员变量

  private String s2 = "B";

  //静态方法

  private static void m1() {

    System.out.println("static m1 method execute");

  }

  //成员方法

  private void m2() {

    System.out.println("m2 method execute");

  }

  //静态内部类

  //可以访问控制权限的修饰符修饰

  //public,protected.private.缺省

  static class InnerClass58{

    //静态方法

    public static void m3() {

      m1();

      System.out.println(s1);

//      m2();     

//      System.out.println(s2);

    }

    //成员方法

    public void m4() {

    }

  }

  public static void main(String[] args) {

    //执行m3

    D58_1_OuterClass.InnerClass58.m3();

    //执行m4

    InnerClass58 inner = new InnerClass58();

    inner.m4();

  }

}

二、成员内部类

1.成员内部类可以等同的看醉哦成员变量

2.成员内部类中不允许存在静态变量、静态方法、只能有成员变量和成员方法​。

3.成员内部类可以有外部类的成员变量、成员方法、静态变量和静态方法。

4.​注意点:​内部类对象的创建方式:

需要先创建一个外部类的对象,然后利用外部类的对象再来创建内部类的对象​,例如:


    D58_2_MemberInnerClass d1 = new D58_2_MemberInnerClass();

    InnerClass58_1 i1 = d1.new InnerClass58_1();//外部类对象加点的方式进行创建

i1.m4();

举一个完整的例子:

package com.bjpowernode.java_learning;

​

public class D58_2_MemberInnerClass {

  //静态变量

  static String s1 = "A";

  //成员变量

  private String s2 = "B";

  //静态方法

  private static void m1() {

    System.out.println("static m1 method execute");

  }

  //成员方法

  private void m2() {

    System.out.println("m2 method execute");

  }

  //成员内部类

  //可以访问控制权限的修饰符修饰

  //public,protected.private.缺省

  class InnerClass58_1{

    //静态方法编译错误,不能使用这个方法

//    public static void m3() {

//      m1();

//      System.out.println(s1);

//     

//      m2();     

//      System.out.println(s2);

//     

//    }

    //成员方法

    public void m4() {

      m1();

      System.out.println(s1);

      m2();     

      System.out.println(s2);

    }

  }

  public static void main(String[] args) {

    D58_2_MemberInnerClass d1 = new D58_2_MemberInnerClass();

    InnerClass58_1 i1 = d1.new InnerClass58_1();

    i1.m4();

  }

}

三、源码:

D58_1_OuterClass.java

D58_2_MemberInnerClass.java

地址:

https://github.com/ruigege66/Java/blob/master/D58_1_OuterClass.java

https://github.com/ruigege66/Java/blob/master/D58_2_MemberInnerClass.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载58-静态内部类、成员内部类详解的更多相关文章

  1. Java连载39-构造方法详解

    ​一. 1.多行注释:CTRL + shift + / 2.当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器. public class D39 ...

  2. “全栈2019”Java第七十一章:外部类访问静态内部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  4. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  5. (转)Java并发包基石-AQS详解

    背景:之前在研究多线程的时候,模模糊糊知道AQS这个东西,但是对于其内部是如何实现,以及具体应用不是很理解,还自认为多线程已经学习的很到位了,贻笑大方. Java并发包基石-AQS详解Java并发包( ...

  6. java的PrintStream(打印输出流)详解(java_io)

    java的PrintStream(打印输出流)详解(java_io) 本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再 ...

  7. Java开发利器Myeclipse全面详解

    Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...

  8. Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  9. [译]Java Thread join示例与详解

    Java Thread join示例与详解 Java Thread join方法用来暂停当前线程直到join操作上的线程结束.java中有三个重载的join方法: public final void ...

  10. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

随机推荐

  1. 【Cute-Webpack】Webpack4 入门手册(共 18 章)

    介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...

  2. 【CSS】318- CSS实现宽高等比自适应容器

    点击上方"前端自习课"关注,学习起来~ 在最近开发移动端页面,遇到这么一个情况:当页面宽度 100% 时,高度为宽度一半,并随手机宽度变化依然是一半. 于是我们就需要实现一个宽度自 ...

  3. JS基础-变量类型和类型转换

    JS 变量类型 JS中有 6 种原始值,分别是: boolean number string undefined symbol null 引用类型: 对象 数组 函数 JS中使用typeof能得到哪些 ...

  4. 《Java基础知识》Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  5. 两个变量值交换的方法总结(js,python)

    方法一: 临时变量法 <script> var num1 = 10; var num2 = 20; var temp;//定义临时变量 temp = num1; num1 = num2; ...

  6. UWP 利用Windows.UI.Composition实现简单的放大🔍效果

    看一下效果先 我这里实现了鼠标进入和退出的效果,当然也可以添加其他的事件,比如获得焦点和失去焦点的. 先随便写一个xaml布局,一个Grid,里面一张图片. <Grid x:Name=" ...

  7. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...

  8. Cobbler 2.x安装与配置

    软件环境 Centos7.3 Cobbler 2.8.1 1.下载.编译和安装 创建自动安装脚本cobbler-install.sh #!/bin/bash # File Name: /data/sr ...

  9. AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding androidx.databinding.DataBinderMapper.getDataBinder(androidx.databinding.DataBindingComponent, android.view.View, int)"

    混淆导致的数据绑定库错误 问题摘要 AbstractMethodError: abstract method "androidx.databinding.ViewDataBinding an ...

  10. webpack生成的css文件background-image url图片无法加载

    之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...