Java中对象只能访问public非static实例属性,private属性须通过getter/setter访问,static属性应通过类名而非对象访问,否则违反封装且易引发歧义。

Java 中不能直接通过对象访问类的属性,必须先明确属性的访问权限(如 public、private、protected)以及是否为 静态(static) 属性。对象只能访问该类的 实例属性(非 static 成员变量),且需满足封装规则。
访问 public 实例属性
如果属性被声明为 public 且是非 static 的,可直接用对象名加点号(.)访问:
- // 定义类
- class Person {
- public String name = "张三";
- public int age = 25;
- }
- // 使用对象访问
- Person p = new Person();
- System.out.println(p.name); // 输出:张三
- p.age = 26; // 可修改
访问 private 实例属性(推荐方式)
实际开发中,属性通常设为 private,需通过 public 的 getter/setter 方法间接访问:
- class Person {
- private String name;
- private int age;
- public String getName() { return name; }
- public void setName(String name) { this.name = name; }
- public int getAge() { return age; }
- public void setAge(int age) { this.age = age; }
- }
- Person p = new Person();
- p.setName("李四");
- System.out.println(p.getName()); // 输出:李四
不能通过对象访问 static 属性?
虽然 static 属性属于类本身,但 Java 允许用对象引用访问(不推荐):
立即学习“Java免费学习笔记(深入)”;
- class Counter {
- public static int count = 0;
- }
- Counter c1 = new Counter();
- Counter c2 = new Counter();
- c1.count = 10; // 编译通过,但实际修改的是 Counter.count
- System.out.println(c2.count); // 输出:10(因为是同一个 static 变量)
- // ✅ 正确写法:直接用类名访问
- Counter.count = 20;
访问时常见问题提醒
- 若属性是 private 且无 getter/setter,对象无法访问——编译报错
- 若属性是 final 实例变量,只能在构造方法或声明时赋值,之后不可修改
- 对象为 null 时访问任何属性或方法会抛出 NullPointerException
- 子类对象可访问父类中 public/protected 的实例属性(继承后成为自身属性)


















