JAVA反射使用Field的set()方法设置属性,为什么不能用类的get()方法获取属性内容?

 使用反射设置好了私有属性,在不使用setAccessible(true)时候,为什么不能使用demo.getName()方法获取属性? 
public class Test{
    public static void main(String [] args)
    {
            Class clazz = Class.forName("com.test.Demo");
            Demo demo = (Demo)clazz.newInstance();
            //f.setAccessible(true);
            Field f = clazz.getDeclaredField("name");
            f.set(demo,"zhangsan");
            System.out.println(test1.getName());   //
    }
}

Demo类(com.test包)如下

Demo.java

 public class Demo {
    private String name;
    private int id;
    private double salary;



    public Demo(String name, int id, double salary) {
        super();
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public Demo(){}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }

你的使用不正确,给个范例
String type = field[j].getGenericType().toString(); // 获取属性的类型
if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
Method m = model.getClass().getMethod("get" + name);
String value = (String) m.invoke(model); // 调用getter方法获取属性值
if (value == null) {
m = model.getClass().getMethod("set"+name,String.class);
m.invoke(model, "");
}
}
if (type.equals("class java.lang.Integer")) {
Method m = model.getClass().getMethod("get" + name);
Integer value = (Integer) m.invoke(model);
if (value == null) {
m = model.getClass().getMethod("set"+name,Integer.class);
m.invoke(model, 0);
}
}
if (type.equals("class java.lang.Boolean")) {
Method m = model.getClass().getMethod("get" + name);
Boolean value = (Boolean) m.invoke(model);
if (value == null) {
m = model.getClass().getMethod("set"+name,Boolean.class);
m.invoke(model, false);
}
}
if (type.equals("class java.util.Date")) {
Method m = model.getClass().getMethod("get" + name);
Date value = (Date) m.invoke(model);
if (value == null) {
m = model.getClass().getMethod("set"+name,Date.class);
m.invoke(model, new Date());
}
}

类如果有get方法,就可以用get方法获取属性内容,但是如果类没有get方法呢?如果没有get方法,同时还需要获取属性内容,则需要使用反射