zoukankan      html  css  js  c++  java
  • 【09-04】java内部类学习笔记

    java中的内部类

    1. 静态内部类
    2. 成员内部类
    3. 方法内部类
    4. 匿名内部类

    1.静态内部类

        class Outer {
        
        	private static String outer = "outer";
        
        	/**
        	 * 静态内部类只能访问外部类的静态成员
        	 */
        	public static class StaticInner {
        		public void show() {
        			System.out.println(outer);
        		}
        	}
        
        	public void test() {
        		StaticInner si = new StaticInner();
        		si.show();
        	}
        }
        
        class Other {
        
        	public static void main(String[] args) {
        		/**
        		 * 静态public内部类的创建对象的方式
        		 */
        		Outer.StaticInner si = new Outer.StaticInner();
        		si.show();
        	}
        }
    

    jdk中LinkedList使用了Nodo内部类表示存储的节点信息。

    2.成员内部类

        class Outer {
        	private static String outerStatic = "outer";
        	private int outerNum = 666;
        
        	/**
        	 * 成员内部类可以访问外部类的所有成员
        	 */
        	public class Inner {
        		/**
        		 * 成员内部类中不可以定义静态变量和方法,只能定义常量。这样的原因可能是直接在外部类中其实就可以定义这些静态属性
        		 */
        		private static final int innerNum = 233333;
        
        		public void show() {
        			System.out.println(outerStatic);
        			System.out.println(outerNum);
        			System.out.println(innerNum);
        			/**
        			 * 同名时调用的当前类的test方法
        			 */
        			test();
        			/**
        			 * 访问外部类的方法
        			 */
        			Outer.this.test();
        		}
        
        		public void test() {
        			System.out.println("inner test method");
        		}
        	}
        
        	public void test() {
        		// Inner inner = new Inner();
        		// inner.show();
        		System.out.println("outer test method");
        	}
        }
        
        class Other {
        
        	public static void main(String[] args) {
        		/**
        		 * 成员内部类的创建对象的方式
        		 */
        		Outer outer = new Outer();
        		Outer.Inner inner = outer.new Inner();
        		inner.show();
        	}
        }
    

    jdk中LinkedList中的listIterator和descendingIterator接口通过成员内部类的方式进行了实现

    3.方法内部类

        class Outer {
            private int a = 100;
            
            public void test(final int param){
            	/**
            	 * 访问方法局部成员,该成员需为final
            	 */
                final String str = "hello";
                class Inner {
                    public void innerMethod(){
                        System.out.println("outer a " +a);
                        System.out.println("param " +param);
                        System.out.println("local var " +str);
                    }
                }
                Inner inner = new Inner();
                inner.innerMethod();
            }
        }
    

    4.匿名内部类

        class AnonymousClass {
        	public static void main(String[] args) {
        		List<Person> list = new ArrayList<Person>();
        		Collections.sort(list, new Comparator<Person>() {
        
        			@Override
        			public int compare(Person o1, Person o2) {
        				return o1.getName().compareTo(o2.getName());
        			}
        
        		});
        	}
        
        	class Person {
        
        		private String name;
        
        		public Person(String name) {
        			this.name = name;
        		}
        
        		public String getName() {
        			return this.name;
        		}
        	}
        }
    

    参考资料

  • 相关阅读:
    监控里的主码流和子码流是什么意思
    监控硬盘容量计算
    一个能让你了解所有函数调用顺序的Android库
    电工选线
    oracle linux dtrace
    list all of the Oracle 12c hidden undocumented parameters
    Oracle Extended Tracing
    window 驱动开发
    win7 x64 dtrace
    How to Use Dtrace Tracing Ruby Executing
  • 原文地址:https://www.cnblogs.com/achievec/p/5840196.html
Copyright © 2011-2022 走看看