static的基本使用
使用之前先普及一下对象和类是啥
对象 定义:用来描述客观事物的一个实体,由一组属性和方法构成 ----------------人关注对象 ----------------人关注事务信息 类是模子,确定对象将会拥有的特征(属性)和行为(方法) ----------------类是对象的类型 ----------------具有相同属性和方法的一组对象的集合 属性:对象具有的各种静态特征(“有什么”) 方法:对象具有的各种动态行为(“能做什么”)static可以修饰变量和方法,被他修饰的东西会先出现。
先创建一个Student类,将基本能用到的方法都生成一下
这是我写的变量
可以发现,被static修饰的不管是被类名调用还是对象名调用都可以出现
而没有被static修饰的只能通过new对象来通过对象调用出现
static的基本特点
1.随着类的加载而加载
这个特点根据上面也可以看出来,类出现的时候他就出现了。
2.优先于对象存在
因为他随着类的加载就出现了,而对象是new以后才创建出来的,所以它优先于对象存在。
3.被类的所有对象共享
例如将上面student中的age赋值为18,身高high赋值为188;
可以盲猜一下会输出什么
那又是为什么会这样呢?
因为age是实例变量,每创建一次就是另外的一个,是独立的,你每次改都不会影响之前的。
而static修饰的东西是全局变量、共享(用的是同一个,就那一个)的,所以按最后一次修改的来。 4.可以通过类名调用 这个上面也说过了,建议返回去再看看 除此之外,用static肯定还有注意事项,什么情况下他有问题?static的注意事项
在静态方法中不可以使用this关键字 这就不得不说到这个this是干嘛的,但是这是static专场,那就不多说了,浅提一下 this关键字总是指向调用该方法的对象。 根据this出现位置的不同,this作为对象的默认引用有两种情况: 1、 构造器中引用,this指的是该构造器正在初始化的对象。 2、 在普通方法中引用,this指的是调用该方法的对象。 this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或Field this指向的是对象,static出现的时候类加载了,类加载的时候不一定有对象,所以静态方法里面访问非静态访问不到,需要new对象,下面这个注意事项原因本质也是一样的。 静态方法只能访问静态的成员变量和静态的成员方法静态变量和成员变量的区别(建议背下来)
所属不同 静态变量属于类,所以也称为为类变量 成员变量属于对象,所以也称为实例变量(对象变量) 内存中位置不同 静态变量存储于方法区的静态区 成员变量存储于堆内存 内存出现时间不同 静态变量随着类的加载而加载,随着类的消失而消失(时间长,从头到尾) 成员变量随着对象的创建而存在,随着对象的消失而消失 调用不同 静态变量可以通过类名调用,也可以通过对象调用 成员变量只能通过对象名调用代码块
定义 在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块 局部代码块 在方法中出现;限定变量生命周期,及早释放,提高内存利用率 构造代码块(作用:只要你调用构造方法去new一个对象,就会先执行一次)在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行 静态代码块 在类中方法外出现,加了static修饰在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。 用一个经典题来看执行顺序的前后咱们再来浅猜一下这个执行出来的是什么
首先main方法是Java应用程序的入口方法,所以先从它开始看,但是静态代码块的特点就是最先执行,打印一次,所以先打印北大吴彦祖,然后执行main方法里面的,创建一个新对象就会先执行student类里面的静态代码块,只执行一次,其次是代码块,最后是构造方法,创建了俩个,执行俩次。
所以呢,这个执行顺序就是静态代码块>构造代码块>构造方法
目前好像就学了这么多,以后有多的了再回来补,嘿嘿
标签:Java,变量,对象,代码,静态,详解,static,方法 From: https://www.cnblogs.com/sl-xuan77/p/16726076.html