局部变量
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// i值是多少???
// 语法错误
System.out.println(i);
/*
因为 i 这个变量是在for循环大括号以内定义的,有且只能是在for循环以内使用, 超出for循环大括号范围
失效
*/
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
/*
局部变量:
生存期:在所处的大括号以内,这个大括号不能是类定义大括号
作用域:同上
*/
局部变量和成员变量的区别
封装:
封装是一个非常常见的思想,不单单是使用 private修饰成员变量
方法封装,功能封装,类的封装
类中为什么使用封装约束成员变量
class Person {
// 成员变量 Field
private String name;
private int age;
private char gender;
// 构造方法 Constructor
public Person() {}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setGender(char gender) {
this.gender = gender;
}
public char getGender() {
return gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
public class Demo2 {
public static void main(String[] args) {
Person p1 = new Person();
/*
目前代码中操作成员变量是非常方便的,而且没有任何的约束!!!
只要拥有类对象,就可以通过 . 运算符直接操作成员变量,这样操作
是存在一定的隐患的!!!
希望对于数据的赋值和获取存在一定的限制。
需要使用 private 关键字
public : 公开的,公共的,这是Java中对于数据的最高权限。只要有当前类对象就可以
通过类对象直接操作使用 public 修饰的成员变量和成员方法。
private : 私有的,使用 private修饰的成员变量或者成员方法,有且只能在类内使用
类外没有使用的权利!!!
类外没有权利操作使用 private 修饰成员变量,那么这里需要提供类外操作 private 修饰的
私有化成员变量的方式
setter and getter
setter 方法是能够让类外给予 private修饰的私有化成员变量数据
格式:
public void set成员变量名(对应成员变量的数据类型) {
赋值语句
}
getter 方法是能够让类外获取 private修饰的私有化成员变量数据
格式:
public 对于成员变量数据类型的返回值 get成员变量名() {
return 对应的成员变量;
}
*/
p1.setName("XXX");
p1.setAge(-16);
p1.setGender('狗');
System.out.println(p1.getName() + ":" + p1.getAge() + ":" + p1.getGender());
}
}
使用private修饰成员变量有什么好处
- 行为规范!!!所有的实体类中所有的成员变量都要求使用 private 修饰私有化!!!
- 可以更加规范化对于成员变量的操作过程
- 可以隐藏一部分对于代码的操作过程
this关键字
字面含义:
这个,这儿
-
表示调用当前方法的类对象
可以利用this调用类对象的成员变量和成员方法
可以用于操作当前类对象。 -
this关键字调用构造方法 【考点】
格式:
this(实际参数);a. 有且只能用于在Constructor 构造方法内
b. this() 在类内调用其他构造方法,是根据小括号内的实际参数类型来选择的
c. 两个构造方法,不能通过this关键字,相互调用,出现语法错误!!!
d. this(实际参数)调用其他构造方法, 有且只能是在当前构造方法代码块的第一行,并且只能调用一个
匿名对象
创建对象格式:
类名 类对象 = new 构造方法(实际参数);
Person p1 = new Person();
赋值号左侧只是在内存的栈区定义了一个变量,而这个变量是一个引用数据类型赋值号右侧在内存堆区创建了类对象,并且把当前类对象在内存堆区的空间首地址,赋值给左侧的引用数据类型。
匿名对象,就是没有对象名的对象!!!
格式:
new 构造方法(实际参数);
用途:
1. 使用匿名对象直接类内的成员方法
2. 使用匿名对象直接作为其他方法的参数
禁用:
给予匿名对象成员变量赋值 【有歧义】 Android