static:静态
1.为什么用static
创建对象是为了产生实例,并进行数据的封装。但是总会出现这样的情况:
在调用某功能时,并没有用到对象中封装的数据。例如:
class Animal{
private String name;
public void Animal(String name){
this.name = name;
}
public void eat{
System.out.println("eat,eat,eat");
}
}
内存图:
在使用的时候,虽然可以编译通过,但是在堆内存中较为浪费。
这时候,就可以使用static修饰啦!
被静态static修饰的方法,除了可以被对象调用外,还可以被类名调用
2.什么时候将方法定义成静态
定义一个功能时,如果该功能不需要访问类中定义的成员变量(非静态),该功能就需要静态修饰(当然不修饰编译也通过)
3.怎么使用
还是上面的例子
class Animal{
private String name;
public void Animal(String name){
this.name = name;
}
//用static修饰
public static void eat(){
System.out.println("eat,eat,eat");
}
}
使用时,直接用类调用
Animal.eat();
4.使用要注意什么
1)static的好处就是可以直接被类名调用而不用再创建对象。
2)static存在访问局限性,非静态可以访问静态成员,但是静态不能访问非静态成员。
3)静态方法不能出现this和super
原因:静态是随着类的加载而加载的,也是随着类的消失而消失。这也就意味着静态先于对象存在内存中。所以静态无法访问后来的对象中的数据,也就是静态无法访问非静态,并且this和super没有指向。
5.静态变量
当某成员变量的值,在每一个对象中都一致时,可以对该变量用静态修饰
举个例子说
//计算圆面积
class Circle{
//圆的半径
private double radius;
//pi值加静态关键词修饰
private static double pi = 3.14;
Circle(double radius){
this.radius = radius;
}
//获取圆面积
double getArea(){
return radius*radius*pi;
}
}
静态变量和成员变量的区别:
1)所属范围不同
静态变量所属于类(也称类变量)
成员变量所属于对象(实例变量)
2)调用不同
静态变量可以被类和对象调用(一般用类)
成员变量只能被被对象调用
3)加载时间不同
静态变量随着类加载
成员变量随着对象加载
//markdown咋做表格 ಥ_ಥ
额外的:
对于主函数,public static void main(String[] args)
主函数也是静态的
public : 权限最大
static :静态
void : 无返回值
String[] : 主函数字符串类型参数
args:arguments 参数
不妨来看看这个args到底是啥内容
class MainDemo{
public static void main(String[] args){
System.out.println(args);
}
}
结果:
[Ljava.lang.String;@6e677ea2
黑人问号???
@6e677ea2 这是哈希值,我还不太清楚具体的东西 ಥ_ಥ
以后再写写