16.private 和 this 的总结

本文详细解析了Java中面向对象的三大特性:封装、继承和多态,强调了private权限修饰成员变量和get()、set()方法的作用。通过实例演示了如何正确使用this关键字解决局部变量与成员变量冲突,并讨论了getAge()方法默认调用this的原因。
摘要由CSDN通过智能技术生成

面向对象三大特征:封装、继承、多态

今后成员变量都用private修饰,get()、set()都用public修饰(若get()、set()也都用private修饰,整个类都访问不到了;成员变量被private修饰后,只能通过public修饰的get()、set()方法访问)

private:

应用范围:可以用来修饰成员变量和成员方法

特点:只能在本类中访问

类型:是一个权限修饰符

public class Student{------Student类

private int age ;

public void setAge(int a){

if(a>0 && a<100){

age = a ;

}else{

sout(输入有误)}}}

public int getAge(){

return age;}

public void study(){

sout(age);

}}

public class TestStudent{-----------学生测试类

Student s = new Student();

s.age = -16 ;------------------age被private私有化后,访问不到

s.setAge(  -16  ) ;  -----------调用方法,会进行判断后再赋值(有利于安全性)(需要自己加判断语句)

s.setAge(  16  )--------运行通过

s.study()------------运行输出 16

int  b  =  s.getAge();

sout(b) = 16

}

局部变量和成员变量的名称一样

java会使用就近原则

private int age;

public void setAge( int age ){----------黄色的标识符,都是最近的,因为在setAge的语句体内;

ageage; ---------------age自己给自己赋值,并没赋值给上面的成员变量age

}

xxx.setAge(30);

最终结果是0(int 的默认值),不是30

改进:ageage;   →      this.age  =   age  ;

this关键字:

含义:代表所在类对象“引用”(地址值)

作用:可调用本类的成员(变量、方法),解决局部变量和成员变量重名的问题

记住:方法被哪个对象调用,this就代表哪个对象

public class Student{------Student类

private String name ;

private int age ;

public void setName(String name){ ---------当setName方法没有被调用时,this不存在任何值(

符合方法是一个独立代码块,无调用就不执行),反之若被调用,则存在地址值,具体下面会讲解

sout(this);

this.name = name ;}

public String getName(){

return name;}

public void setAge(int a){

if(a>0 && a<100){

this.age = a ;

}else{

sout(输入有误)}}}

public int getAge(){

return age;}

public void study(){

sout(age);

}}

public class TestStudent{-----------学生测试类

Student s = new Student();

sout( s )  = 001;

s.setName("张三");-----解剖:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

相当于  001 .  setName("张三");

setName()的方法内容:{

sout(this)= 001;

this.name  =  name; ---------this为地址值 即001,等式左边的name为堆内存001的成员变量,等式右边的name为传入的参数“张三”。流程即顺着001地址,找到成员变量name,然后将默认值null替换成“张三”。}}

堆内存:(地址值:001)

String name
null  ------ 被“张三”替换

int age

0
成员方法地址(指向  “方法区:Student.class文件的study()”  的成员方法的地址值)

为什么说方法被哪个对象调用,this就代表哪个对象?

首先确定一点,每new一个对象都会产生一个新的地址值。

this.name  =  name; ---------this为地址值 即001,等式左边的name为堆内存001的成员变量,等式右边的name为传入的参数“张三”。流程即顺着001地址,找到成员变量name,然后将默认值null替换成“张三”。

001.成员变量name  =  “张三”

疑问:

public int getAge(){

return  age  ;----------------这里为什么系统会默认加return this . age;???

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值