java学习(1)

Wesley13
• 阅读 577

转自: https://blog.csdn.net/qq\_36443736/article/details/82890011

getMethod():获取自身能用所有的public公共方法。1.类本身的public 2.继承父类的public 3.实现接口的public

getDeclaredMethod():获取类自身声明的所有方法,包含public、protected和private方法。。

getMethod()获取继承父类的public方法举例:

java学习(1) java学习(1)

public class Father {
 
    public Father() {
        System.out.println("调用了父类构造方法");
    }
    
    public void fatherSay() {
        System.out.println("我是爸爸");
    }
}
 
 
public class Son extends Father {
 
    public Son() {
    
        // TODO Auto-generated constructor stub
        System.out.println("调用了子类构造方法");
    }
    
    public void sonSay() {
        System.out.println("我是儿子");
    }
    public static void main(String[] args) {
        Son son=new Son();
        son.fatherSay();
    }
}

View Code

测试类:

java学习(1) java学习(1)

public class test1 {
 
    public static void main(String[] args) {
        Class clazz=Son.class;
        try {
              //报错 NoSuchMethodException
            Method method =clazz.getDeclaredMethod("fatherSay");
            method.invoke(clazz.newInstance());
            
                //运行结果:
                //调用了父类构造方法
                //调用了子类构造方法
                //我是爸爸
            Method method2 =clazz.getMethod("fatherSay");
            method2.invoke(clazz.newInstance());
 
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}

View Code

java.lang.Class.getDeclaredMethod()方法用法

http://www.itkeyword.com/doc/7856500677696294646/java-method-getDeclaredMethodlang

注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。

描述

java.lang.Class.getDeclaredMethod()方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。

name 参数是一个字符串,指定所需的方法的简单名称,

parameterTypes 参数是一个数组的Class对象识别方法的形参类型,在声明的顺序

声明

public Method getDeclaredMethod(String name, Class... parameterTypes) throws NoSuchMethodException,SecurityException

参数
name -- 方法的名称
parameterTypes -- 参数数组

返回值
匹配指定名称和参数的类的方法,此方法返回的Method对象

异常
NoSuchMethodException -- 如果匹配方法未找到

NullPointerException -- 如果name 为 null.

SecurityException -- If a security manager, s, is present.

实例
如何使用java.lang.Class.getDeclaredMethod()方法

package com.app.ui;

import java.lang.reflect.*;

public class ClassDemo {

   public static void main(String[] args) {
    
     ClassDemo cls = new ClassDemo();
     Class c = cls.getClass();

     try {
        // parameter type is null
        Method m = c.getDeclaredMethod("show", null);
        System.out.println("method = " + m.toString()); 
    
        // method Integer
        Class[] cArg = new Class[1]
        cArg[0] = Integer.class;
        Method lMethod = c.getDeclaredMethod("showInteger", cArg);
        System.out.println("method = " + lMethod.toString());

     }catch(NoSuchMethodException e){
        System.out.println(e.toString());
     }
   }


   private Integer show() {
      return 1;
   }
    
   public void showInteger(Integer i) {
      this.i = i;
   }
   public int i = 78655;
}

编译和运行程序,产生以下结果:

method = private java.lang.Integer ClassDemo.show()
method = public void ClassDemo.showInteger(java.lang.Integer)invoke调用类中的方法,最简单的用法是可以把方法参数化invoke(class, method)比如你Test类里有一系列名字相似的方法setValue1、setValue2等等可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
你不可不知的JS面试题(第二期)
1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa
Wesley13 Wesley13
3年前
JAVA获取所有接口的实现类或父类的所有子类
packagefind;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.ArrayList;importjava.util.List;importfind.test.Intf;importfind.tes
Wesley13 Wesley13
3年前
Java获取接口所有实现类的方式
<prestyle"color:orange"原作者:heaven夏链接:https://www.cnblogs.com/heaveneleven/p/9125228.html</pre有时候,根据业务逻辑的需求,我们想要获取到某个接口的所有实现类。在这里大致介绍两种方式:1\.借助Spring容器实现Spring作为一个
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
Java的类继承
知识点1、继承作用:提高代码的重用性,继承之后子类可以继承父类中的属性和方法减少重复代码条件:子类和父类要满足isa的逻辑关系,才能使用继承。如:苹果isa水果语法:使用extends连接子类和父类。子类extends父类Java是单继承,一个类只能继承一个父类。子类不能继承父类私有的属性,但是可以
Wesley13 Wesley13
3年前
Java基础入门
类别关键字说明访问控制private私有的protected受保护的public公共的类、方法和变量修饰符abstract声明抽象class类extends扩充,继承final最终值,不可改变的implements实现(接口)interface接口native本地
Wesley13 Wesley13
3年前
@protocol (协议)和 @interface (接口)的区别
ObjectiveC中的协议(@protocol),相当于C,Java等语言中的接口(Interface)。协议本身不实现任何方法,只是声明方法,使用协议的类必须实现协议方法。ObjectiveC中的接口(@interface),相当于C,Java等语言中的类(Class),是类的一个声明,不同与C,Java等语言的接口
Wesley13 Wesley13
3年前
Java多线程 简记
1、实现多线程方法继承Thread类或者实现Runnable接口2、Thread 和Runnable区别实现Runnable接口比继承Thread类所具有的优势:1):适合多个相同的程序代码的线程去处理同一个资源2):可以避免java中的单继承的限制3):增加程序的健壮性,代码可以被多个
Wesley13 Wesley13
3年前
Java oop第05章_多态、接口
一、为什么需要接口?  Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口。一个类只能继承一个父类,但可以实现多个接口。二、接口的定义和使用:  1.定义接口:使用interface关键