一.静态
1.1 静态方法
创建对象就是为了产生实例,并进行数据的封装。
而调用功能时,确没有用到这些对象中封装的数据。
该对象的创建有意义吗?虽然可以编译并运行,但是在堆内存中空间较为浪费。
不建议创建对象。那该怎么调用呢?java中的解决方案就是 使用 static关键字,这是一个成员修饰符。
被静态static修饰的方法除了可以被对象调用外,还可以被类名调用。
静态看上去很美,是不是所有的方法都静态呢?不行!
那么什么时候需要将方法定义成静态的呢?
定义功能时,如果功能不需要访问类中定义的成员变量(非静态)时,该功能就需要静态修饰
1.2 静态方法使用注意事项:
1,静态方法不能访问非静态的成员。
但是非静态可以访问静态成员的。
说明:静态的弊端在于访问出现局限性。好处是可以直接被类名调用。
2,静态方法中不允许出现this,super关键字。
为什么不行呢?
1.3 原理揭秘:
1,静态是随着类的加载就加载了。也是随着类的消失而消失了。
2,静态优先于对象存在,被对象共享。
3,因为静态先存在于内存中无法访问后来的对象的中的数据,所以静态无法访问非静态。
而且内部无法书写this。因为这时对象有可能不存在,this没有任何指向。
1.4 静态的主函数:
public static void main(String[] args)
public : 权限最大。
static :不需要对象。直接用给定的类名就可以访问该函数了。
void : 不需要返回值。
main : 函数名,该名称是固定的。
(String[] args) : 主函数的参数列表:字符串属性类型的参数。
args : arguments :参数。该名称就是一个变量名。
class MainDemo
{
public static void main(String[] args)
{
System.out.println(args);//[Ljava.lang.String;@1afae45//根据这个结果,说明jvm传递了一个字符串类型的数组实体。
System.out.println(args.length);//0,得出结论 jvm传递的是 new String[0];
for (int i = 0; i
{
System.out.println(args[i]);
}
}
void show()
{
System.out.println("show run");
}
}
1.5静态变量
什么时候定义静态变量呢?
当该成员变量的值,每一个对象都一致时,就对该成员变量进行静态修饰。
静态变量和成员变量的区别:
1,所属范围不同。
静态变量所属于类,成员变量所属对象。
静态变量也称为:类变量;成员变量也称为实例变量。
2,调用不同。
静态变量可以被对象和类调用(一般都用类名调用)
成员变量只能被对象调用。
3,加载时期不同。
静态变量随着类的加载而加载。
成员变量随着对象的加载而加载。
4,内存存储区域不同。
静态变量存储在方法区中。
成员变量存储在堆内存中。
class Circle