#Static的用法
如果用static关键字,那么这样的内容不再属于对象自己,而是属于类,所以凡是本类的对象,都共享同一份 。
如果一个成员变量使用了static这个关键字,那么这个对象不再属于对象自己,而是属于所在的类,多个对象共享同一份数据
一旦使用了static修饰成员方法,那么就成为了静态方法,静态方法不属于对象,而是属于类。
注意事项:
1、静态只能直接访问静态,不能直接访问非静态。原因(因为在内存当中是先有静态内容,后有非静态内容“先人不知道后人”“后人知道先人”)
2。静态方法中不可以使用this.(原因:this代表当前对象,通过谁调用的方法,谁就是当前对象)
package Day01;/*
*@author wanghongyuan
*@Create 2020/12/7 22:35
*/
public class StaticTest {
public static void methodStatic(){
// 静态方法中不可以使用this关键字。
//System.out.println(this);//错误写法
}
}
public class MyClass(){
// 成员变量
int num ;
// 静态变量
static int numStatic;
// 成员方法
public void method(){
// 一个成员方法,必须先创建对象,然后通过对象才能使用它。
System.out.print("这是个成员方法")
// 成员方法可以访问成员变量
System.out.println(num);
// 成员方法可以访问静态变量;
System.out.print(numStaic);
}
public static void methodStatic(){
System.out.print("这是个静态方法。")
// 静态方法可以访问静态变量
System.out.print(numStatic)
// 静态方法不可以访问成员变量
// System.out.print(num);//会报错
}
}
public class Demo02StaticMethod{
public static void main(String[] args){
MyClass obj = new MyClass(); // 首先创建对象
// 然后才能使用没有static关键字的内容
obj.method();
// 对于静态方法来说,可以通过对象名来调用,也可以通过类名称来调用。
obj.methodStatic(); //正确,不推荐(容易误以为是一个普通的成员方法,,,这个写法在编译之后也会被javac翻译成“类名称.静态方法名”的格式)
MyClass.methodStatic(); //正确,推荐使用(静态方法的使用尽量使用类名称.方法来调用)
// 无论是成员变量,还是成员方法,如果有了Static,都推荐使用类名称进行调用。
// 成员变量(静态变量):类名称.成员变量(静态变量)
// 静态方法:类名称.静态方法()
// 对于本来在类当中的静态方法,可以省略类名称.的方式进行调用
myMethod();// 这个在编译的时候也会等于Demo02StaticMethod.myMethod();完全等效的
}
public static void myMethod(){
System.out.print("自己的方法!")
}
}