构造方法的使用场景:
1. 创建对象
2. 可以通过构造方法 给对象的属性赋值 (通过有参构造 + this )
this 关键字
代表当前对象 this 可以理解成 类的隐藏的成员变量 其值是当前对象的内存地址
this 的常见用法:
1.当局部变量和 成员变量同名时 借助this 区分 局部变量 和 成员变量 this.var 表示当前对象的成员变量
2.this 可以 调用 (访问 ) 成员变量
3.this 可以调用成员方法
4.可以调用构造方法 在构造方法中 使用 this 调用其他构造方法 但是 这行代码必须位于 构造方法的第一行
补充: 静态方法中 ,不能使用this 关键字 , 因为 this 代表了当前对象 ,你得有对象以后 才能使用this,而静态方法和静态代码块是在类加载的时候就初始化了,而这个时候还没有对象 。所以 ,静态方法和静态代码块中不能使用 this。
变量:
成员变量: 在类中定义的变量
实例变量(成员变量): 没有static 修饰的变量
静态成员变量: 有static 修饰的变量 就是 静态变量
局部变量: 在方法中定义的变量或者是在代码块中定义的变量 (没有在类中直接定义的变量都是局部变量。)
实例变量 和 局部变量的区别:
区别1 代码中位置不一样
实例变量: 类中定义的变量
局部变量:方法中 或者 代码块中
区别2 在内存中的位置不一样
实例变量:堆内存
局部变量:栈内存
区别3:是否有默认值
实例变量:有默认值
局部变量:没有默认值
区别4: 作用域不同
实例变量:在整个类中 都能使用 都能访问到
局部变量:只在包含它的大括号中使用
区别5: 生命周期不同
实例变量:从对象创建到对象销毁
局部变量:执行到包含它的方法或者 代码块的时候
类:
构造方法
* 变量
* 方法
* |--静态方法
* 访问修饰符 static 返回值类型 方法名(参数类型 参数名,参数类型 参数名,....){
*
* }
* |--实例方法
* 访问修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名,....){
*
*
* }
使用时的区别:
实例方法: 必须通过实例(对象)调用 obj.method([para]);
静态方法: 通过类名调用 也可以通过对象调用 但是不建议通过对象调用静态方法
static 关键字:
静态的
可以修饰
变量 静态变量
方法 静态方法
对比学习
静态变量和非静态变量
int lhq; 实例变量
static int banfei; 静态变量
共同点: 都是成员变量 static 不能修饰局部变量
不同点:
1. 存储的位置不一样 静态变量 存储在方法区 非静态变量(实例变量) 存储在堆内存
2.份数不一样 静态变量就一份 非静态变量(实例变量) 是一个对象 一份
3.调用方式不一样 :静态变量通过类名来调用 (虽然也可以通过对象名来调用 但是不建议使用), 实例变量 要通过实例来调用
4.分配内存的时间不一样 ,静态变量是在类加载的时候就分配内存,类加载的时间是在对象创建之前 。
实例变量是在创建对象的时候分配内存。
静态方法:static 修饰的方法 建议通过类名调用 工具类中的方法 常为静态方法
实例方法: 没有用static 修饰的方法 需要通过对象调用
静态方法中不可以直接访问非静态的成员变量(实例变量)
静态方法中不可以直接访问非静态方法 (实例方法)
静态方法中不能使用this
静态方法 可以直接访问 静态变量和 静态方法
非静态方法 也可以直接调用静态方法
总结: 静态变量 属于类 或者说 属于 所有的对象,所有的对象共享一份静态变量 ,实例变量 每个对象都有自己的一份
静态方法不能直接方法非静态的成员 (实例变量和实例方法)