java里一切皆对象;
类是java程序运行的最小单位;
实例可以是对类的实例;(以下均为类的实例)
先说一些基本的栈内存与堆内存;
栈内存是保存变量的空间;
堆内存是保存其他内容的空间;
如:
publilc String a = "123456";
那么a就会保存到栈内存中,而"123456"则会保存到堆内存中;
一开始定义一个类的时候,这个类存在于堆内存里,没有一个变量(可以理解为指针)指向它;
当定义一个变量a(存在于栈内存中)指向这个类的时候
代码如下:
Hello a = new Hello();
格式:
类名 变量= new 类名();
一个类可以创建多个实例,多个对象
实际上就是新建多个变量指向同一个类
你可以把这个类理解成人类,而我们是人类的一个个实例
连着上面的我们来理解static的作用;
理解static:
static的主要作用就是区分这个类是属于类本身还是类的实例;
如果没有static;
当一个实例修改类里面的变量的时候,堆内存里面的类也会跟着改变;
现实中你修改了身高,难道新生人类的身高会直接变成一米八大个吗?
所以为了解决这一逻辑上的漏洞,有了static;
有static修饰的方法或变量属于类的本身,被称为类方法,类变量;
没有static修饰的则属于实例;
那么如果让你定义一个人类;
你就应该思考什么是属于人类,什么是属于个体本身的特性;
像身高这个特性应该属于个体;而身高的极限可以属于人类(你总不能长到20米吧);
那编写代码的时候需要注意的就是有static修饰的,经过实例重新定义的时候;
在堆内存里面的类本身就会改变,因为有static修饰的属于类的本身;
没有static修饰的就不变;
所以你写代码的时候该注意了,可能新建的实例中;
有些变量其实已经被上一个实例重新定义,而你还以为他还是原来的那个类;
class Human {
public String hightmax ="3m";//单位m
public static String hight = "5mm";//人受精卵5mm左右
public static void main(String[] args) {
Human me = new Human();
Human you = new Human();
me.hight="180cm";
System.out.println(me.hight);//180cm
System.out.println(you.hight);//180cm而不是5mm,因为hight是有static修饰的属于类的本身,而me.hight修改了在堆内存里Human类的hight};
}
}
//所以对于这种情况我们的hight就不能由static修饰