1.类变量和类方法
1.类变量
1.类变量的定义和语法
1.类变量(静态变量/静态属性/静态字段)是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量
2.定义语法:
访问修饰符 static 数据类型 变量名; [推荐]
static 访问修饰符 数据类型 变量名;
3.访问方式:
类型.类变量名 [推荐]
对象名.类变量名
【静态变量的访问修饰符的访问权限和范围与普通的属性是一致的,类变量的访问必须遵守相关的访问权限】
类变量是随着类的加载而创建,所以即使没有创建类的对象实例也可以访问该变量
2.类变量内存模型
(1).在JDK7以前,静态变量存放于方法区中的静态域内
(2).在JDK7以后,静态域存储于定义类型的Class对象中,Class对象同堆中的其他对象一样,存在于GC堆中
(3).类在加载时会在堆里面生成一个对应的class对象
3.类变量的注意事项和细节
1.当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量)
2.类变量是该类的所有对象共享的,而实例变量(普通属性)是每个对象独享的
3.加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
4.实例变量不能通过 类名.类变量名 方式访问
5.类变量是在类加载时就初始化了,即使没有创建对象,只要类加载了,就可以使用类变量了
6.类变量的声明周期是随着类加载开始,随着类消亡而销毁
2.类方法
1.类方法的定义和语法
1.类方法也叫静态方法。在使用static关键字修饰后,该方法就是静态方法——静态方法可以访问静态属性/变量
2.定义语法:
访问修饰符 static 数据返回类型 方法名(){ } [推荐]
static 访问修饰符 数据返回类型 方法名(){ }
3.调用方式:
类名.类方法名
对象名.类方法名
【前提是 满足访问修饰符的访问权限和范围】
2.类方法使用场景
当方法中不涉及任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率
开发自己的工具类时,可以将方法做成静态的,方便调用(不用创建对象就可以调用,例如Math类中的方法等)
3.类变量的注意事项和细节
1.类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
类方法中无this的参数(不可以使用this)
普通方法中隐含着this的参数(可以使用this),但是在普通方法中无法对类成员使用this
2.类方法可以通过类名调用,也可以通过对象名调用。一般是使用类名调用
普通方法和对象有关,需要通过对象名调用,不能通过类名调用
3.类方法中不允许使用和对象有关的关键字,比如this和super,普通方法(成员方法)可以
4.类方法(静态方法)中,只能访问 静态变量 或 静态方法
普通成员方法,既可以访问 普通变量(方法),也可以访问静态变量(访问)
总结:静态方法,只能访问静态的成员(属性和方法),非静态的方法,可以访问静态成员和非静态成员
2.main方法
1.main方法基础理解
1.main 方法是Java虚拟机调用的
2.虚拟机需要调用类的main()方法,所以该方法的访问权限必须为public(虚拟机与main方法不在同一个包(private,默认,proteced均不可以))
3.Java虚拟机在调用main()方法时不必创建对象,所以该方法必须是static
4.该方法接受String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数
5.在编译后,Java 执行的程序 参数1,参数2,参数3 .... (后面所跟参数就是传入String数组的参数)
2.深入理解
1.在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性
2.但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态变量
3.代码块
1.代码块基础
1.代码块又称初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来
2.代码块和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时或创建对象时隐式调用
3.基本语法:
[修饰符]{ 代码 };
(1).修饰符 可写可不写,若写只能为static
(2).代码块分两类,使用static修饰的称为静态代码块,没有static修饰的,称为非静态代码块/普通代码块
(3).逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断等)
(4).;(分号)可写可省略
2.代码块深入理解
1.代码块理解
1.代码块:
(1)相当于另一种形式的构造器(对构造器的补充机制),可以做初始化的操作
(2)场景:如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
2.static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次
3.普通的代码块,在创建对象(new 对象)实例时,会被隐式的调用,被创建一次,就会调用一次
普通代码块,每创建一个对象实例,就会执行一次
如果只是使用类的静态成员变量,普通代码块并不会执行
2.类的加载
1.创建对象实例时(new)
2.创建子类对象实例,父类也会被加载
3.使用类的静态成员时(静态属性,静态方法)
3.调用顺序
在创建一个对象时,在一个类中的调用顺序时:
1.调用静态代码块和静态属性初始化(静态代码块和静态属性初始化调用的优先级一样。如果有多个静态代码块和多个静态变量初始化,则按它们定义的顺序调用)
2.调用普通代码块和普通属性初始化(普通代码块和普通属性初始化调用的优先级一样。如果有多个普通代码块和多个普通变量初始化,则按它们定义的顺序调用)
3.调用构造方法
构造器的最前面其实隐含了 super()和调用普通代码块,所以 普通代码块调用顺序优先于构造器。
静态相关的代码块和属性初始化,在类加载时,就执行完毕了,因此是优先于构造器和普通代码块执行的
class 类名{ super(); //调用普通代码块 代码 }
4.继承关系下调用顺序
1.父类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
2.子类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
4.父类的构造方法
5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
6.子类的构造方法
4.final关键字
1.final基础介绍
final 可以修饰类、属性、方法和局部变量
1.当不希望类被继承时,可以用final修饰
2.当不希望父类的某个方法被子类覆盖/重写时,可以用final关键字修饰
3.当不希望类的某个属性的值被修改,可以用final修饰
4.当不希望某个局部变量被修改,可以使用final修饰
2.final深入理解
1.final 修饰的属性又叫常量,一般用 XX_XX_XX来命名
2.final 修饰的属性在定义时,必须赋初值,并且以后不能在修改,赋值可以在如下位置之一
1.定义时
2.在构造器中
3.在代码块中
3.如果 final 修饰的属性是静态的,则初始化位置只能是 定义时或在静态代码块中,不能在构造器中赋值(类加载在调用构造器之前)
4.final 类不能继承,但是可以实例化对象
5.如果类不是final 类,但是含有final 方法,则该方法虽然不能重写,但是可以被继承
6.一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法(已经不会被继承,所以方法不会被重写)
7.final 不能修饰构造方法(即构造器)
8.final 和 static 往往搭配使用,效率更高,不会导致类加载(使类不进行加载),底层编译器做了优化处理
9.包装类(Integer、Double、Float、Boolean等)、String类都是final类
5.抽象类
1.抽象类基础
1.当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
抽象方法就是没有实现的方法,没有实现就是指没有方法体,当一个类中存在方法时,需要将该类声明为abstract类(抽象类)
2.用abstract关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名{ 代码 }
3.用abstract关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
4.抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
5.抽象类在框架和设计模式使用较多
2.抽象类深入理解
1.抽象类不能被实例化(不可以被new)
2.抽象类不一定要包含abstract方法,也就是说,抽象类可以没有abstract方法
3.一旦类包含了abstract方法,那么这个类必须声明为abstract类
4.abstract 只能修饰类和方法,不能修饰属性和其他
5.抽象类可以有任意成员(抽象类本质上还是一个类) 比如:非抽象方法、构造器、静态属性等等
6.抽象方法不能有主体,即不能实现。
7.如果一个类继承了抽象类,则他必须实现抽象类的所有抽象方法,除非他自己也声明为abstract类
只要有了方法体,就是实现了方法,无论方法体内是否有内容
8.抽象方法不能使用private、final 和 static 来修饰的,因为这些关键字都是和重写相违背的
标签:调用,JAVA,变量,静态,代码,抽象类,main,方法,final From: https://www.cnblogs.com/yzr-zy/p/17715714.html