//主类
/**
* Created by tianxin on 2020/2/15.
* 静态方法或静态变量均属于类 不属于对象
* 没有static关键字 就必须先创建对象 才能使用
* 有static关键字 无需创建对象 直接使用 类名称.成员方法 即可使用
*
* 静态修饰的变量和方法存储在 方法区中的静态区中
* 静态变量:类名称.静态变量
* 静态方法: 类名称.静态方法
*
* 注意事项:
* 1.静态只能访问静态 不能直接访问非静态
* 非静态可以访问静态和非静态
* 原因:因为在内存中【先】有的静态内容,【后】有的非静态内容
* “先人不知道后人 但是后人知道先人”
*
* 2.静态方法不能使用this关键字 this代表当前对象 静态方法是类调用的 不是某个对象
*
* 静态方法块的格式:
* public class 类名称{
* static {
* 静态代码内容
* }
* }
* 特点:
* 当第一次使用本类时,静态代码块执行唯一的一次
* 静态内容总是优先于非静态 所以静态代码块优先于构造方法
*
* 静态代码块的用途:
* 用于一次性地对静态成员变量赋值
*/
public class DemoStaticMethod {
public static void main(String[] args) {
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
obj1.MethodA(); // 成员方法
MyClass.MethodB(); //静态方法
//对于本类中的静态方法,可以省略类名称 以下两个等效
fun();
DemoStaticMethod.fun();
}
public static void fun(){
System.out.println("自己的方法");
}
}
//MyClass类
public class MyClass {
int num; //成员变量
static int numStatic; //静态变量
//静态代码块
static {
System.out.println("静态代码块执行了");
}
public void MethodA(){
System.out.println("这是成员方法");
//成员方法可以访问成员变量
System.out.println(num);
//成员方法可以访问静态变量
System.out.println(numStatic);
}
public static void MethodB(){
System.out.println("这是静态方法");
//静态方法可以访问静态变量
System.out.println(numStatic);
//静态方法不能访问成员变量
// System.out.println(num);
}
}