private
- 是一个权限修饰符
- 可以修饰成员变量和成员方法
- 被其修饰的成员只能在本类中被访问,可以保护成员不被其他类使用
- 提供 “get 变量名()”方法,用于获得成员变量的值,方法用 public 修饰
- 提供 “set 变量名(参数)”方法,用于设置成员变量的值,方法用于public 修饰
this
this 修饰的变量用于指代成员变量
- 方法的形参如果与成员变量同名,不带 this 修饰的变量指的是形参
- 方法的形参没有与成员变量同名,不带 this 修饰的 变量指的是成员变量
什么时候用 this?解决局部变量隐藏成员变量
this : 代表所在的类对象的引用
方法被那个对象调用,this 就代表那个对象
Student.java如下:
package com.面向对象;public class Student {String name;private int age;//age 不能被外部访问的,只能在Student当前类中访问agepublic void work() {System.out.println("开始敲代码...");}/*** 定义的类一般是需要给成员属性生成get/set方法的* ∵目的:保护类中的成员属性变量,权限控制,* ∴给成员属性前加 private(私有的),想要给private赋值,就得使用get/set方法,非private,也可以使用get/set* get---获取成员变量的值* set---给成员变量赋值*/// 下面是自动生成的get/set方法(右键Generate)public String getName() {return name; // => return this.name// 由于该方法中 没有形参name,所以这里的name可以不加this,这里的name 指的就是成员变量的name}public void setName(String name) {this.name = name;// name=name 方法的形参name与成员变量参数name的名称 相同 不带this的话 第一个name指的就是形参(毫无意义,=> String naem="";name=name)// name=n 方法的形参 n 与成员变量参数 name 不相同 不带this的话 name指的就是成员变量(=> this.name=n)}public int getAge() {return age;}public void setAge(int age) {if (age < 0 || age > 120) {System.out.println("年龄不符...");return;}this.age = age; //this.age(成员变量age)=age(局部变量age)}public void work2() {
// public void work2(int i){// 在方法中传递的参数(形参)也属于该方法里面的局部变量Student s = new Student(); // 单独的一个线程GC线程 在堆内存中 不可用的对象// new Student存放在堆内存中,s存放在栈空间中,直接引用到堆内存地址/*** 局部变量int i/age 在什么时候被销毁呢?work2方法执行结束之后* GC 垃圾回收* Student s ------引用到堆内存 new Studnet对象的内存地址*/int i = 20;int age = 30;// 局部变量 变量名称 在同一个方法中 不允许 存在 多个相同的变量名称int z;
// System.out.println(z); //局部变量 使用前 必须 先赋值System.out.println(this.age); // 成员变量 有默认初始值this.age = age; //在work2方法中 将局部变量age 赋值给 成员变量的age(在方法内调用成员变量使用this)}
}
StudentDemo.java如下:
package com.面向对象;public class StudentDemo {public static void main(String[] args) {Student mayiktStudent = new Student(); // new Student()存放堆内存,mayiktStudent存放在栈内存,直接引用到堆内存地址System.out.println(mayiktStudent);mayiktStudent.setName("mayikt");
// mayiktStudent.age = 21;mayiktStudent.setAge(21);System.out.println(mayiktStudent.getName() + "-" + mayiktStudent.getAge());mayiktStudent.work();
// Student xiaojunStudent = new Student();Student xiaojunStudent = mayiktStudent; //将mayiktStudent的堆内存地址复制给xiaojunStudentSystem.out.println(xiaojunStudent); // 可以看到这个内存地址与mayiktStudent的内存地址一样xiaojunStudent.setName("xiaojun");xiaojunStudent.setAge(24);System.out.println(mayiktStudent.getName() + "-" + mayiktStudent.getAge()); // 现在两个对象使用的是一个内存地址,System.out.println(xiaojunStudent.getName() + "-" + xiaojunStudent.getAge()); //所以两个对象的属性值一样xiaojunStudent.work();}
}
下一篇文章:构造方法