Java 中的静态static

对象:(也可以说是为了产生实例)是类的实例,其实也个封装,封装了数据,调用功能时,没有用到对象中的数据,此时构造对象的意义不大(创建对象调用这样的方法会在堆中造成空间的浪费)

static :静态修饰符——修饰方法(类中的),在这个方法中没有调用对象中的数据。 静态修饰对象可以调用,类名可以直接调用

谁调用了成员变量谁就是非静态的

静态方法:

1.静态方法不可以访问非静态变量

静态变量中不能出现stastic super 等关键字

2.非静态方法可以访问静态方法

3静态是随着类的加载而加载

4静态优先于对象存在,可以被类名直接调用

5.静态先于存在所以无法访问对象中的数据,所以静态中无法书写this 等。因为对象可能不存在

方法调用:

1.静态调用:直接写方法名或者用类名(都为静态)

package Object;

public class StasticDemo {
    public static void main(String[] args){
        show();
        System.out.println("hello !");
    }
    public static void show(){
        System.out.println("too");
    }
}

2.对象调用:创建对象(可以在静态中调用非静态)

package Object;

public  class StasticDemo {
    public static void main(String[] args){
        new StasticDemo().show();
        System.out.println("hello !");
    }
    void show(){
        System.out.println("too");
    }
}
主函数就是一个静态的 函数
 不管是静态方法还是非静态方法,都需要调用后执行,其执行的次序和在类里声明的次序无关,区别是静态方法是“class.method"方式执行,非静态方法是"object.method"方式执行,即后者需要创建一个对象。

主函数

主函数:当程序编译时Java虚拟机启动,编译.class 文件,在编译文件时会找在类中是否有还有其他的程序入口(一个程序的入口只有一个--主方法) 

 public static void main(String[] args)

public :权限最大

static   :主函数定义为静态,不需要对象,直接用类名调用。在虚拟机中直接用类名调用main()方法,运行到主函数中

void     :没有返回值

main     :函数名,固定

(String[] args):函数的参数列表一个字符串数组

args       :arguments :参数。是一个变量名,可以改变

static:修饰成员变量,将变量变成共享的

class Circle
{
    private double radius;
    private static double Pi=3.14;
   Circle (double radius){
        this.radius=radius;
    }
    double getArea(){
        return radius*radius*Pi;//Circle.Pi
    }
}
public class Demo{
    public static void main(String[] args){
        Circle c=new Circle(2.00);
        double area=c.getArea();
        System.out.println(area);
    }
}
//static 修饰成员变量,将变量变成共享变量

总结:******

1.static :修饰类中的成员变量和成员行为

             修饰方法:方法中不调用对象的成员变量(类中的数据)

             修饰成员变量:将变量共享,在其他对象中也有可能会用到(变量的值一样),(例如 圆周率等)在每一个对象中的值              都是一样的。

2.调用:在一个类里调用静态,直接用名字(省略了类.名字)

            不是在一个类中,静态(变量,方法)用类名调用

静态变量和成员变量

1.所属范围不同:静态变量属于类,成员变量属于对象

2.调用不同:静态变量能被对象和类名调用(一般是类名调用,不创建对象不浪费空间)

                    成员变量:只能被对象调用

3.加载不同:静态变量:随着类的加载而加载

                    成员变量:随着对象的创建而加载

4.储存位置不一样:静态变量:储存在方法区中

                               成员变量:储存在堆中

静态代码块:

初始化类,随着类的加载而运行(类加载时类的所有信息都会被加载到方法区),在类加载时就对类进行初始化

仅执行一次,在类加载时

格式:

static 
{
}

代码:

class Demo3{
    static private int x=98;//静态变量,默认初始化,显示初始化(成员变量有默认初始化,局部变量没有)
    static{
        System.out.println("加载时输出的数:"+x);
    }
   static void Speak(){
        System.out.println("Say what!");
    }
}
class Demo2{
    public static void main(String[] args){
        Demo3.Speak();
        Demo3.Speak();
    }
}

运行结果:

加载时输出的数:98   //只执行一次
Say what!                  //方法调用一次运行一次

Say what!

//成员变量有默认初始化,局部变量没有默认初始化(在方法中,导致局部变量没有赋值初始化就不能使用)

类中的代码块

{

}

是为对象服务的,是用来初始化对象的(在对象创建时才会执行)



猜你喜欢

转载自blog.csdn.net/stitch__/article/details/80010957