活动地址:CSDN21天学习挑战赛
一、类变量(变量用static修饰,又叫静态变量)
1、类变量与成员变量
我们都知道成员变量是对象的变量,那么类变量就是属于类和同属于这个类所有对象的变量
成员变量的使用,我们需要把类实例成对象,用对象调用成成员变量,从创建开始,每个对象的成员变量都独立于其他对象的同名成员变量和类中的同名属性(我们之前曾经讲过,对象的成员变量的默认初始化值是类中属性值,属性值改变,以后创建的对象初始值也改变,但对之前的对象没有任何影响。)
类变量则不同,类中所有对象和类本身都可以调用这一变量,任何变量对该变量的查看与修改都是同一个值
打个比方就是,某个大家族分家了,每个人从家里分出去的时候都能得到一笔初始资金,这一笔钱的多少和当前大家族的状况有关,这笔钱从分出去之后就成了自己的小金库,和大家族没了关系,和已经分家的其他人也没有关系,同时家族还有一个大的金库,无论有没有分家,只要满足一定条件就可以从大金库里存钱取钱。小金库就是成员变量,大金库就是类变量。
3、类变量的存储位置
存储位置有两种说法:1、一种是存储在方法区的中,加载的该类中。
2、一种是存储在堆中的一个类对应的静态变量区(jdk8以后的版本)
但无论如何,类变量属于类和类中所有对象是确定的。
4、类变量的创建
【访问修饰符】 static 变量类型 变量名 = 变量值;(static放在访问修饰符前也没有错)
类变量的创建是在类加载时被创建的。
5、类变量的调用
可以用 对象名。类变量名
可以用 类名。变量名(推荐)
权限:权限由访问修饰符的类型决定
二、类方法
1、类方法与成员方法
同理,成员方法是对象的方法,类方法是属于类的方法
类方法的创建、调用与权限都可以参考类变量的相关内容
2、类方法的应用场景
成员方法的使用需要创建对象来完成,但很多时候对于一些工具类来说,我们是不需要对象的参与的,此时就可以用类方法——>用类直接调用方法来提高编译效率。
3、类方法的中不能使用this这个参数。(普通方法中一般隐含了这this这一参数)
4、静态方法不能使用类中的非静态方法和非静态变量
三、关于main方法
public static void main(String[] args){
1、至此我们可以完全解读这段代码了
首先调用:main方法的调用来自于java虚拟机。
调用权限:方法的调用来自虚拟机,属于不同包的调用,需要用public修饰符修饰
类方法:main的调用来自java虚拟机,不需要创建对象。
void:main方法不需要返回值。
main:java虚拟机只认这个方法名
Strings[] args:java执行参数
2、main是静态方法,main如果要使用本类中的方法,只能使用同类中的静态方法和静态变量
四、只有方法体的方法——代码块
1、代码块的格式
[static]{
代码块主体;
};
2、代码块的执行
每当类被加载或对象被创建对象时都会被执行
3、根据是否有static可以分成普通代码块和静态代码块
类的加载能执行静态的代码块
方法的创建能执行非静态代码
- class xiaoyu {//类的加载
- static {
- System.out.println("执行静态代码块");//执行静态代码块
- }
- {
- System.out.println("执行非静态代码块");//执行非静态代码块
- }
- public static void main(String[] args){
- System.out.println("分割线");//之前是类的加载时执行的代码
- xiaoyu xiaoyu1 = new xiaoyu();//方法的创建
- }
- }
执行结果:
执行静态代码块
分割线
执行非静态代码块
4、类的加载:
类会在何时被加载:类加载的前提是尚未加载该类
1、创建对象时
2、创建对象时,加载的类是该类的子类
3、使用类的静态成员时