Java 没有类名,我们如何访问静态变量

Java 没有类名,我们如何访问静态变量,java,static,Java,Static,没有类名我们如何访问静态变量?静态变量总是用类名限定,但在这种情况下,我可以不用类名使用它。 这怎么可能 class Student { String email; String name; long phone; static String school="jlc"; public static void main(String[] args) { Student st= null; System.out.

没有类名我们如何访问静态变量?静态变量总是用类名限定,但在这种情况下,我可以不用类名使用它。 这怎么可能

    class Student
    {
    String  email;
    String name;
    long phone;
    static String school="jlc"; 

    public static void main(String[] args)
    {

    Student st= null;
    System.out.println(school);//this should be Student.school but its working.
    }


    }
在下面的程序中,在创建学生对象之后,变量已经加载到内存中,但我不能直接访问它而不使用对象引用。但我们可以对静态变量进行访问

class Student
{
String  email;
String name;
long phone;
static String school="jlc"; 

public static void main(String[] args)
{

Student st= new Student();
System.out.println(email);
}


}

只有在从类外部引用时,才需要提供
ClassName.staticMemberName

在您的情况下,类中的reffering静态成员

回答你的第二个问题:

非静态成员不能直接在静态方法中使用。信息技术 应该有对象引用

所以,你的陈述应该是

System.out.println(st.email);

您可以调用静态方法,而无需引用您所在的同一类中的类,也无需使用静态导入

public class Student {
    public static void someStatic() {
    }

    public static void otherStatic() {
        someStatic(); //works
    }
}
此外:

静态变量始终使用类名限定

首先,您不必使用类名来限定,您可以使用静态导入,例如:

import static java.lang.Math.PI;
接下来,只需使用
PI
即可参考
Math.PI
。例如:

import static java.lang.Math.PI;

public class Foo {

    public static void main (String[] args) {
        System.out.println(PI);
    }

}

这是有效的,因为你在学生课堂上,所以它是隐式的

public class Student {
    public static final String SCHOOL ="Harvard"; 

    public static void main(String[] args) {
        System.out.println(SCHOOL);
    }
}
产出:哈佛大学

public class Teacher {
    public static final String SCHOOL ="Harvard"; 
}

public class Student {
    public static final String SCHOOL ="MIT"; 

    public static void main(String[] args) {
        System.out.println(SCHOOL);
        System.out.println(Teacher.SCHOOL);
    }
}
输出:麻省理工学院

产出:哈佛大学

public class Teacher {
    public static final String SCHOOL ="Harvard"; 
}

public class Student {
    public static final String SCHOOL ="MIT"; 

    public static void main(String[] args) {
        System.out.println(SCHOOL);
        System.out.println(Teacher.SCHOOL);
    }
}
这也说明了为什么这样做,因为现在我们可以打印一个教师和一个学生,他们都有学校财产

问题的第二部分:

您不能直接调用电子邮件,因为您的主要方法是静态的。因此,您不仅需要创建新的student对象,还需要使用它

 public class Teacher {
        public static final String SCHOOL ="Harvard"; 
        public String Email = "Test@Harvard.com";
    }

    public class Student {
        public static final String SCHOOL ="MIT"; 
        public String Email = "Test@MIT.com";

        public static void main(String[] args) {
            System.out.println(SCHOOL);
            System.out.println(Teacher.SCHOOL);

            Student student = new Student ();
            System.out.println(student .Email);

            Teacher teacher = new Teacher();
            System.out.println(teacher.Email);
        }
    }
输出:麻省理工学院

产出:哈佛大学

public class Teacher {
    public static final String SCHOOL ="Harvard"; 
}

public class Student {
    public static final String SCHOOL ="MIT"; 

    public static void main(String[] args) {
        System.out.println(SCHOOL);
        System.out.println(Teacher.SCHOOL);
    }
}
输出:Test@MIT.com


输出:Test@Harvard.com

您是学生,因此这里隐含着
main
方法是
static
下面您不能引用它们,因为它们不是静态存在的。您必须指定哪个实例有它们:
st.email
例如,对于非静态变量也应该有同样的效果。在我们创建对象之后,非静态变量被加载到内存中,并且我们在同一个类中,所以我们可以直接访问非静态变量吗?对于非静态变量也应该这样做。在我们创建对象之后,非静态变量被加载到内存中,并且我们在同一个类中,所以我们可以直接访问非静态变量吗?这与内存无关。可以在同一个main()中创建多个Student对象。现在如果你直接说email,java应该给哪个对象email?非常感谢Bhargav Kumar。因为实例变量可以多次使用,所以我们需要指定哪一个。