java老师又要提问了,不会扣期末成绩,大神快来指点了!不用解释太深,急求答案! 5
3个回答
展开全部
1、类外不能直接访问,可以通过反射访问,反射修改权限:field.setAccessible(true);
如下Test中有私有变量,TestPrivate需要访问:
public class Test {
private int age = 25;
}
public class TestPrivate {
public void printTestValue() throws Exception{
Class clz = Test.class;
Object obj = clz.newInstance();
Field field = clz.getDeclaredField("age");
field.setAccessible(true);
System.out.println(field.getName() + "--->" + field.getInt(obj));
}
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchFieldException
* @throws SecurityException
*/
public static void main(String[] args) throws Exception {
TestPrivate test = new TestPrivate();
test.printTestValue();
}
2、默认是friendly,可以在本类和本包下使用。
3、构造方法名必须和类名一致。构造方法不能有返回值。构造方法不能被继承。没有显示声明构造方法的,JVM会提供一个默认的无参构造方法。
如下Test中有私有变量,TestPrivate需要访问:
public class Test {
private int age = 25;
}
public class TestPrivate {
public void printTestValue() throws Exception{
Class clz = Test.class;
Object obj = clz.newInstance();
Field field = clz.getDeclaredField("age");
field.setAccessible(true);
System.out.println(field.getName() + "--->" + field.getInt(obj));
}
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchFieldException
* @throws SecurityException
*/
public static void main(String[] args) throws Exception {
TestPrivate test = new TestPrivate();
test.printTestValue();
}
2、默认是friendly,可以在本类和本包下使用。
3、构造方法名必须和类名一致。构造方法不能有返回值。构造方法不能被继承。没有显示声明构造方法的,JVM会提供一个默认的无参构造方法。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询