zoukankan      html  css  js  c++  java
  • Java 内部类



    public class TestInnerClass {
    public static int field = 1;
    protected int field1 = 2;
    int field2 = 3;
    private int field3 = 4;

    //静态代码块
    /*static {
    System.out.println(field);
    }*/

    public TestInnerClass(){
    NorInner norInner = new NorInner();
    System.out.println(norInner.field1Inner);
    System.out.println(norInner.field2Inner);
    System.out.println(norInner.field3Inner);
    System.out.println(norInner.fieldInner);
    //System.out.println(fieldInner);
    }

    //普通内部类
    public class NorInner{
    public int fieldInner = 1;
    protected int field1Inner = 2;
    int field2Inner = 3;
    private int field3Inner = 4;
    int field = 3;

    public NorInner(){
    System.out.println("内部类field:"+field);
    System.out.println("外部类field:"+TestInnerClass.this.field);
    System.out.println(field1);
    System.out.println(field2);
    System.out.println(field3);
    }
    }

    private void print(){
    StaticInner staticInner = new StaticInner();
    System.out.println(staticInner.field1Inner);
    }

    //静态内部类
    static class StaticInner{
    public int fieldInner = 1;
    protected int field1Inner = 2;
    int field2Inner = 3;
    private int field3Inner = 4;
    static int i=0;

    public StaticInner(){
    System.out.println(field);
    System.out.println(i);
    }
    }

    //自定义接口
    interface OnclickListener{
    void onClick(Object object);
    static int i =1;
    final int NUMB = 124;
    int a = 0;

    void print();
    //void print();
    /*static final void print1(){
    System.out.println("hello");
    }*/
    }

    //匿名内部类
    private void clickInner(){
    OnclickListener oc = new OnclickListener() {
    @Override
    public void onClick(Object object) {
    System.out.println("对象"+object+"被点击");
    }
    public void print(){
    System.out.println("匿名内部类打印");
    System.out.println(i+NUMB+a);
    }
    };
    oc.onClick(new Object(){
    @Override
    public String toString() {
    return super.toString();
    }
    });
    oc.onClick(2);
    oc.print();
    }

    //局部内部类;一般采用匿名内部类
    public static void main(String[] args) {
    TestInnerClass tic = new TestInnerClass();
    System.out.println("普通内部类:");
    //TestInnerClass.NorInner norInner = new tic.NorInner();
    TestInnerClass.NorInner norInner = tic.new NorInner();

    System.out.println("匿名内部类:");

    tic.clickInner();
    System.out.println("静态内部类:");
    StaticInner staticInner1 = new StaticInner();
    System.out.println(field);

    }
    }

    //作用域问题

    public class testInnerVariable {
    class NormalClass{
    //普通内部类不能有静态变量、方法
    int numb = 1;
    public void print(){
    System.out.println("普通内部类numb:"+numb);
    }
    //static void test(){}
    }
    static class StaticClass{
    static int numb = 2;
    public void print(){
    System.out.println("静态内部类numb:"+numb);
    }
    static void test(){
    System.out.println("hello");
    }
    }
    interface Anonymity{
    static int numb = 3;

    public static void print() {
    System.out.println("接口numb:"+numb);
    }

    }
    private void print(){
    Anonymity anonymity = new Anonymity() {
    @Override
    public String toString() {
    System.out.println("匿名内部类变量numb:"+numb);
    return super.toString();
    }
    };
    anonymity.toString();
    Anonymity.print();
    //静态方法不支持对象访问
    //anonymity.print();

    //局部内部类
    class LocalClass{
    //不支持静态变量
    int numb = 1;
    public void print(){
    System.out.println("局部内部类numb"+numb);
    }
    //不支持静态方法
    /*public static void test(){
    System.out.println("hello");
    }*/
    }
    LocalClass localClass = new LocalClass();
    localClass.print();
    }

    /*public staic void test(){

    }*/
    public static void main(String[] args) {

    }

    }

    ??接口的静态方法不支持对象访问



    跟虚拟机有关:填坑!!高级应用

    典型内存泄漏案例

    public class MemoryLeakTest {

    //抽象类,模拟组件类
    static abstract class Component{
    final void onCreat(){
    creat();
    }
    final void onDestroy(){
    destroy();
    }

    abstract void creat();
    abstract void destroy();
    }

    //具体实现子类————组件
    static class MyComponet extends Component{
    Mywindow mywindow;
    static OnclickListener onclickListener;

    @Override
    void creat() {
    onclickListener = new OnclickListener() {
    @Override
    public void onClick(Object object) {
    System.out.println("组件: "+object+"被点击!");
    }
    };
    mywindow = new Mywindow();
    mywindow.setOnclickListener(onclickListener);
    }

    @Override
    void destroy() {
    //this.mywindow.getOnclickListener();
    mywindow.removeClickListener();
    }
    }

    //可视化控件
    static class Mywindow{
    OnclickListener onclickListener;

    public OnclickListener getOnclickListener(){
    return onclickListener;
    }
    public void setOnclickListener(OnclickListener onclickListener){
    this.onclickListener = onclickListener;
    }
    public void removeClickListener(){
    this.onclickListener = null;
    }
    }


    //监听器接口
    interface OnclickListener{
    void onClick(Object object);
    }

    public static void main(String[] args) {
    MyComponet myComponet = new MyComponet();
    myComponet.creat();
    myComponet.destroy();
    System.gc();
    System.out.println("");


    }
    }
  • 相关阅读:
    ASP.NET Ajax – History Support
    Windows Server 2008 R2修改远程桌面连接数
    SQL中的行号ROW_NUMBER()
    数据库的缓存管理[ASPNET2.0深入挖掘系列听后感]
    html页面内容分页【转】
    内容页中操作MasterPage里的用户控件
    回车提交表单
    LightBox——一个不错的图片预览效果
    一个不错的日期控件
    三维地图[E都市]
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/12537529.html
Copyright © 2011-2022 走看看