java访问private方法求解

问题描述

java访问private方法求解

java里如何从一个类访问另一个类的private方法 求解,就是成员变量我都知道怎么办,方法不懂

解决方案

如果是内部类,可以访问,外部类,就不行了,你还是老老实实遵守面向对象的规则吧

解决方案二:

可以用反射,但是尽量不要破坏规则,别人用private,是有别人自己的用意的。

解决方案三:

Java private方法访问

解决方案四:

既然是私有的当然无法访问 把它改成public就可以啊

解决方案五:

利用反射的原理就对私有的属性进行访问。如果不利用反射是访问不到的

解决方案六:

java没有友元,非要这样就反射吧

解决方案七:

通常来说,既然是私有方法就不应该暴漏给其他类调用。但是你说的问题确实可以通过类反射进行实现。举一个例子如下
package com.zhb.chapter14.rtti;
/**

  • 被调用的类
  • @author zhaohb
    */
    public class InvokedClass {

    public void sayHelloWorld(){
    System.out.println("invoke class say Hello Wolrd");
    }

    private void saySomething(String name){
    System.out.println("Hello: " + name);
    }
    }

package com.zhb.chapter14.rtti;

import java.lang.reflect.Method;
/**

  • 反射调用:可以调用私有/公有方法
  • @author zhaohb
    /
    public class InvokeMethod {
    /
    *

    • 调用共有方法
    • @throws Exception
      /
      @SuppressWarnings({"rawtypes","unchecked"})
      public static void callPublicSayHello() throws Exception{
      Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass");
      Method method = clazz.getDeclaredMethod("sayHelloWorld");
      method.setAccessible(true);
      Object obj = clazz.newInstance();
      method.invoke(obj);
      }
      /
      *
    • 调用私有方法
    • @param name
    • @throws Exception
      */
      @SuppressWarnings({"rawtypes","unchecked"})
      public static void callHiddeSaySomething(String name) throws Exception{
      Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass");
      Method method = clazz.getDeclaredMethod("saySomething", String.class);
      method.setAccessible(true);
      Object obj = clazz.newInstance();
      method.invoke(obj, name);
      }
      public static void main(String[] args) {
      try {
      callPublicSayHello();
      callHiddeSaySomething("xiaoming");
      } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }
      }
      参考资料:来自于java编程思想

解决方案八:

private是类私有的,不可以给其他类访问,或者你可以改成public或者就反射吧

解决方案九:

反射是可以,但是请遵守规则

解决方案十:

采用反射获取方法,获取private方法需要使用getDeclaredMethod方法,通过方法名 和 参数列表 来定位方法,得到Method对象,
再采用 invoke方法,传入参数 执行对象 和 方法参数, 即可,
eg:

 public class GetMethod {
    private void priMethod(){
        System.out.println("this is a private method.");
    }

    public void pubMethod(int a, int b) {
        System.out.println("this is a public method. And result of a+b is:" + (a + b));
    }

    public static void main(String[] args) throws Exception {
        Class c = GetMethod.class;
        c.getDeclaredMethod("pubMethod", int.class, int.class).invoke(c.newInstance(),1,1);
    }
}
时间: 2024-09-08 15:58:25

java访问private方法求解的相关文章

Java 访问 C++ 方法 JavaCPP

JavaCPP提供了在Java中高效访问本地C++的方法.采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM. JavaCPP提供了一系列的Annotation将Java代码映射到C++代码,并使用一个可执行的jar包将C++代码转化为可以从JVM内调用的动态链接库文件. Maven: <dependency>      <groupId>org.bytedeco</groupId>      <artifactId>

【Java】java使用反射访问对象方法和成员变量

虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量.下面我写了一个比较简洁的测试代码,供参考和使用. 测试类 //OBClass.java package com.obo.javaassistdemo; public class OBClass { public int publicField= 999; private int private

反射调用private方法实践(php、java)_php实例

单测中有个普遍性的问题,被侧类中的private方法无法直接调用.小拽在处理过程中通过反射改变方法权限,进行单测,分享一下,直接上代码. 简单被测试类 生成一个简单的被测试类,只有个private方法. 复制代码 代码如下: <?php/** * 崔小涣单测的基本模板. * * @author cuihuan * @date 2015/11/12 22:15:31 * @version $Revision:1.0$ **/class MyClass {/** * 私有方法 * * @param

Java访问WebService返回XML数据的方法

  本文实例讲述了Java访问WebService返回XML数据的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

java中利用反射调用另一类的private方法的简单实例_java

我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:  import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo

Java访问WebService返回XML数据的方法_java

本文实例讲述了Java访问WebService返回XML数据的方法.分享给大家供大家参考.具体如下: import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.io.FileNotFoundException; import java.io

java-注意不要编写返回引用可变对象的访问器方法.--------要怎么证明呢

问题描述 注意不要编写返回引用可变对象的访问器方法.--------要怎么证明呢 import java.util.Date;import java.util.GregorianCalendar;public class Employee { private String name; private double salary; private Date hireDay; public Employee(String ndouble sint yearint monthint day ){ na

java的private关键字

private关键字意味着除非那个特定的类,而且从那个类的方法里,否则没有人能访问那个成员.同一个包内的其他成员不能访问private成员,这使其显得似乎将类与我们自己都隔离起来.另一方面,也不能由几个合作的人创建一个包.所以private允许我们自由地改变那个成员,同时毋需关心它是否会影响同一个包内的另一个类.默认的"友好"包访问通常已经是一种适当的隐藏方法:请记住,对于包的用户来说,是不能访问一个"友好"成员的.这种效果往往能令人满意,因为默认访问是我们通常采用

Java访问指示符

针对类内每个成员的每个定义,Java访问指示符poublic,protected以及private都置于它们的最前面--无论它们是一个数据成员,还是一个方法. 每个访问指示符都只控制着对那个特定定义的访问. 这与C++存在着显著不同.在C++中,访问指示符控制着它后面的所有定义,直到又一个访问指示符加入为止. 通过千丝万缕的联系,程序为所有东西都指定了某种形式的访问.在后面的小节里,大家要学习与各类访问有关的所有知识.首次从默认访问开始.