Day07

末蓝、 2021-12-10 21:25 356阅读 0赞

变量的访问原则和this关键字
1,变量的访问原则;
在方法中,使用一个变量时,会去找这个变量的声明和定义,寻找原则是,就近原则
2,就近原则:
在寻找变量定义的过程中,由近到远,先在当前方法中寻找该变量的定义,如果找到了,就可以直接使用,不在继续寻找,如果没有找到,就去当前类的方法的成员寻找,如果找到了,就直接使用,没有就继续,接着去父类的成员位置找,没有找到一直找,找到object类型还是没有找到,就编译报错
3,内存解释;
某个方法访问某个变量时,先在本方法的栈帧中,寻找是否有该变量,如果有就直接使用;如果没有就根据调用者寻找到对应的对象,在对象中继续寻找。
4,this关键字;
1,作用;可以用于区分成员比那里和局部变量
2,含义;
1.表示本类当前对象的引用
2,那个对象来调用this所在的方法,this就表示那个对象
3,this其实就是方法中,存储的调用者的引用

构造方法的概述
1,构造方法;构造器
2,作用;用于给对象的成员变量赋初始化值。在创建对象时,由虚拟机自动调用该方法,用于给成员变量赋值,当对象被创建完成了时,就已经给成员变量赋值完成了
3,构造方法其他说明;
1,构造方法不需要手动调用,在创建对象的时候,由jvm虚拟机自动调用
2,对象本身不能调用构造方法
3,构造方法只能调用一次
4,构造方法的注意事项;
1,构造方法可以是有参数的,可以是无参数的
如果是没有参数的构造方法,外界无需传入任何数据,在构造方法中,只能给成员变量赋值固定的数据,或者不赋值任何数据
如果是有参的构造方法,外界可以传入指定的数据,在构造方法中,可以根据外界传入的数据,来给成员变量赋相应的值
如果在一个类中,没有收到定义任何构造方法,系统会给该类默认提供一个空参构造,空参构造中,没有任何执行内容
如果手动在类中定义了任意一个构造方法,系统将不再提供任何构造方法
构造方法的重载;
在同一个类中,方法名相同,参数列表不同,与返回值无关
构造方法中,就是在一个类中,方法名和类名相同,没有返回值,只需要【参数列表不同】即可
在开发中,要求空参和有参构造全都提供
构造方法和set方法的比较
1,相同点
构造方法和set方法都可以间接的给成员变量赋值
外界无法直接访问到私有成员变量,所以需要依靠公有的构造方法和set方法给成员变量赋值
2,区别;
构造方法是现在创建对象的时候有jvm自动调用,给成员变量赋值,只能调用一次
set方法是在创建对象之后,由对象来调用,给成员变量赋值,可以调用多次
3,设计;
构造方法使用用于给成员变量进行初始化的赋值,不是用于频繁的修改值
set方法用于后期频繁的对成员变量进行修改
4,set方法相对比较灵活,可以替代构造方法
5,String 类型;只提供了构造方法用于初始化,没有提供set以及其他的用于修改私有成员变量的方法,因此是一个不可变的字符序列
创建对象的内存理解
1,创建对象的过程中,对成员变量的初始化赋值的三个步骤
1,默认初始化赋值
2,显示初始化赋值(在定义成员变量的同时,给变量赋值)
3,构造方法初始化赋值
2,创建对象的步骤;
1,加载到方法去
2,在方法去所在的栈帧中声明一个类型引用,将来用于存储某个对象的地址
3,在堆内存中,开辟一块存储空间,用于存储该类对象的成员变量
4,对象进行默认的初始化赋值
5,对象进行显式初始化赋值
6,对象进行构造方法初始化赋值
7,将对象的地址,赋值给栈内存中的类型引用
静态的概述
1、没有静态:如果该类型的所有对象的某个属性值,全都相同,相同的数据多次存储在不同的对象中,造成了空间的浪费;并且将来在修改这个值的时候,还需要将所有对象都修改一遍,造成维护困难

