java面向对象
成员变量和局部变量
- 成员变量:定义在方法外,类里面
- 局部变量:定义在方法内,类里面
- 区别:作用域不同:成员变量作用在类中,局部变量作用在方法中;初值不同,成员变量有初值,局部变量没有初值
- 除此之外还有静态变量(类变量)需要注意,它是在jvm加载构造器之前进行加载,和类一样加载到方法区
由此我们可以得到一些提示:
存于堆中的变量(成员变量、静态变量),JVM会给赋初始值的
存于栈(准确的栈帧是方法区里面局部变量表之中)中的变量(局部变量),JVM不会给赋初始值的,必须由程序员自己初始化
封装
- 封装,就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。通过该对象对外的提供的接口来访问该对象。
- 优点:减少耦合,便于类中的修改,可以使我们容易地修改类的内部实现(增加了程序的可维护性),还有可以添加逻辑处理实现过滤,
- setter()方面比如age == 300 这些错误就可以避免掉
public void setAge(int age) {
if(age > 120){
System.out.println("ERROR:error age input...."); //提示錯誤信息
}else{
this.age = age;
}
- getter方面的
例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。
public String getSexName() {
if("0".equals(sex)){
sexName = "女";
}
else if("1".equals(sex)){
sexName = "男";
}
else{
sexName = "人妖???";
}
return sexName;
}
- 封装步骤:
- 修改成员变量或者属性变为私有控制访问
- 提供外部可以直接调用的方法,每个属性创建一对取值(getter)方法和赋值(setter)方法
- 加入逻辑控制避免错误