• 【Java】访问修饰符之private && this 关键字


    private

    1. 是一个权限修饰符
    2. 可以修饰成员变量和成员方法
    3. 被其修饰的成员只能在本类中被访问,可以保护成员不被其他类使用
    • 提供 “get 变量名()”方法,用于获得成员变量的值,方法用 public 修饰
    • 提供 “set 变量名(参数)”方法,用于设置成员变量的值,方法用于public 修饰        

    this

    this 修饰的变量用于指代成员变量

    • 方法的形参如果与成员变量同名,不带 this 修饰的变量指的是形参
    • 方法的形参没有与成员变量同名,不带 this 修饰的 变量指的是成员变量

     什么时候用 this?解决局部变量隐藏成员变量

    this : 代表所在的类对象的引用

    方法被那个对象调用,this 就代表那个对象

    Student.java如下:

    1. package com.面向对象;
    2. public class Student {
    3. String name;
    4. private int age;
    5. //age 不能被外部访问的,只能在Student当前类中访问age
    6. public void work() {
    7. System.out.println("开始敲代码...");
    8. }
    9. /**
    10. * 定义的类一般是需要给成员属性生成get/set方法的
    11. * ∵目的:保护类中的成员属性变量,权限控制,
    12. * ∴给成员属性前加 private(私有的),想要给private赋值,就得使用get/set方法,非private,也可以使用get/set
    13. * get---获取成员变量的值
    14. * set---给成员变量赋值
    15. */
    16. // 下面是自动生成的get/set方法(右键Generate)
    17. public String getName() {
    18. return name; // => return this.name
    19. // 由于该方法中 没有形参name,所以这里的name可以不加this,这里的name 指的就是成员变量的name
    20. }
    21. public void setName(String name) {
    22. this.name = name;
    23. // name=name 方法的形参name与成员变量参数name的名称 相同 不带this的话 第一个name指的就是形参(毫无意义,=> String naem="";name=name)
    24. // name=n 方法的形参 n 与成员变量参数 name 不相同 不带this的话 name指的就是成员变量(=> this.name=n)
    25. }
    26. public int getAge() {
    27. return age;
    28. }
    29. public void setAge(int age) {
    30. if (age < 0 || age > 120) {
    31. System.out.println("年龄不符...");
    32. return;
    33. }
    34. this.age = age; //this.age(成员变量age)=age(局部变量age)
    35. }
    36. public void work2() {
    37. // public void work2(int i){
    38. // 在方法中传递的参数(形参)也属于该方法里面的局部变量
    39. Student s = new Student(); // 单独的一个线程GC线程 在堆内存中 不可用的对象
    40. // new Student存放在堆内存中,s存放在栈空间中,直接引用到堆内存地址
    41. /**
    42. * 局部变量int i/age 在什么时候被销毁呢?work2方法执行结束之后
    43. * GC 垃圾回收
    44. * Student s ------引用到堆内存 new Studnet对象的内存地址
    45. */
    46. int i = 20;
    47. int age = 30;
    48. // 局部变量 变量名称 在同一个方法中 不允许 存在 多个相同的变量名称
    49. int z;
    50. // System.out.println(z); //局部变量 使用前 必须 先赋值
    51. System.out.println(this.age); // 成员变量 有默认初始值
    52. this.age = age; //在work2方法中 将局部变量age 赋值给 成员变量的age(在方法内调用成员变量使用this)
    53. }
    54. }

    StudentDemo.java如下:

    1. package com.面向对象;
    2. public class StudentDemo {
    3. public static void main(String[] args) {
    4. Student mayiktStudent = new Student(); // new Student()存放堆内存,mayiktStudent存放在栈内存,直接引用到堆内存地址
    5. System.out.println(mayiktStudent);
    6. mayiktStudent.setName("mayikt");
    7. // mayiktStudent.age = 21;
    8. mayiktStudent.setAge(21);
    9. System.out.println(mayiktStudent.getName() + "-" + mayiktStudent.getAge());
    10. mayiktStudent.work();
    11. // Student xiaojunStudent = new Student();
    12. Student xiaojunStudent = mayiktStudent; //将mayiktStudent的堆内存地址复制给xiaojunStudent
    13. System.out.println(xiaojunStudent); // 可以看到这个内存地址与mayiktStudent的内存地址一样
    14. xiaojunStudent.setName("xiaojun");
    15. xiaojunStudent.setAge(24);
    16. System.out.println(mayiktStudent.getName() + "-" + mayiktStudent.getAge()); // 现在两个对象使用的是一个内存地址,
    17. System.out.println(xiaojunStudent.getName() + "-" + xiaojunStudent.getAge()); //所以两个对象的属性值一样
    18. xiaojunStudent.work();
    19. }
    20. }

    下一篇文章:构造方法

  • 相关阅读:
    【Dotnet 工具箱】推荐一个使用 C# 开发的轻量级压测工具
    MSYS2下搭建Qt开发环境
    python 将一个文件中的空格替换成逗号 写入新文件
    【MAPBOX基础功能】23、mapbox通过marker的方式绘制波纹点位
    边缘人工智能的模型压缩技术
    SecureCRT 9.4.2最新终端SSH工具
    对个人来说,最好的记账方法是什么?
    Java2EE基础练习及面试题_chapter05面向对象(中_03)
    Python基础语法(五)—— 文件基本操作(打开、写入、关闭、查找)
    一些Python高性能使用技巧,让你直接起飞
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133440765