2、有静态的情况:给要共享的那个数据,加一个关键字,static;有了静态之后,会将某个成员变量存储在方法区的字节码中,就可以让所有对象共享同一个数据,节省了内存空间,将来在修改的时候,只需要修改一个变量即可,提高了可维护性;
静态变量的特点
1、静态使用关键字:static
静态、静止的。静态变量不会随着对象的不同,而变化。所有对象使用的都是相同的不变的一个值。
2、加载时机:
随着类的加载而加载
静态变量属于类,随着类加载到方法区,就会在方法区的静态区,给静态变量分配内存空间,并且赋初值
3、静态变量优先于对象而存在
4、被所有该类型的对象,所共享
5、代码层面:可以直接使用类名直接访问,访问格式:
类名.静态变量名
类名.静态方法名
静态方法访问的注意事项
1、静态方法:在方法声明上,加上了static关键字的方法,就是静态方法
2、静态方法不能访问非静态的变量
原因:非静态的变量属于对象,只有对象创建完成之后,该变量才分配内存空间并且赋值;静态方法可以使用类名直接访问,也就是可以在创建对象之前,就访问静态方法;如果静态方法可以访问非静态的变量,就相当于在创建对象之前,就可以访问创建对象之后才拥有的数据,时间上明显是矛盾的。
说明:如果一定要在静态方法中,访问非静态的变量,那么必须在静态方法中,先创建非静态变量所属类的对象,通过对象名称访问
3、静态方法不能访问非静态方法
原因:非静态的方法可以访问非静态的变量,静态方法可以在创建对象之前,直接使用类名访问。如果静态方法可以访问非静态方法, 就相当于间接的访问了非静态的变量,和上面第2点矛盾了
说明:如果一定要在静态方法中,访问非静态的方法,那么必须在静态方法中,先创建非静态方法所属类的对象,通过对象名称访问
4、静态方法不能访问this关键字
this表示本类当前对象的引用,一定是对象存在之后,才会有this关键字的赋值
静态方法可以在对象创建之前访问,无法访问对象创建之后才存在的数据
5、总结:
静态不能访问非静态

静态变量和非静态变量的区别
1、概念:所属不同
静态变量:属于类,称为“类变量”
非静态变量:属于对象,称为“实例变量”
2、内存空间:存储位置不同
静态变量:存储在方法区的静态区中
非静态变量:存储在堆内存的对象中
3、内存时间:生命周期不同
静态变量:随着类的加载而存在,随着类的字节码消失而消失
非静态变量:随着对象的创建而存在,随着对象被回收而消失
4、访问方式:
静态变量:既可以使用对象名访问,也可以使用类名直接访问
非静态变量:只能使用对象名访问

主方法解释
1、public static void main(String[] args) {…}
2、public :访问权限
本类中、本包中、其他包的无关类,都可以直接访问public修饰的内容
主方法,要被jvm直接调用,因此需要最大的访问权限
3、static:静态
其他类在调用main方法时,可以不创建对象直接调用
主方法,要被jvm直接调用,jvm不希望创建对象(测试类中一般没有任何成员变量)
希望可以直接访问
4、void:返回值类型为空
主方法是完成功能的,不需要给jvm返回具体的数据
5、main:方法名称
Jvm默认会去寻找要运行的类中的主方法,只认main
6、String[] args:方法参数
是一个字符串类型的数组
可以在运行某个类的时候,在命令行中传入

帮助文档的生成

1、获取到一个类的字节码文件之后,虽然可以直接使用,但是不知道里面有哪些方法,什么功能,使用的方式;因此需要有一个该字节码文件的说明书:帮助文档
2、文档注释:用于生成帮助文档的注释
格式:
/**
被注释掉的内容
*/
注解:在注释中,出现的对代码的说明,会被编译识别,格式:@xxx
作者:@author xx
版本:@version v1.0

  1. 从哪个版本开始拥有这个方法
  2. @since v1.0
  3. 参数:@param 参数名称 该参数的含义
  4. 返回值:@return 返回值的含义

3、使用jdk中的工具,javadoc生成对应的帮助文档
javadoc -d 文档生成的目录 -author -version 源代码的文件名称

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python day07

    数据类型之间的相互转换 1、字符串转换成数字类型 判断哪些可以转换成数字型可以参考下面例题:  判断实现将所有能转换为数字类型的字符串都转换为对应类型的数字

    相关 Day07

    变量的访问原则和this关键字 1,变量的访问原则; 在方法中,使用一个变量时,会去找这个变量的声明和定义,寻找原则是,就近原则 2,就近原则: 在寻找变量定义