fantasticDream

面向对象编程----static变量和方法_内存分析static

static关键字

类使用类的,对象既可以使用对象的方法,也可以使用类的方法

在类中,static 声明的成员变量为静态成员变量或者叫做:类属性,类变量。

它为该类的公用变量,属于类,被该类的所有实例共享在类被载入时被显式初始化。

对于该类的所有对象来说static 成员变量只有一份被该类的所有对象共享!!

可以使用对象.类属性”来调用。不过,一般都是用“类名.类属性

static  变量置于方法区中!

static 声明的方法为静态方法或者叫类方法

不需要对象,就可以调用(类名.方法名

在调用该方法时,不会将对象的引用传递给它所以在static方法中不可访问非static的成员。

 

 

package cn.bjsxt.oop.static00;

/**

 * @author 神奇的梦

 * 包名也不能用出现关键字

 */

public class Student {

// String name;int id;是从属于对象的,有了对象才有它

String name;

int id;

// static 变量static int ss;它的上级是类Student类

// 所以用Student可以直接用

static int ss;

// static 变量 写一个方法

// static void printSS() 从属于类, 在方法区堆里面引用,引用不了 

void类是一个不可抗拒的占位符类,用于保存对表示Java关键字void的 对象的引用。 

 

public static void printSS() {

// Cannot make a static reference to the non-static field name

// 无法对非静态字段名称进行静态引用

用static 声明的方法为静态方法或者叫类方法

不需要对象,就可以调用(类名.方法名)

在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员

// name在创建的模板里面,在方法区的堆里面无法引用 不在一个地方

// 直接引用对象的属性引用不了,因为从属的级别不一样

// name="走起";

// study();从属于对象,也不行,

// 在静态的方法里面,不能加载非静态的东西 

// study();

System.out.println(ss);

}

 // 普通的方法

public void study() {

// printSS();从属于类,我们首先加载的是类,所以必然已经有它了

// printSS();没有加类名,就表示是本类方法

// 所以在普通方法里面可以调用静态的属性和方法

printSS();

System.out.println(name+"在学习");

public void sayHellow(String sname) {

System.out.println(name+"向"+sname+"说:你好!");

  }

} 

package cn.bjsxt.oop.static00;

 public class Test {

public static void main(String[] args) {

// static设静态变量或者叫类变量

// Student调(选择可以通过类名直接调了)ss

// 对象是以类为模板创建的

// ss从属于类所以对象里面没有

Student.ss=323;

// 再调Student。printSS()

Student.printSS();

// 建一个对象 对象里面只有对象成员变量

Student s1=new Student();

Student s= s1.name;

System.out.println(s);

   }

静态初始化块

如果希望加载后,堆整个类进行某些初始化操作,可以使用static初始化块。

是在类初始化的执行,不是在创建对象时执行。

静态初始化块中不能访问非static成员。

执行顺序(先不管,等写完集成后,再回头看!):

上溯到Object块,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。

 

posted on 2022-05-23 16:18  神奇的梦  阅读(65)  评论(0)    收藏  举报

导航