`变量:
成员变量:又叫全局变量,定义在类中,方法外面.
1).类成员变量. 使用Static
2).实例成员变量. 没有使用Static.
局部变量:出了成员变量,其他的都是局部变量.
1).方法内部的变量.
2).方法的形参.
3).代码块中的变量.一对花括号中的变量.
---------------------------------------------------------------------------------------------------------------------
变量的初始值:
成员变量默认是有初始值的.
局部变量:没有初始值,所以必须先初始化才能使用.否则会报错尚未初始化.初始化才会在内存中开辟空间.
----------------------------------------------------------------------------------------------------------------------
变量的作用域:
变量根据定义的位置不同,也决定了各自的作用域是不同的.看{}
成员变量:在整个作用域中都有效.
局部变量:从开始定义的位置开始到紧跟着结束的{}为止.
成员变量可以先使用后定义. 局部变量必须先定义而后使用
这里的先使用后访问是眼睛中看到的先后顺序. 如果要调用System.out.println(x)则一定会访问方法doWork()
doWork没有加static修饰.访问doWork方法必须用对象去访问,在构建对象的时候 ABC s = new ABC(); 调用 s.doWork(x) String x 已经存在,在new对象ABC()存在.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
变量的生命周期:
package:
语法: package 子包.子子包 必须把该文件作为java文件中所有代码之前.
java常见包:
全限定名称:包名+类名.
import关键字:
package在第一行, import在package下面.
可以写多个import.只能写一个package.
通配符(*) import java.until.* 引入until包下所有在该文件中使用到的类, 此时的*表示类名.
----------------------------------------------------------------------------------------------------------------------------------------------
静态导入(static import):
static成员名可以用通配符表示
import static java.until.Arrays.*;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
封装思想:
封装setAge确保了age的安全性.
封装其实就是让有些类看不到一些类做了什么事情.所以用权限修饰符来暴露和隐藏.
private:类访问权限. 只能在本类中访问,离开本类无法访问. 可以通过间接访问. 例如:通过方法调用a, 然后将a赋值给age.访问了 private age
不写访问权限(缺省):包访问权限.只有在同一个包中才能访问.
protected:子类访问权限.同包可以访问,即使不在同一包,有继承关系也可以访问.
public:表示全局的. 可以在当前项目中任何地方访问.
如果父类仅仅暴露给子类,用protected.
JAVAbean:
不要把成员变量叫做属性,属性和字段是两种完全不同的东西.
如果操作的字段是boolean类型, 此时不应该叫getter方法,把getName编程isName.
setter方法:
每一个字段都得提供一对setter/getter.
以后使用Eclipse工具之后, getter/setter工具都是自动生成的.
This关键字: this指字段中的变量.
什么是this:
this主要存在于两个位置:
1).构造器中:
表示当前创造的对象.
如: User u1 = new User(). 如果此时打印u1,则会打印出十六进制的哈希编码地址值. 在这行代码中,编译时系统会为程序创建一个缺省的构造器.
User(){} 如果此时在缺省构造器中编写 System.out.println(this) 系统输出的值是和上文相同的十六进制哈希编码地址值. 这就说明了this在编译器中表示当前创造的对象.在这里,this表示的是当前创造的对象u1.
2).方法中:
哪一个对象调用this所在的方法,那么this就表示哪一个对象.
当一个对象创建之后,JVM会分配一个引用自身的this.
this关键字的使用:
1).解决成员变量和参数的二义性.必须要用.
2).同类中实例方法之间的互相调用问题,在实际编写过程中我们习惯省略this.show()的this. 其实这类问题只需要想明白是谁来调用方法的就可以找到this指代的是谁.
.
3)可以把this当做参数传给另一个方法.
4)将this当做方法的返回值(链式方法编程)
5)static和this不能一起使用.
6:构造器重载时的互相调用问题
this(name) 构造器判断调用重载构造器,参数为string.
一个构造器中只能调用一个重载构造器.且必须作为构造器的第一句话. 语法格式 this(实参)通过实参的个数,数据类型判断调用哪一个重载构造器
当多个方法重载或多个构造器重载时. 我们一般是少参数调用多参数.参数越多,考虑的因素也就越多,功能更强大.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建对象并给对象设置初始值有两种方式:
1)先通过无参数构造器创建出一个对象,再通过对象调用相应的setter方法.
2)直接调用带参数的构造器,创建出来的对象就拥有了初始值.
通过构造器和通过setter方法都可以完成相同的功能.
给对象设置数据:
1).setter注入(属性注入)
2).构造注入
根据不同的需求和合理性选择使用构造器带参数还是getter,setter.