几个名词的含义:
静态方法:即类方法,在类之中,以static关键字申明的方法。
使用方法:直接使用类名.类方法名来进行调用。
非静态方法:即成员方法,没有static关键字申明。
使用方法:需要先创建类对象,使用类对象名.成员方法名来进行调用。
静态变量:即类变量,在类之中,方法之外,以static关键字申明的变量,它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
使用方法:直接使用类名.类变量名来进行访问。
非静态变量:即成员变量,在类之中,方法之外,没有static关键字申明。
使用方法:需要先创建类对象,使用类对象名.成员变量名来进行调用。
这四者之间的关系
- 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
public class Test { String name = "Hello";//非静态变量 static String hobby = "World";//静态变量 //在静态方法中调用静态变量和非静态变量 public static void print() { //System.out.println(name);//会报错 System.out.println(hobby); } }
- 静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量
public class Test { String name = "Hello";//非静态变量 static String hobby = "World";//静态变量 //在静态方法中调用静态变量和非静态变量 public static void print() { Test test1=new Test();//创建类对象 System.out.println(test1.name);//通过对象来实现在静态方法中调用非静态变量 System.out.println(hobby); } }
- 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
public class Test { String name = "Hello";//非静态变量 static String hobby = "World";//静态变量 //在普通成员方法中,可以直接访问同类的非静态变量和静态变量 public void print() { System.out.println(name); System.out.println(hobby); } }
- 静态方法中可以通过类名.静态方法名来调用,但不能直接调用非静态方法,需要通过对象来访问非静态方法
public class Test { //非静态方法 public void test(){ System.out.println("我是非静态方法test!"); //Test.sayHello("Test");//调用静态方法编译通过 } //静态方法2 public static void test2(){ System.out.println("我是静态方法test2!"); } //在静态方法中调用非静态方法与静态方法 public static void test3(){ System.out.println("我是静态方法test3!"); Test.test2(); Test testA=new Test(); testA.test(); } public static void main(String[] args) { Test.test3(); } } /** * output: *我是静态方法test3! *我是静态方法test2! *我是非静态方法test! */
5.非静态方法中可以通过类名.静态方法名来调用,但不能直接调用非静态方法,需要通过对象来访问非静态方法
public class Test { //在非静态方法里调用非静态方法与静态方法 public void test(){ System.out.println("我是非静态方法test!"); Test testA=new Test(); testA.test2(); Test.test3();//调用静态方法编译通过 } //非静态方法2 public void test2(){ System.out.println("我是非静态方法test2!"); } //静态方法3 public static void test3(){ System.out.println("我是静态方法test3!"); } public static void main(String[] args) { //非静态方法在main函数里只能用对象调用 Test testA=new Test(); testA.test(); } } /** * output: *我是非静态方法test! *我是非静态方法test2! *我是静态方法test3! */