精华内容
下载资源
问答
  • java内部类实例化

    千次阅读 2016-11-19 13:04:52
    一、实例化内部类 java中的内部类如何实例化?例子: public class Animal{ class Head{ } }测试如何实例化内部类: public class TestInstanceInnerClass{ public TestInstanceInnerClass(){ Animal ...

    一、实例化内部类

    java中的内部类如何实例化?例子:

    public class Animal{
        class Head{
        }
    }
    测试如何实例化内部类:

    public class TestInstanceInnerClass{
        public TestInstanceInnerClass(){
           Animal animal = new Animal();//首先实例化外部类
           Head head = animal.new Head();//把内部类当成一个成员变量进行实例化
        }
    }

    内部类是如何实例化的呢?通过上面的小例子,可以得到如下的结论:
    内部类实例化可以使用Out.Innerclassinfo来引用,但是实例化呢?我们应该把内部类当成一个成员变量来使用;
    正确方法:
    Out out = new Out();
    out.new Inner();
    这样就可以实例化我们的内部类,就像使用我们的成员变量一样使用。

    如何不用外部类的实例就可以实例化内部类:
    在上面的例子中,如果没有一个外部类的实例,就不能实例化它的内部类,但是如果我们想直接实例化一个类的内部类应该如何做呢?
    把内部类做成静态类便可以:
    class People{
        static class Head{}
    }
    main(){
        People.Head head=People.Head();//这样就可以直接实例化内部类而不用实例化外部类
    }

    我们可以拿静态内部类做些什么呢,我们可以用内部类封装一个外部类所需要的数据,如下:
    如果我们在一个界面类中需要显示一个ListView,这个ListView中我们需要一个固定的数据,因为每个item的数据是固定的,我们可以为这个Item做一个专用的对象,于是我们就在这个类中写了一个专用对象,这样我们在外部的话直接实例化这个内部对象,封装好传入即可,这样的话这个显示界面对用户是透明的,用户在调用的时候无需知道这个类中的具体的实现方法,直接把一个内部类的list传入,这个界面类就会自动的解析,做到了黑盒效果,降低了程序的偶合性。

    二、实例化内部接口:
    实例化一个内部类的有两种方式:
    一种是拥有外部类的对象再实例化这个内部类,
    另外一种是把内部类做成一个静态的类,这样就没有必要拥有了外部类的实例,方便实例化。
    而实例化一个类中的接口呢?
    请看下面的Demo:
    class View {
      interface OnClickLinstener{//内部接口
       public void onClick();
      }
      class OnClickLis{}//内部类
    }
    class Widget{
      public void init(final int a){
        //内部接口就可以直接用 外部类.内部类来实例化,而内部类就不行了
        View.OnClickLinstener linstener=new View.OnClickLinstener(){
          @Override
          public void onClick() {}
        };
      }
    }
    展开全文
  • java 内部类实例化方式

    万次阅读 2018-09-06 19:42:52
    1、java成员和静态内部的使用,适用本身适用,旨在减少文件个...①java成员内部类和静态内部实例化方式, ②内部的方法调用方式 代码实现如下: package com.innerClass; import com.google.gson.Gso...

    1、java成员和静态内部类的使用,适用类本身适用,旨在减少文件个数和方便维护管理;

    2、匿名内部类方便不同业务实现下的灵活使用;

    3、局部内部类,跟匿名内部类相仿,但功能不同。

    本文着重讲:

    ①java成员内部类和静态内部类的实例化方式,

    ②内部类的方法调用方式

    代码实现如下:

    package com.innerClass;
    
    import com.google.gson.Gson;
    
    /**
     * Created by Liuxd on 2018-09-06.
     */
    public class TestInnerClass {
        private static final Gson gson = new Gson();
    
        public static void main(String[] args) {
            /**
             * 外部类
             */
            User user = new User();
            user.setName("Jack");
            user.setAge(22);
    
            /**
             * 创建内部类对象
             */
            User.BankInfo bankInfo = user.new BankInfo();
            bankInfo.setBankName("中国工商银行");
            bankInfo.setBankNo("15801122225553669");
    
            String json = gson.toJson(user);
            System.out.println(json);
            System.out.println("---------------------------------------------------------");
    
            user.setBankInfo(bankInfo);
            json = gson.toJson(user);
            System.out.println(json);
            System.out.println("---------------------------------------------------------");
    
            /**
             * 创建静态内部类对象
             */
            User.Org org = new User.Org();
            org.setOrgCode("ceo");
            org.setOrgName("总裁办公室");
            org.print();
    
            System.out.println("---------------------------------------------------------");
    
            user.setOrg(org);
            json = gson.toJson(user);
            System.out.println(json);
    
        }
    
    }
    

    外部类/内部类:

    package com.innerClass;
    
    /**
     * Created by Liuxd on 2018-09-06.
     */
    public class User {
        private String name;
        private int age;
    
        private BankInfo bankInfo;
    
        private Org org;
    
        class BankInfo {
            private String bankNo;
            private String bankName;
    
            public String getBankNo() {
                return bankNo;
            }
    
            public void setBankNo(String bankNo) {
                this.bankNo = bankNo;
            }
    
            public String getBankName() {
                return bankName;
            }
    
            public void setBankName(String bankName) {
                this.bankName = bankName;
            }
        }
    
        static class Org {
            private String orgCode = "";
            private String orgName = "";
    
            public void print() {
                System.out.println("机构编码:" + orgCode + ",机构名称:" + orgName);
            }
    
            public String getOrgCode() {
                return orgCode;
            }
    
            public void setOrgCode(String orgCode) {
                this.orgCode = orgCode;
            }
    
            public String getOrgName() {
                return orgName;
            }
    
            public void setOrgName(String orgName) {
                this.orgName = orgName;
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public BankInfo getBankInfo() {
            return bankInfo;
        }
    
        public void setBankInfo(BankInfo bankInfo) {
            this.bankInfo = bankInfo;
        }
    
        public Org getOrg() {
            return org;
        }
    
        public void setOrg(Org org) {
            this.org = org;
        }
    }
    

    打印结果:

     

    {"name":"Jack","age":22}
    ---------------------------------------------------------
    {"name":"Jack","age":22,"bankInfo":{"bankNo":"15801122225553669","bankName":"中国工商银行"}}
    ---------------------------------------------------------
    机构编码:ceo,机构名称:总裁办公室
    ---------------------------------------------------------
    {"name":"Jack","age":22,"bankInfo":{"bankNo":"15801122225553669","bankName":"中国工商银行"},"org":{"orgCode":"ceo","orgName":"总裁办公室"}}
    

     

    展开全文
  • java内部类实例化对象

    千次阅读 多人点赞 2016-10-13 10:04:14
    //在内部类(Inner Class),可以随意的访问外部成员, //这可让我们更好地组织管理我们的代码,增强代码的可读性 Person p = new Person(); Person s = p.new Student(); Person w = p.new Worker();...
    package com.lzcc.oop.testpolymorphism;
    
    /**
     * 多态测试
     * 
     * @author 包子
     *
     */
    public class Person {
    	int id;
    	String name;
    	String phone;
    
    	public void work() {
    		System.out.println("父类工作的方法");
    	}
    
    	class Student extends Person {
    		public void work() {
    			System.out.println("学生学习的方法");
    		}
    	}
    
    	class Worker extends Person {
    		public void work() {
    			System.out.println("工人干活的方法");
    		}
    	}
    
    	class Teacher extends Person {
    		public void work() {
    			System.out.println("老师教的方法");
    		}
    	}
    	
    
    }
    
    package com.lzcc.oop.testpolymorphism;
    
    
    public class Test {
    	
    	public static void testEat(Person p){
    		p.work();
    	} 
    	public static void main(String[] args) {
    		//在内部类(Inner Class),可以随意的访问外部类的成员,
    	    //这可让我们更好地组织管理我们的代码,增强代码的可读性
    		Person  p = new Person();
    		Person s = p.new Student();
    		Person w = p.new Worker();
    		Person t = p.new Teacher();
    		s.work();
    		w.work();
    		t.work();
    		
    	}
    }
    
    

    展开全文
  • java内部类实例化时报错的问题

    千次阅读 2018-11-27 10:59:46
    如果需要实例化Item时,可能会写成:Data.Item item = new Data.Item(); 但是编译器就会出现一个错误:'com.test.Data.Item' is not an enclosing class 其实这种写法是错误的,正确的方式为: Da...

    如果有一个类的结构如下:
    public class Data {
      public class Item {

      }
    };

    如果需要实例化Item类时,可能会写成:Data.Item item = new Data.Item();
    但是编译器就会出现一个错误:'com.test.Data.Item' is not an enclosing class
    其实这种写法是错误的,正确的方式为:
    Data data = new Data();
    Data.Item item = data.new Item();

    如果内部类是static的,如下:
    public class Data {
      public static class Item {

      }
    };

    那就可以直接使用如下方式来实例化:Data.Item item = new Data.Item();
     

    展开全文
  • Java静态内部类实例化问题

    万次阅读 2015-12-15 15:56:21
    静态内部类可以被实例化! 1.首先在外部中的static方法中不能使用普通内部类,因为内部类必须要与外部建立关联才能使用,可以说是同生共死。 2.我在编码过程中,需要2个共同完成一个功能,其中一个工具只...
  • Java内部类及其实例化

    千次阅读 2018-06-12 13:45:43
    在 Java 中,允许在一个(或方法、语句块)的内部定义另一个,称为内部类(Inner Class),有时也称为嵌套(Nested Class)。内部类和外层封装它的之间存在逻辑上的所属关系,一般只用在定义它的或语句块之内...
  • 内部没有使用static关键字修饰,并且和外部的成员变量和方法属于同一级别,这样的是非静态成员内部类(可以使用权限修饰符修饰,和final、abstract关键字修饰)。 public class Atest { private String name = ...
  • 内部类对象引用了实例化内部对象的外围对象。 public class A{ class B {} } 2 为什么需要内部类?(来自JAVA核心技术) 内部类方法可以访问该定义所在的作用域中的数据,包括私有数据。 内部类可以对同...
  •   在介绍成员的继承和实现之前,这里先来介绍一下成员内部类的使用方式和基本规则: 成员内部类基础   成员内部类(member inner class),是最普通的内部,其可以被priavate、public、protected等访问...
  • 首先:外部是不能直接有static 修饰的,静态内部类能不能实例化? 既然使用到了内部类有没有必要使用public来修饰静态内部类 内部类是不是用于隐藏的? 初步理解: 通过示例可以看出 静态内部类是可以通过new ...
  • 然后生成绑定到外部类实例对象的成员内部类实例对象 外部类实例对象的生成一定要先于成员内部类实例对象的生成 public class InnerClassDemo{ //对于final修饰的成员变量,说明该变量是只读变量,只能进行一次赋值...
  • Java中的静态内部类 在定义的内部类前加static修饰符,此时的内部类就是静态内部类。通过一个例子来了解静态内部类都有哪些特点。 public class Outer { //定义一个实例变量和一个静态变量 private int a; ...
  • java内部类实例化错误

    2013-12-01 09:41:35
    为什么静态方法里不能直接调用内部类成员方法却可以? package com.zcl5; class Quetion1 { class ATM { int myMoney = 100; int viewMoney(){ return myMoney; } void outMoney...
  • 有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。 例如: class A{ static class B{ public void put(){ System....
  • Java 内部类成员类、局部、匿名

    万次阅读 多人点赞 2016-10-11 17:49:15
    Java各种称呼详解Java有各种各样,内部、嵌套、成员、局部(本地)、静态、匿名、文件以及这些组合起来的称呼成员内部类,成员匿名,成员嵌套,本地匿名等,真是多的不行,但有些其实...
  • 有些情况下,我们把一个放在另一个内部定义,称为内部类(innerclasses)。 内部类可以使用public、default、protected 、private以及static修饰。而外部顶级(我们以前接触的)只能使用public和default修饰...
  • 看了几篇博客关于一般内部类不能有static修饰的变量,在这里记录一下。问题几种解释如下:1.“if you're going to have a static method, the whole inner class has to be static. Without doing...
  • 为什么要让工具不能被实例化

    千次阅读 2019-06-17 17:48:04
    首先我们知道,工具是可以实例化的,只是没有必要去实例化。 工具是为了提供一些通用的某一非业务领域内的公共方法,不需要配套的成员变量,仅仅是作为工具方法被使用。所以将它做成静态方法最合适,不需要...
  • Java内部类序列

    千次阅读 2018-12-27 15:10:02
    所有的成员属性实现序列接口Serializable Java的嵌套(nested class)一共有四种: static nested class 静态嵌套  inner class 内部类(非静态)  local class 本地(定义在方法内部)  anonymous cla....
  • 为了在模板实例创建时自动调用此静态内部类的构造函数,销毁时自动调用此静态内部类的析构函数 }; template <typename T> T* Singleton<T>::m_pInstance = NULL; // 这句编译通过 template <typename T> ...
  • Java内部类和匿名内部类的用法

    万次阅读 多人点赞 2016-07-21 15:46:41
    Java内部类和匿名内部类的用法 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51981163一、内部类: (1)内部类的同名方法 内部类可以调用外部的方法,如果内部类有同名方法...
  • public class TestClass { private InterfaceA a = new InterfaceA() { @Override public void testA() { ...//成员匿名,例如在Android开发中常用的Handler。 public static void main(St...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    内部的分类有哪些 静态内部 成员内部类 局部内部 匿名内部 内部的优点 内部有哪些应用场景 局部内部和匿名内部访问局部变量的时候,为什么变量必须要加上final? 内部相关,看程序说出运行结果 ...
  • 3.2、抽象一个实例化对象

    千次阅读 2018-03-28 19:20:36
    一、抽象一个 二、实例化对象 1、实例化对象 2、对象类型在内存中分配情况 三、$this 四、构造函数和析构函数
  • 嵌套有四种:静态成员类、非静态成员类、匿名和局部。除了第一种之外,其他三种被称为内部类。 二、什么是静态内部类 静态成员类是最简单的一种嵌套。最好把他看做是普通,只是碰巧被声明在另一个的...
  • 在StaticTest 测试中我写了三种静态域分别是静态成员变量,静态代码块以及静态内部类,下面通过不同的case测试上面三种静态域何时被初始。 测试case代码: public class Main { static ...
  • java匿名内部类序列问题

    千次阅读 2018-01-04 20:40:52
    遇到一个序列问题。...匿名内部类的对象会伴随主对象的整个生命周期,并且匿名必然不会继承序列接口支持序列,所以在执行序列时会发生无法序列外部的情况,因为匿名对象也是一个需要序列成员
  • 的加载和实例化过程

    千次阅读 2018-08-18 20:19:59
    加载(初始)的时机 加载(初始)的过程 加载 连接 初始 加载器 功能 分类 加载器的层次关系 参考文献 唯一的JVM进程 当启动Java虚拟机运行某个Java程序时,不管Java程序有多慢复杂,...
  • 三点说明: static类型的属性和方法,在加载的时候就会存在于内存中。 要想使用某个的static属性和方法,那么这个必须要加载到虚拟机- 中。...成员内部类必须先实例化外部对象然后再实例化成员内部类; ...
  • 对于一个A,表达式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 278,741
精华内容 111,496
关键字:

成员内部类怎么实例化