精华内容
下载资源
问答
  • 我需要从以下类列表(Species.java)访问私有变量,以便在KlingonOx.java类中使用它们。KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。这是Species.java类:import java.util.Scanner;...

    我需要从以下类列表(Species.java)访问私有变量,以便在KlingonOx.java类中使用它们。

    KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。

    这是Species.java类:

    import java.util.Scanner;

    public class Species

    {

    private String name;

    private int population;

    private double growthRate;

    public void readInput()

    {

    Scanner keyboard = new Scanner(System.in);

    System.out.println("What is the species' name?");

    name = keyboard.nextLine();

    System.out.println("What is the population of the species?");

    population = keyboard.nextInt();

    while(population < 0)

    {

    System.out.println("Population cannot be negative.");

    System.out.println("Reenter population:");

    population = keyboard.nextInt();

    }

    System.out.println("Enter growth rate (% increase per year):");

    growthRate = keyboard.nextDouble();

    }

    public void writeOutput()

    {

    System.out.println("Name = " + name);

    System.out.println("Population = " + population);

    System.out.println("Growth rate = " + growthRate + "%");

    }

    public int predictPopulation(int years)

    {

    int result = 0;

    double populationAmount = population;

    int count = years;

    while( (count>0) && (populationAmount>0) )

    {

    populationAmount = (populationAmount + (growthRate/100) * populationAmount);

    count --;

    }

    if (populationAmount > 0)

    result = (int)populationAmount;

    return result;

    }

    public Species(String name)

    {

    name = name;

    population = 0;

    growthRate = 0.0;

    }

    public Species(int population)

    {

    name = "";

    if (population > 0)

    population = population;

    else

    {

    System.out.println("ERROR: using a negative" + "population.");

    System.exit(0);

    }

    growthRate = 0.0;

    }

    public Species(double growthRate)

    {

    name = "";

    population = 0;

    growthRate = growthRate;

    }

    public Species(String name, int population, double growthRate)

    {

    name = name;

    if (population > 0)

    population = population;

    else

    {

    System.out.println("ERROR: using a negative" + "population.");

    System.exit(0);

    }

    growthRate = growthRate;

    }

    public Species()

    {

    name = "";

    population = 0;

    growthRate = 0;

    }

    public void setSpecies(String newName, int newPopulation, double newGrowthRate)

    {

    name = newName;

    if (newPopulation >= 0)

    population = newPopulation;

    else

    {

    System.out.println("ERROR: using a negative " + "population.");

    System.exit(0);

    }

    growthRate = newGrowthRate;

    }

    public void setName(String name)

    {

    name = name;

    }

    public void setPopulation(int population)

    {

    if (population > 0)

    population = population;

    else

    {

    System.out.println("ERROR: using a negative" + "population.");

    System.exit(0);

    }

    }

    public void setGrowthRate(double growthRate)

    {

    growthRate = growthRate;

    }

    public String getName()

    {

    return name;

    }

    public int getPopulation()

    {

    return population;

    }

    public double getGrowthRate()

    {

    return growthRate;

    }

    public boolean equals(Species otherObject)

    {

    return (name.equalsIgnoreCase(otherObject.name)) &&

    (population == otherObject.population) &&

    (growthRate == otherObject.growthRate);

    }

    }

    这是KlingonOx.java类:

    import java.util.Scanner;

    public class KlingonOx extends Species

    {

    public static void main(String[] args)

    {

    new KlingonOx().run();

    }

    public void run()

    {

    Species klingonox = new Species();

    Species elephant = new Species();

    System.out.println("Please enter data on the species Klingon Ox.");

    klingonox.readInput();

    klingonox.writeOutput();

    klingonox.setPopulation(int population);

    population = population;

    klingonox.setGrowthRate(double growthRate);

    growthRate = growthRate;

    System.out.println("Please enter data on the species Elephant.");

    elephant.readInput();

    elephant.writeOutput();

    elephant.setPopulation(population);

    population = population;

    elephant.setGrowthRate(growthRate);

    growthRate = growthRate;

    int year = 0;

    if(klingonox.population < elephant.population)

    {

    while(klingonox.population < elephant.population)

    {

    klingonox.population = (int)(klingonox.population + (klingonox.population * (klingonox.growthRate/100) ) );

    elephant.population=(int)(elephant.population + (elephant.population * (elephant.growthRate/100) ) );

    year++;

    }

    System.out.println("KLINGON OX EXCEEDS ELEPHANT IN" + year + "YEARS");

    }

    else

    {

    while(klingonox.population > elephant.population)

    {

    klingonox.population=(int)(klingonox.population+(klingonox.population*(klingonox.growthRate/100)));

    elephant.population=(int)(elephant.population+(elephant.population*(elephant.growthRate/100)));

    year++;

    }

    System.out.println("ELEPHANT EXCEEDS KLINGON OX IN" + year + "YEARS");

    }

    }

    }

    KlingonOx.java类给出了一个错误,即“population”和“growthRate”是Species中的私有实例变量,因此无法访问。我曾尝试使用getPopulation和getGrowthRate方法调用来检索变量,但我不确定如何正确地执行此操作。

    感谢任何反馈。

    展开全文
  • 1. 现在我们有类A(class A)及类B(class B),需要将类A指定的字段(List fields)值赋给类B同样的字段,这些字段都是类的私有字段2. 实现方法如下:A a = new A()B b = new B(); // 创建B类实例,用于接收值Class aClass...

    1. 现在我们有类A(class A)及类B(class B),需要将类A指定的字段(List fields)值赋给类B同样的字段,这些字段都是类的私有字段

    2. 实现方法如下:

    A a = new A()

    B b = new B(); // 创建B类实例,用于接收值

    Class aClass = A.class;

    Class bClass = B.class;

    fields.forEach(field -> {

    try {

    Field afield = aClass.getDeclaredField(field); //获取A类的field

    Field bfield = bClass.getDeclaredField(field); //获取B类的field

    bfield.setAccessible(true); //由于是private的,因此设置为可访问才能获取值

    afield.setAccessible(true); //由于是private的,因此设置为可访问才能设置值

    afield.set(b, bfield.get(a)); //将a的field值赋给b

    } catch (Exception e) {

    e.printStackTrace();

    }

    });

    参考:

    展开全文
  • 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)内容索引访问私有变量访问私有方法在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java 反射机制可以做到这一点。使用这个功能并不困难,在...

    作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)

    内容索引

    访问私有变量

    访问私有方法

    在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java 反射机制可以做到这一点。使用这个功能并不困难,在进行单元测试时这个功能非常有效。本节会向你展示如何使用这个功能。

    注意:这个功能只有在代码运行在单机 Java 应用(standalone Java application)中才会有效,就像你做单元测试或者一些常规的应用程序一样。如果你在 Java Applet 中使用这个功能,那么你就要想办法去应付 SecurityManager 对你限制了。但是一般情况下我们是不会这么做的,所以在本节里面我们不会探讨这个问题。

    访问私有变量

    要想获取私有变量你可以调用 Class.getDeclaredField(String name)方法或者 Class.getDeclaredFields()方法。

    Class.getField(String name)和 Class.getFields()只会返回公有的变量,无法获取私有变量。下面例子定义了一个包含私有变量的类,在它下面是如何通过反射获取私有变量的例子:

    public class PrivateObject {

    private String privateString = null;

    public PrivateObject(String privateString) {

    this.privateString = privateString;

    }

    }

    PrivateObject privateObject = new PrivateObject("The Private Value");

    Field privateStringField = PrivateObject.class.

    getDeclaredField("privateString");

    privateStringField.setAccessible(true);

    String fieldValue = (String) privateStringField.get(privateObject);

    System.out.println("fieldValue = " + fieldValue);

    这个例子会输出”fieldValue = The Private Value”,The Private Value 是 PrivateObject 实例的 privateString 私有变量的值,注意调用 PrivateObject.class.getDeclaredField(“privateString”)方法会返回一个私有变量,这个方法返回的变量是定义在 PrivateObject 类中的而不是在它的父类中定义的变量。 注意 privateStringField.setAccessible(true)这行代码,通过调用 setAccessible()方法会关闭指定类 Field 实例的反射访问检查,这行代码执行之后不论是私有的、受保护的以及包访问的作用域,你都可以在任何地方访问,即使你不在他的访问权限作用域之内。但是你如果你用一般代码来访问这些不在你权限作用域之内的代码依然是不可以的,在编译的时候就会报错。

    访问私有方法

    访问一个私有方法你需要调用 Class.getDeclaredMethod(String name, Class[] parameterTypes)或者 Class.getDeclaredMethods() 方法。 Class.getMethod(String name, Class[] parameterTypes)和 Class.getMethods()方法,只会返回公有的方法,无法获取私有方法。下面例子定义了一个包含私有方法的类,在它下面是如何通过反射获取私有方法的例子:

    public class PrivateObject {

    private String privateString = null;

    public PrivateObject(String privateString) {

    this.privateString = privateString;

    }

    private String getPrivateString(){

    return this.privateString;

    }

    }

    PrivateObject privateObject = new PrivateObject("The Private Value");

    Method privateStringMethod = PrivateObject.class.

    getDeclaredMethod("getPrivateString", null);

    privateStringMethod.setAccessible(true);

    String returnValue = (String)

    privateStringMethod.invoke(privateObject, null);

    System.out.println("returnValue = " + returnValue);

    这个例子会输出”returnValue = The Private Value”,The Private Value 是 PrivateObject 实例的 getPrivateString()方法的返回值。 PrivateObject.class.getDeclaredMethod(“privateString”)方法会返回一个私有方法,这个方法是定义在 PrivateObject 类中的而不是在它的父类中定义的。 同样的,注意 Method.setAcessible(true)这行代码,通过调用 setAccessible()方法会关闭指定类的 Method 实例的反射访问检查,这行代码执行之后不论是私有的、受保护的以及包访问的作用域,你都可以在任何地方访问,即使你不在他的访问权限作用域之内。但是你如果你用一般代码来访问这些不在你权限作用域之内的代码依然是不可以的,在编译的时候就会报错。

    展开全文
  • 那个部分Any access to an a variable must be done through protected methods in ...由于这些方法受到保护,因此子类可以访问它们.首先,您将定义一个这样的基类:public class Base {private int x; // field is pr...

    那个部分

    Any access to an a variable must be done through protected methods in the sub classes.

    …只是意味着子类必须调用超类中定义的受保护方法.由于这些方法受到保护,因此子类可以访问它们.

    首先,您将定义一个这样的基类:

    public class Base {

    private int x; // field is private

    protected int getX() { // define getter

    return x;

    }

    protected void setX(int x) { // define setter

    this.x = x;

    }

    }

    然后你会在你的子类中使用它,如下所示:

    class Child extends Base{

    void foo() {

    int x = getX(); // we can access the method since it is protected.

    setX(42); // this works too.

    }

    }

    展开全文
  • java类中,private成员一般只有在本类中才可以访问,在这里我们将通过java反射机制从外部类中访问private成员。首先我们写一个类:PrivateCar.javapackage reflect;public class PrivateCar {private String color...
  • 我希望我说的是我的话。我有这样的课: public class ... } } 这是mainlabel从其他类(在该示例代码中SampleClass)访问和更改其值的正确方法吗,是否有更好或更合适的解决方案?请注意,这MainClass是具有main方法的类。
  • 今天重写一个类的方法时,里面涉及到了其私有变量的值的改动,但是在子类中无法直接访问到父类的私有属性,于是便想到了利用反射来实现。核心方法时通过 x.class.getDeclaredField 方法获取打 field 对象,然后通过...
  • 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点。使用这个功能并不困难,在进行单元测试时这个功能非常有效。本节会向你展示如何使用这个功能。注意:这个功能只有在...
  • #coding:utf-8class Teacher():__clas = '' # 类私有变量同样遵循,只能在类内部访问,外部无法访问,但是类的方法可以访问同类所有对象私有变量这个规则。def __init__(self):__name = ""def get_name(self):return...
  • 今天重写一个类的方法时,里面涉及到了其私有变量的值的改动,但是在子类中无法直接访问到父类的私有属性,于是便想到了利用反射来实现。核心方法时通过 x.class.getDeclaredField 方法获取打 field 对象,然后通过...
  • 现在我将通过反射访问私有变量。下面是一个私有变量的bean:public class PrivateField {private String name = "qq";private String password = "qqpassword";}下面是得到私有变量的值:package...
  • 前言JavaScript并不像别的语言,能使用关键字来声明私有变量。我了解的JavaScript能用来声明私有变量的方式有两种,一种是使用闭包,一种是使用WeakMap。闭包闭包的描述有很多种,比如:能访问其它函数作用域的函数...
  • 我之前的理解是,如果类中有字段,并且当我继承类时,不受访问限制的字段(私有变量)将在继承类中。但是如果有一个公共的g/setter方法,我可以在基类中使用私有变量。我怎么能想象一个基类中的私有变量呢?我不完全...
  • java反射访问私有变量和私有方法

    千次阅读 2010-06-25 00:31:00
    java反射访问私有变量和私有方法 引言 对于软件开发人员来说,单元测试是一项必不可少的工作。它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在。但是,在写单元...
  • 尽管它是testPrivate在同一类的实例 编写,但不应通过编译器错误将其写入 System.out.println(o.count);... 请记住,我们可以使用MyClass访问testPrivate成员public MyClass {private String propertyOne;pri...
  • Java反射访问私有变量和私有方法

    千次阅读 2011-04-25 21:03:00
    引言  对于软件开发人员来说,单元测试是一项必不可少的工作。它既可以验证程序的有效性...  尽管有很多经验丰富的程序员认为不应该提倡访问类的私有成员变量或方法,因为这样做违反了 Java 语言
  • Captcha captcha = getCaptcha(captchaId);... 抑制Java对修饰符的检查 logger.debug( " 反射得到的验证码:{} " , field. get (captcha));   转载于:https://www.cnblogs.com/mengjianzhou/p/8669488.html
  • 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java 反射机制可以做到这一点。使用这个功能并不困难,在进行单元测试时这个功能非常有效。本节会向你展示如何使用这个功能。 注意:这个功能只有...
  • 同时声明公共方法访问私有变量;另一个类中使用方法计算三角形面积。 <p><strong>为什么写好的程序没有错 但最后计算得出的结果是0.0啊?!求好心人解答wwww</strong></p>   附上代码:...
  • 我对于发射机制的了解就是它非常流氓,不顾成员变量或成员方法前的保护机制是什么,都可以访问。非常霸道!这也告诉我们开发中须谨慎使用,否则后果严重。什么访问权限都形同虚设了先是一个类文件//f.javapublic ...
  • 解释的我觉得也到位:子类拥对父类的私有变量具有拥有权 但是不具有使用权。再和以前学的东西联系起来,总结如下:1、不管父类中的成员变量是静态的还是非静态的,子类统统拥有(这里不用继承概念)。2、不管父类中的...
  • import java.lang.reflect.Field;import java.lang.reflect.Method;/*** 通过反射修改私有成员变量的值** @author Dw**/public class AccessPrivateMemVarWithReflect{public static void main(String[] args) th...
  • 资料一:  引言  对于软件开发人员来说,单元测试是一项必不可少的工作。...本文总结了访问类的非公有成员变量或方法的四种途径,以方便测试人员在需要访问类非公有成员变量或方法时进行选择。
  • 现在我将通过反射访问私有变量。下面是一个私有变量的bean:public class PrivateField {private String name = "qq";private String password = "qqpassword";}下面是得到私有变量的值:package...
  • java访问类的私有变量和方法

    千次阅读 2015-09-19 12:15:37
    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; class A { ... private String a = "私有变量1";... private String b = "私有变量
  • 1、被访问的类FanShe package com.demo.test2; public class FanShe { public int x; private int y; public FanShe() { } public FanShe(int x,int y) { this.x=x; this.y=y; } private String ...
  • 父类User,包含私有变量name和money; 以及两个构造函数和基本的getter方法。 public class User { public User() { } public User(String name, int money) { this.name = name; this.money = money; } ...
  • package ztest;public class PrivateCar {private String owner;private void getDesc(){System.out.println("owner : "+this.owner);}}package ztest;import java.lang.reflect....import java.lang.reflect.Met...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,736
精华内容 1,494
关键字:

java访问私有变量

java 订阅