staticd的方法只能访问静态成员的意思是指 像面向过程中调用方法那样去访问,这些方法在同一个类中:
- class Student{
- private String name;
- private int age;
- private long id;
- public Student(String name, int age){
- this.name = name;
- this.age = age;
- }
-
- public static Student getStudent(){
- return new Student("zhangsan",18);
- }
-
- public String getName(){
- return this.name;
- }
-
- public int getAge(){
- return this.age;
- }
-
- public static void main(String[] args){
- getStudent();//正确 ,静态访问静态
- getAge();//错误,静态只能访问静态
- }
- }
复制代码
static之所以只能访问静态是因为如果直接访问getAge,他是对对象的操作,但是静态函数执行时没有对象,所以就会出错。
这个跟是不是main函数没有关系的,可以看一下下面的代码:
- public class PersonTest {
- public static void main(String[] args){
- Student stu1 = new Student("tom", 20);
- stu1.getName(); //正确,因为代码知道去访问谁 这里是对对象的非静态方法的调用
- Student.getStudent();//静态要用类名进行调用
-
- test1(); //不使用任何前缀调用本类的静态方法
- test2();//错误,静态只能调用静态
- new PersonTest().test2();//通过对象来调用非静态方法
- }
-
- public static void test1(){
- Student stu1 = new Student("tom", 20);
- stu1.getName(); //正确,因为代码知道去访问谁 这里是对对象的非静态方法的调用
- //不是main函数,普通的static方法也是可以这样子去调用对象的非静态方法
- }
-
- public void test2(){
- System.out.println("非静态方法");
- }
- }
复制代码 |