java教学第三周总结

一、关于静态static:

static的用法:可以用来修饰类的成员方法、类的成员变量、类中的内部类(以及用static修饰的内部类中的变量、方法、内部类),另外可以编写static代码块来优化程序性能。

使用:
方便在没有创建对象的情况下来进行调用(方法/变量)。

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

1、修饰类的成员变量:
static修饰的成员变量称为静态变量:

静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

2、修饰类的成员方法:
static修饰的成员方法称为静态方法:在静态方法中不能访问类的非静态成员方法和非静态成员变量。但是在非静态方法中可以访问静态成员方法和静态成员变量。

3、修饰代码块:形成静态代码块以优化程序性能。
static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。

4、修饰内部类。

二、子方法static去掉的报错(求平均数的静方法)的原因

例子:

package demo01;

public class Demo01 {
public static void main(String[] args) {
int result;
for (int x = 0; x <= 10; x++) {
result=square(x);
System.out.println("The square of "+x+" is "+result+"\n");
}
}
public static int square(int y){
return y*y;
}
}
下面是正确运行代码后的结果:

 

 下面是去掉square子方法的static后的结果(报错):

 

 无法从静态上下文中引用非静态方法:

在平时编程中我也遇到过:包括main方法在内的static方法中调用某非静态变量,会编译出错的情况,其实在static方法中无论是调用非静态变量还是非静态方法,都会报错

究其原因:任何程序最终都是在内存中执行的,变量只有在内存中占有一席之地时才能被访问,不在内存中的变量就不能被访问。类的静态成员(变量和方法)都属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问;\n\n非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
由于静态成员在类加载的时候就会被分配内存,而非静态成员则不会。因此,在一个类的静态成员中去访问其非静态成员会出错,是因为在类的非静态成员不存在的时候,类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。
posted @ 2022-09-17 13:49  XieLumeng  阅读(19)  评论(0编辑  收藏  举报