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

private

  1. 是一个权限修饰符
  2. 可以修饰成员变量和成员方法
  3. 被其修饰的成员只能在本类中被访问,可以保护成员不被其他类使用
  • 提供 “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();}
}

下一篇文章:构造方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最新版配置conda环境】新版pycharm导入新版anaconda环境

最近下载了新版pycharm和新版anaconda&#xff0c;并且在命令行创建了环境&#xff0c;想着在pycharm里面导入环境。结果现在的导入方式发生了变化。 之前是通过导入Python.exe进行的。 现在&#xff1a; 当我们点击进去之后&#xff0c;会发现找不到python.exe了。 具体什么…

JVM学习笔记

JVM学习笔记 复习之前学的内容&#xff0c;同时补充以下知识点&#xff1a;JVM的双亲委派机制、伊甸区与老年代相关知识&#xff1b; 双亲委派机制 双亲的含义应该就是AppClassLoader有&#xff1a;ExtClassLoader和BootstrapClassLoader“两个”父加载器。 首先介绍Java中…

Redis 集合类型(Set)和命令 (数据类型 四)

集合类型是一个无序、不重复的数据集合&#xff0c;它可以用于存储唯一的值&#xff0c;并提供了对集合进行交集、并集、差集等操作。 常用集合类型命令&#xff1a; 添加操作&#xff1a; sadd key member1 member2 …&#xff1a;向集合中添加一个或多个成员。 # 添加三个…

Stm32_标准库_4_TIM中断_PWM波形_呼吸灯

基本原理 PWM相关物理量的求法 呼吸灯代码 #include "stm32f10x.h" // Device header #include "Delay.h"TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructuer;//结构体 GPIO_InitTypeDef GPIO_InitStructur…

【Git】Git 原理和使用

Git 一、Git 本地仓库1. 本地仓库的创建2. 配置 Git3. 工作区、暂存区、版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退8. 撤销修改9. 删除文件 二、分支管理1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略8. bug 分支9. 强制…

TempleteMethod

TempleteMethod 动机 在软件构建过程中&#xff0c;对于某一项任务&#xff0c;它常常有稳定的整体操作结构&#xff0c;但各个子步骤却有很多改变的需求&#xff0c;或者由于固有的原因 &#xff08;比如框架与应用之间的关系&#xff09;而无法和任务的整体结构同时实现。如…

Armv8/Armv9 Cache知识大纲分享--思维导图

关键词&#xff1a;cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频&#xff0c;cache视频、mmu视频&#xff0c;armv8视频、armv9视频、FF-A视频、密码学视频、RME/CC…

Acwing 838. 堆排序

Acwing 838. 堆排序 题目描述思路讲解代码展示 题目描述 思路讲解 堆是一颗完全二叉树&#xff0c;除了最下面一层&#xff0c;其余是满的&#xff0c;最后一层从左到右排列 小根堆&#xff1a;每个点小于等于左右两堆&#xff0c;所以根节点就是最小值 大根堆&#xff1a;每个…

巧用前缀和

相关题目&#xff1a; 325. 和等于 k 的最长子数组长度 525. 连续数组 class Solution:"""325. 和等于 k 的最长子数组长度巧用前缀和数组&#xff0c;并优化浅醉和数组为单变量"""def findMaxLength(self, nums: List[int], k: int) -> i…

R语言实现随机生存森林(3)

常见问题解答 1、计算C指数 1-Error rate&#xff0c;或者 rsf.err <- get.cindex(yvar$Survival_months,yvar$OS,predictedrf.grow$predicted) 2、模型中predicted和predicted.oob区别 predicted和predicted.oob是两个不同的属性&#xff0c;它们分别表示模型的预测结果…

Google Earth Engine(GEE)案例——如何去除和过滤Landsat和sentinel等系列影像集合中的空影像(三种方法)

简介 本文的主要解决的问题是如何去除和过滤Landsat和sentinel等系列影像集合中的空影像?这个主要源于一下的问题: “从图像集中删除空图像”是什么意思?您的脚本将图像集合过滤到没有图像的日期,这会产生包含 0 个图像的图像集合:https: https://code.earthengine.goog…

Docker Tutorial

什么是Docker 为每个应用提供完全隔离的运行环境 Dockerfile&#xff0c; Image&#xff0c;Container Image&#xff1a; 相当于虚拟机的快照&#xff08;snapshot&#xff09;里面包含了我们需要部署的应用程序以及替它所关联的所有库。通过image&#xff0c;我们可以创建很…

美容店预约小程序搭建流程

随着科技的不断发展&#xff0c;小程序已经成为了人们生活中不可或缺的一部分。对于美容店来说&#xff0c;搭建一个预约小程序不仅可以提高工作效率&#xff0c;还可以增加客户数量、提高服务质量。那么&#xff0c;如何搭建一个美容店预约小程序呢&#xff1f;本文将为你详细…

git使用,一点点

查看自己有没有安装git git --version 如果没有安装请执行sudo yum install -y git来安装 git 指令 git log 查看日志 git pull 同步远端和本地仓库 这就是冲突的报错&#xff1a; 所以这个时候你要同步一下git pull

【项目实战】单数据源多数据库实现多租户

文章目录 前言多租户的四种实现方案单数据源多数据库实现思路代码实现 总结 前言 多租户&#xff08;Multi-Tenancy&#xff09;是一种软件架构设计模式&#xff0c;旨在使单个应用程序可以同时为多个租户&#xff08;如不同组织、用户或客户&#xff09;提供服务&#xff0c;…

CSS 相关

CSS 相关 CSS布局如何管理CSS 代码目录&#xff1f;分多个目录的话&#xff0c;会有命名冲突&#xff0c;那如何解决命名冲突&#xff1f; box-sizing:border-boximage的宽度的问题&#xff1a; CSS布局 单列布局&#xff1a;将一个元素作为布局容器。通常设置一个较小的宽度(最…

MATLAB中d2d函数用法

目录 语法 说明 示例 重新采样离散时间模型 重新采样已识别的离散时间模型 d2d函数的功能是重新采样离散时间模型。 语法 sys1 d2d(sys, Ts) sys1 d2d(sys, Ts, method) sys1 d2d(sys, Ts, opts) 说明 sys1 d2d(sys, Ts)将离散时间动态系统模型 sys 重新采样&#…

HTTP请求交互基础(基于GPT3.5,持续更新)

HTTP交互基础 目的HTTP定义详解HTTP协议&#xff08;规范&#xff09;1. 主要组成部分1.1 请求行&#xff08;Request Line&#xff09;&#xff1a;包含请求方法、请求URI&#xff08;Uniform Resource Identifier&#xff09;和HTTP协议版本。1.2 请求头部&#xff08;Reques…

Ubuntu中还换源 sudo apt-get update更新失败

sudo apt-get update更新失败 1 前提2 编辑3 换源 1 前提 浏览器可以访问百度 如下文章&#xff1a; VMware 中虚拟机没网 2 编辑 输入如下命令&#xff0c;进入换源文件&#xff1a; sudo gedit /etc/apt/sources.list 3 换源 中科大 deb http://mirrors.ustc.edu.cn/ub…

JAVA 异常分类及处理

1 概念 如果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&#xff0c;这个方法会立刻退出同时不返回任何值。另外&#xff0c;调用 这个方法的其他代码也无法继续执行&#xff0c;异常处理…