精华内容
下载资源
问答
  • java调用内部类的两种方法
    千次阅读
    2021-04-18 04:18:10

    package com.fpi.safety;

    import java.lang.reflect.Field;

    import java.util.ArrayList;

    import java.util.Iterator;

    import java.util.List;

    public class TestPrintList {

    public static void main(String args[]){

    List testList = new ArrayList();

    List testList2 = new ArrayList();

    //一、调用内部类的第一种方式,将内部类声明为static,直接通过总类调用

    testList.add(new TestPrintList.User(3,”tom”));

    testList.add(new TestPrintList.User(4,”jack”));

    testList.add(new TestPrintList.User(5,”lili”));

    User user = null;

    Iterator it = testList.iterator();

    //输出list对象属性的第一种方式,遍历list,得到list中封装的对象,再通过对象获得属性值

    while (it.hasNext()) {

    user = (User)it.next();

    System.out.println(“———“+user.getName());

    System.out.println(“———“+user.getAge());

    }

    //二、调用内部类的第二种方式

    TestPrintList testPrintList = new TestPrintList(); // 外部类实例化对象

    TestPrintList.User2 user2 = testPrintList.new User2(4,”jack22″); // 实例化内部类对象

    TestPrintList.User2 user22 = testPrintList.new User2(5,”jack5555″);

    testList2.add(user2);

    testList2.add(user22);

    Iterator it2 = testList2.iterator();

    //输出list对象属性的第二种方式,遍历list,得到list中封装的对象,再通过类反射输出对象属性

    while (it2.hasNext()) {

    printFieldsValue(it2.next());

    }

    }

    static class User{

    int age;

    String name;

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public User(int age,String name){

    this.age = age;

    this.name = name;

    }

    };

    class User2{

    int age;

    String name;

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public User2(int age,String name){

    this.age = age;

    this.name = name;

    }

    };

    public static void printFieldsValue(Object obj) {

    Field[] fields = obj.getClass().getDeclaredFields();

    try {

    for (Field f : fields) {

    f.setAccessible(true);

    System.out.println(f.get(obj));

    }

    } catch (IllegalArgumentException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    }

    }

    }

    更多相关内容
  • 主要介绍了Java内部使用方法,结合具体案例形式分析了Java内部类原理、调用方法及相关使用注意事项,需要的朋友可以参考下
  • Java如何调用内部类的方法

    千次阅读 2021-02-12 13:58:42
    展开全部参阅下段: 《内部类》内部类是指...内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静...

    展开全部

    参阅下段: 《内部类》

    内部类是指32313133353236313431303231363533e4b893e5b19e31333262353462在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类

    为什么需要内部类?

    典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:

    每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

    A:成员内部类

    作为外部类的一个成员存在,与外部类的属性、方法并列。

    publicclass Outer {

    privatestaticinti = 1;

    privateintj = 10;

    privateintk = 20;

    publicstaticvoidouter_f1() {

    }

    publicvoidouter_f2() {

    }

    // 成员内部类中,不能定义静态成员

    // 成员内部类中,可以访问外部类的所有成员

    class Inner {

    // static int inner_i = 100;//内部类中不允许定义静态变量

    intj = 100; // 内部类和外部类的实例变量可以共存

    intinner_i = 1;

    void inner_f1() {

    System.out.println(i);

    //在内部类中访问内部类自己的变量直接用变量名

    System.out.println(j);

    //在内部类中访问内部类自己的变量也可以用this.变量名

    System.out.println(this.j);

    //在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名

    System.out.println(Outer.this.j);

    //如果内部类中没有与外部类同名的变量,则可以直接用变量名访问外部类变量

    System.out.println(k);

    outer_f1();

    outer_f2();

    }

    }

    //外部类的非静态方法访问成员内部类

    publicvoidouter_f3() {

    Inner inner = new Inner();

    inner.inner_f1();

    }

    // 外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样

    publicstaticvoidouter_f4() {

    //step1 建立外部类对象

    Outer out = new Outer();

    //step2 根据外部类对象建立内部类对象

    Inner inner = out.new Inner();

    //step3 访问内部类的方法

    inner.inner_f1();

    }

    publicstaticvoid main(String[] args) {

    //outer_f4();//该语句的输出结果和下面三条语句的输出结果一样

    //如果要直接创建内部类的对象,不能想当然地认为只需加上外围类Outer的名字,

    //就可以按照通常的样子生成内部类的对象,而是必须使用此外围类的一个对象来

    //创建其内部类的一个对象:

    //Outer.Inner outin = out.new Inner()

    //因此,除非你已经有了外围类的一个对象,否则不可能生成内部类的对象。因为此

    //内部类的对象会悄悄地链接到创建它的外围类的对象。如果你用的是静态的内部类,

    //那就不需要对其外围类对象的引用。

    Outer out = new Outer();

    Outer.Inner outin = out.new Inner();

    outin.inner_f1();

    }

    }

    注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。

    B:局部内部类

    在方法中定义的内部类称为局部内部类。与局部变量类似,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。

    publicclass Outer {

    privateints = 100;

    privateintout_i = 1;

    publicvoid f(finalint k) {

    finalint s = 200;

    int i = 1;

    finalint j = 10;

    //定义在方法内部

    class Inner {

    ints = 300;// 可以定义与外部类同名的变量

    // static int m = 20;//不可以定义静态变量

    Inner(int k) {

    inner_f(k);

    }

    intinner_i = 100;

    voidinner_f(int k) {

    //如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量

    System.out.println(out_i);

    //可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的

    System.out.println(j);

    //System.out.println(i);

    //如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量

    System.out.println(s);

    //用this.变量名访问的也是内部类变量

    System.out.println(this.s);

    //用外部类名.this.内部类变量名访问的是外部类变量

    System.out.println(Outer.this.s);

    }

    }

    new Inner(k);

    }

    publicstaticvoid main(String[] args) {

    // 访问局部内部类必须先有外部类对象

    Outer out = new Outer();

    out.f(3);

    }

    }

    C:静态内部类(嵌套类):(注意:前两种内部类与变量类似,所以可以对照参考变量)

    如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:

    1. 要创建嵌套类的对象,并不需要其外围类的对象。

    2. 不能从嵌套类的对象中访问非静态的外围类对象。

    publicclass Outer {

    privatestaticinti = 1;

    privateintj = 10;

    publicstaticvoidouter_f1() {

    }

    publicvoidouter_f2() {

    }

    // 静态内部类可以用public,protected,private修饰

    // 静态内部类中可以定义静态或者非静态的成员

    staticclass Inner {

    staticintinner_i = 100;

    intinner_j = 200;

    staticvoidinner_f1() {

    //静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)

    System.out.println("Outer.i" + i);

    outer_f1();

    }

    voidinner_f2() {

    // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)

    // System.out.println("Outer.i"+j);

    // outer_f2();

    }

    }

    publicvoidouter_f3() {

    // 外部类访问内部类的静态成员:内部类.静态成员

    System.out.println(Inner.inner_i);

    Inner.inner_f1();

    // 外部类访问内部类的非静态成员:实例化内部类即可

    Inner inner = new Inner();

    inner.inner_f2();

    }

    publicstaticvoid main(String[] args) {

    newOuter().outer_f3();

    }

    }

    生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • 主要介绍了Java单例模式实现静态内部方法示例,涉及构造函数私有化等相关内容,需要的朋友可以了解下。
  • 首先创建两个类,Animal、Demo类: Animal: public class Animal { private int num=9; public class Inner{ //内部类 public void show(){ //内部中show方法 ... public void method(){ //Animal类调用show()方法

    内部类访问特点:内部类可直接访问外部类的成员,包括私有;
    外部类要访问内部类的成员,必须创建对象。
    成员内部类:
    首先创建两个类,Animal、Demo类:
    Animal:

    public class Animal {
    
        private int num=9;
        public class Inner{    //内部类
            public void show(){    //内部中show方法
                System.out.println(num); //内部类可直接访问外部类
            }
        }
        public void method(){     //Animal类调用show()方法
            Inner i=new Inner(); //外部类访问内部类必须创建内部类对象
            i.show();
        }
    }
    
    

    Demo:

    public class Demo {
    
        public static void main(String[] args) {
            Animal a1=new Animal();    //创建Animal类
            a1.method();    //利用Animal成员调用method()方法
        }
    }
    

    运行结果:
    在这里插入图片描述

    局部内部类:是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
    创建Outer类:

    public class Outer {
        private int num =10;
        public void method(){
            class Inner{
                public void show(){
                    System.out.println(num);
                }
            }
            Inner i = new Inner();
            i.show();
        }
    }
    

    Demo类:

    public class Demo {
        public static void main(String[] args) {
            Outer o1=new Outer();
            o1.method();
        }
    }
    
    

    运行结果:
    在这里插入图片描述

    展开全文
  • java调用局部内部类中的方法

    千次阅读 2019-08-09 12:21:26
    局部内部类中方法调用

    使用Junit单元测试
    局部内部类封装在外部类的一个方法中,此方法一般会有一个返回值,返回该局部类类型

    package com.yzy.innerclass;
    
    import org.junit.Test;
    
    /**
     * @className LocalInnerClass.java
     * @author yangsir
     * @version V1.0
     * @date 2019年8月9日-上午12:03:03
     * @description 如何调用局部内部类
     */
    public class LocalInnerClass {
    	@Test
    	public void test1() {
    
    		// 1常规
    		Work w = new Student();// 父类引用指向子类对象
    		w.doWork();// 调用子类重写的接口中的方法
    		// 匿名类的对象
    		Work w1 = new Work() {
    			@Override
    			public void doWork() {
    				System.out.println("工作");
    			}
    		};
    		w1.doWork();// 调用匿名类的方法
    		System.out.println("===================================================");
    	}
    
    	@Test
    	public void test2() {
    
    		// 2匿名类的匿名对象
    		new Work() {
    			@Override
    			public void doWork() {
    				System.out.println("工作");
    
    			}
    		}.doWork();// 直接用new().work的形式,要重写doWork方法
    		System.out.println("===================================================");
    	}
    
    	@Test
    	public void test3() {
    
    		// 1.调用局部内部类
    //		Work work = new LocalInnerClass().getWork();  //new Teacher();  //创建一个局部内部类对象
    //		work.doWork();//调用getWork方法输出讲课(已注释)
    		// 2.调用
    		Work work = new LocalInnerClass().getWork();// 创建一个局部内部类对象
    		work.doWork();// 调用
    	}
    
    	// 局部内部类
    	public Work getWork() {
    		// 1局部内部类
    //		class Teacher implements Work{//局部内部类实现接口,重写doWork方法,返回值为Teacher
    //			@Override
    //			public void doWork() {
    //				System.out.println("讲课");
    //			}
    //		} 
    //		return new Teacher();//返回一个Teacher对象
    		// 2局部内部类 匿名类的匿名对象
    		return new Work() {// 直接return一个匿名对象,然后重写里面的方法即可,注意这里的括号
    			@Override
    			public void doWork() {
    				System.out.println("员工在工作");
    
    			}
    		};
    	}
    }
    
    interface Work { // 一个接口
    	void doWork();
    }
    
    class Student implements Work {// 实现接口的类,有自己的方法
    
    	@Override
    	public void doWork() {
    		System.out.println("学习");
    	}
    
    }
    
    

    下面放一位小姐姐的总结图
    内部类

    展开全文
  • java 反射 调用私有方法(有参数私有方法)获取私有属性值
  • 方法一:需要使用一个外部类对象来new 内部类()----->调用方法 public class JZ1 { public class Solution { public boolean Find() { return false; } } public static void main(String[] args) { ...
  • 后者更明确,如果内部类中存在相同的名称,则可以调用外部类方法。class OuterClass {void foo() { System.out.println("Outer foo"); }View.OnClickListener mListener1 = new View.OnClickListener() {void foo() ...
  • (1)问题分析:考官主要相对static方法的考察,涉及到...java中是否可以覆盖(override) 一个private或者是static的方法。(2)核心答案讲解:不可以。static方法是静态方法,是属于类的方法,非static方法是属于对象...
  • 如果要调用非静态方法,则需要告知要调用它的对象.在您的情况下,您需要内部类对象,但由于您还没有内部类对象,因此您需要创建它...调用内部类对象的方法.你可以这样做:(你只需要记住默认构造函数与其类的可见性具有相...
  • java调用controller方法

    千次阅读 2021-02-12 23:43:09
    如果要在另外一个GradeController中调用count()方法有2种方式:因为StudentController是一个class,不是接口,接口一般都是@Autowired注入就能调用。new一个实例调用比如在GradeController的方法中new一个...
  • Java静态方法调用内部

    千次阅读 2019-07-11 15:17:24
    Java编写代码过程中遇到了一个问题,main方法中创建内部类的实例时,编译阶段出现错误,查看错误描述 No enclosing instance of type NoUseThreadDemo is accessible. Must qualify the all...
  • Java匿名内部使用与示例

    千次阅读 2021-02-25 19:47:42
    在不同的包内的类内调用类的protected方法(其实,也可以理解和第一个原因是一样的)匿名类继承了父类,并调用了父类的protected方法条件:匿名类完成上述使命,则需要继承一个类或者实现某个接口形式:new 示例1:/**...
  • 条件: 1.B是A的内部类 2.A有方法methodA(),B有方法methodB(); 3.现已获得B的实例b。...问:如何通过b调用A的methodA()方法? 具体类com.sun.media.sound.DirectAudioDevice和DirectSDL
  • Java内部类是如何调用外部类的成员变量和方法的?我们下看看下面的例子 package com.iworktool.libjava; public class Outer{ private String privateValue = "privateValue"; public String publicValue = ...
  • java 成员内部使用 内部匿名类 方法参数匿名类 方法匿名类
  • 内部类相似,静态内部类指在一个类的内部包含有另外一个或者多个静态类。例如:public class OuterClass {。。。static class StaticInnerClass1 { //内部静态类//只可以访问OuterClass的静态成员。。。} //...
  • java内部接口的使用

    千次阅读 2019-07-08 20:38:01
    mark https://www.cnblogs.com/chenpi/p/5518400.html
  • 内部类没有使用static关键字修饰,并且和外部类的成员变量和方法属于同一级别,这样的是非静态成员内部类(可以使用权限修饰符修饰,和final、abstract关键字修饰)。 public class Atest { private String name = ...
  • JAVA类的方法调用

    千次阅读 2021-02-12 12:29:18
    一、类的分类:1、普通类2、抽象类(含有抽象方法的类)3、静态类(不需要实例化,就可以使用的类)二、方法的分类:1、私有方法(只有类的内部才可以访问的方法)2、保护方法(只有类的内部和该类的子类可以访问的方法)3、...
  • Java——访问内部类的方法

    千次阅读 2019-05-05 21:29:10
    内部类: 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。 访问特点: • 内部类可以直接访问外部类中的成员,包括私有成员。 • 而外部类要访问内部类中的成员必须要建立内部类的...
  • package day6$6;public class Inside {public static void main(String[] args) {//先创建一个外部类对象Outside in=new Outside();//在通过外部类对象创建一个内部...//调用内部类自己的属性和方法oi.Swim();System...
  • Java内部调用报错

    千次阅读 2017-10-21 23:10:26
    最近在看Java,在编译写书上一个例子时,由于书上的代码只有一部分,于是就自己补了一个内部类。结果编译时出现:No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing ...
  • JAVA方法调用(详细整理)

    千次阅读 2021-02-12 08:55:06
    JAVA方法调用主要有以下几种:1.非静态方法非静态方法就是没有 static 修饰的方法,对于非静态方法调用,是通过对 象来调用的,表现形式如下。对象名.方法()eg:public class InvokeMethod{public static void...
  • Java方法完整调用链生成工具

    千次阅读 2021-07-05 01:59:58
    在很多场景下,如果能够生成Java代码中方法之间的调用链,是很有帮助的。 IDEA提供了显示调用指定Java方法向上的完整调用链的功能,可以通过“Navigate -> Call Hierarchy”菜单(快捷键:Ctrl+Alt+H)使用;...
  • HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
  • 实例详解Java中如何对方法进行调用

    千次阅读 2021-03-06 18:50:40
    原文源自http://www.jb51.net/article/73827.htm方法调用Java支持两种调用方法的方式,根据方法是否返回值来选择。当程序调用一个方法时,程序的控制权交给了被调用方法。当被调用方法的返回语句执行或者到达方法...
  • 如何在Java中异步调用方法

    千次阅读 2021-02-26 19:52:24
    就我已经搜索的常见方法并行化方法调用是做类似的:final String x = "somethingelse";new Thread(new Runnable() {public void run() {x.matches("something");}}).start();这不是很优雅。有没有更好的方法这样做?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,401,124
精华内容 560,449
关键字:

java调用内部方法

java 订阅