如何在没有类名的情况下访问静态变量

时间:2016-06-10 11:07:52

标签: 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.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);
}


}

4 个答案:

答案 0 :(得分:4)

  

静态变量始终使用类名

进行限定

首先,你不得不用类名来限定,你可以使用静态导入:

import static java.lang.Math.PI;

接下来,您只需使用Math.PI即可参考PI。例如:

import static java.lang.Math.PI;

public class Foo {

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

}

可以找到更多信息here

接下来只要你在范围内,就可以直接解决所有静态成员而无需符合条件。换句话说,这段代码片段:

public class Foo {

    public static int static_member;

    //within this scope you can call static_member without Foo.

}

答案 1 :(得分:2)

只有在您从课堂外提及时才需要提供/rename_table.*([]+)$/

在您的情况下,您在课堂上的reffering静态成员。

回答你的第二个问题:

  

非静态成员不能直接在静态方法中使用。它   应该有对象参考。

所以,你的陈述应该是

ClassName.staticMemberName

答案 2 :(得分:2)

这是有效的,因为你在学生班里面,所以它是隐含的

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);
    }
}

输出:MIT

输出:哈佛

这也说明了为什么这项工作,因为现在我们可以打印一个既有学校财产的老师和学生。

问题的第二部分:

您无法直接拨打电子邮件,因为您的Main方法是静态的。因此,您不仅需要创建新的学生对象,还要使用它。

 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);
        }
    }

输出:MIT

输出:哈佛

输出:Test@MIT.com

输出:Test@Harvard.com

答案 3 :(得分:1)

您可以调用静态方法,而无需引用您所在的类中的类,或者通过使用静态导入。

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

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

此外:

import static Student.*;
public class OtherClass {
    public static void other() {
        someStatic(); //calls someStatic in Student
    }
}