【参考答案】java基础练习:访问修饰符、非访问修饰符
原创
©著作权归作者所有:来自51CTO博客作者全栈测试笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任
参考答案
访问修饰符public、private、protected,以及不写(默认)时的区别?写代码验证
代码略。
练习:如何访问非本类的private修饰的属性、方法?
package com.qzcsbj;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Person p = new Person("jack", 18);
Field[] fields = Person.class.getDeclaredFields();
Method[] declaredMethods = Person.class.getDeclaredMethods();
System.out.println(Arrays.toString(fields));
System.out.println(Arrays.toString(declaredMethods));
// 获取私有属性
for (int i = 0; i < fields.length; i ++) {
fields[i].setAccessible(true);
System.out.println("第"+(i+1)+"个私有属性:" + fields[i].getName());
}
// 获取私有方法
for (int j = 0; j < declaredMethods.length; j ++) {
declaredMethods[j].setAccessible(true);
System.out.println("第"+(j+1)+"个私有方法:" + declaredMethods[j].getName());
try {
Object o = declaredMethods[j].invoke(p);
System.out.println("调用第"+(j+1)+"个私有方法的返回结果是:" + o);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private String getName() {
return name;
}
private int getAge() {
return age;
}
}
下面输出结果是?
package com.qzcsbj;
/**
* @公众号 : 全栈测试笔记
* @描述 : <>
*/
public class Test {
public static void main(String[] args) {
Person.test(2);
}
}
class Person {
public static void test(final int m){
final int n =1;
n=2; // 报错
System.out.println(n);
m=3; // 报错
System.out.println(m);
}
}
final标记的变量即成为常量,只能赋值一次。
__EOF__
本文作者:持之以恒(韧)