java内部类简单用法

package innerClass;
/**
 * 特点
 * 1:增强封装性,通过把内部类隐藏在外部类的里面,使得其他类不能访问外部类。
 * 2:增强可维护性。
 * 3:内部类可以访问外部的成员。
 * @author Administrator
 *
 */
class InnerClassDemo {
    String str="Out";
    static  String str1="static";
    public static void outstaticStr() {
        System.out.println();
    }
    public void outStr() {
        StaticInner staticInner=new StaticInner();
        staticInner.staticStr();
        String c= StaticInner.strInnerSt;
        String InnerC=Inner.InnerStaticelements;
        System.out.println(str);
        Inner inner =new Inner();
        System.out.println(inner.str);

        inner.innerStr();
    }
    /**
     * 实例内部类
     * @author Administrator
     *1:实例内部类是对象的内部类,把它当成对象看待。不能用static修饰
     *2:实例内部类存在一个外部类的引用
     *3: 实例内部类可以直接访问外部类的成员 用外部类.this的引用访问外部类 ,内部类静态成员直接用外部类.成员访问。
     *4;外部类要创建一个内部类的对象,然后再访问内部类的成员。静态成员直接用内部类.成员。
     *5:实例内部类的静态成员必须是fianl
     */
    public class Inner{
        String str="inner";
        static final String InnerStaticelements="staticInner";

        public  void innerStr()    {
            InnerClassDemo.outstaticStr();
            System.out.println(this.str);
            System.out.println(InnerClassDemo.this.str);

        }
    }
    /**
     *
     * @author Administrator
     * 内部类加上static就是静态内部类
     * 静态内部类没有在堆开辟一个空间存放执行外部类的引用。
     * 静态内部类可以直接访问外部类的静态成员(不需要外部类.外部类成员),通过new 外部类访问外部类的非静态类成员。
     * 静态内部类可以创建非静态的成员。
     *外部类可以通过new 静态内部类的对象访问内部类的非静态成员,通过静态内部类.成员的方式访问内部类静态成员
     */
     static class StaticInner{
        static String strInnerSt="rewre";
        String srt="staticInner";
        public void staticStr() {
            System.out.println(new InnerClassDemo().str);
            System.out.println(str1);
        }
    }
     /**
      * 局部内部类不能设置访问权限private public 等等
      * 局部内部类定义在方法,使用也在方法中
      * 局部内部类不能包含静态变量
      * 通过访问外部的成员,静态的用外部.成员的方式,普通的就是用new 外部内的方式。
      * 外部类不能访问内部类成员
      */
     public  void showLocalInner() {
          class  LocalInner{
             String  local="localInner";
              public  void localMethods(){
                 System.out.println(str);
             }

         }
          System.out.println(new LocalInner().local);
          localMethods();
     }
     /**
      * 匿名类 一般使用在事件开发中,安卓,GUI开发中,只使用一次,。
      * 可以非静态成员通过new的外部类的方式访问外部类的成员,静态成员则通过外部类.的方式访问外部类静态成员
      *
      */
     Runnable run =new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(str);

        }
    };

}
package innerClass;

import innerClass.InnerClassDemo.Inner;

public class TestInnerClass {
    public static void main(String[] args) {
         InnerClassDemo.Inner inner=new InnerClassDemo().new Inner();//其他类访问实例内部类的方式
         inner.innerStr();

         System.out.println(InnerClassDemo.StaticInner.strInnerSt);//在外部可以通过 外部类.内部类.内部类成员访问内部类的静态成员

    }
}

原文地址:https://www.cnblogs.com/shareAndStudy/p/12586861.html

时间: 2024-10-28 11:23:22

java内部类简单用法的相关文章

Java数组简单用法

数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数组的n-1维数组.下面以一维数组为例说明Java数组的用法. 1.数组声明 数组声明有如下两种形式(方括号的位置不同): int arr[]; int[] arr2; 2.数组初始化 数组初始化也有两种形式,如下(使用new或不使用new): int arr[] = new int[]{1, 3,

[Java] 内部类的用法

package test.file; import java.io.File; import java.io.FilenameFilter; /** * 内部类的使用 * @author Frost.Yen * @E-mail [email protected] * @date 2016年4月13日 */ public class TestFile03 { public static void main(String[] args) { new TestFile03().run(); } pri

【Java内部类】用法总结

前言 内部类在学习基础Java知识的时候大部分人都了解过,但也是大部分人都只是了解而已,在长年累月的开发中你才会发现内部类的真正好处 定义 可以将一个类定义在另一个类的内部,这就是内部类.内部类是一种非常有用的的特征,因为它允许你把一些逻辑相关的数据组织在一起,并控制内部类的可视性. 静态内部类:静态内部类除了访问权限修饰符比外围类多以外, 和外围类没有区别, 只是代码上将静态内部类组织在了外部类里面 非静态内部类:创建该类的前提是外部类实例已经被创建好了,而内部类可以访问外部类的实例变量,也就

简单谈一谈Java内部类的使用原因

使用内部类的原因 学习总得知其所以然,前面的一篇文章中我有提到过关于java内部类的几种用法以及一些示例,但是不明白内部类具体可以做什么,显然学习起来很渺茫,今天的文章简单说一说使用内部类的几个原因,为了可读性更好,示例都极大的简化了,希望能给初学者一些帮助 (一) 封装性 作为一个类的编写者,我们很显然需要对这个类的使用访问者的访问权限做出一定的限制,我们需要将一些我们不愿意让别人看到的操作隐藏起来, 如果我们的内部类不想轻易被任何人访问,可以选择使用private修饰内部类,这样我们就无法通

java中Object.equals()简单用法

/* equals()方法默认的比较两个对象的引用! */ class Child { int num; public Child(int x){ num = x; } //人文的抛出运行时异常的好处是:可以自定义错误信息! /*public boolean equals(Object o) throws ClassCastException{ if(!(o instanceof Child)) throw new ClassCastException("中文提示:类型错误"); Ch

Java Calendar类简单用法

我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832307.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. 初始化 Calendar calendar = new GregorianCalendar(); set方法 calendar.set(Calendar.YEAR, year); get方法 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

JAVA使用Logback发送日志到控制台、文件、ELK的最简单用法

一.简述 本文讲JAVA使用Logback发送日志到控制台.文件.ELK的最简单用法. 二.教程 1.新建pom.xml项目引入下列依赖: <dependencies> <!--Begin LogBack Log--> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback<

Java内部类

本文是<Java核心技术 卷1>中第六章接口与内部类中关于内部类的阅读总结. Java中的内部类(inner class)是定义在另一个类内部的类.那么内部类有什么用呢?这里主要由三个内部类存在的原因: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据.即,如果类A中定义了类B,那么类B可以访问类A中的数据,甚至是私有数据,但类A不能访问类B中的私有数据: 内部类可以对同一个包中的其他类隐藏起来.在一个包中,定义一个类时,即使不加上访问权限关键词,这个类也是包内其他类可访问的,不

JAVA的continue用法

JAVA的continue用法: public class test{ public static void main(String [] args){  for(int i=0;i<=10;i++){   if(i%2!=0){    continue;      }   System.out.println(i);    } }} 其实很简单,continue就是中断本次循环开始下一次. 结合这段代码就是.当i是奇数时,不打印,直接结束循环,开始下一次. 还一个例子: //测试continu