1.引用传递是java精髓,核心概念只有一点:一块堆内存空间(保存对象的属性和信息)可以同时被多个栈内存所共同指向,则每一个栈内存都可以修改同一块堆内存空间的属性值.
引用传递的核心只有一句话:“一块堆内存空间(保存对象的属性信息)可以被同时多个栈内存所共同指向,则每一个栈内存都可以修改同一块堆内存空间的属性值”.
1.1下面代码讲解
运行结果
首先实例化了一个person2对象,对对象name和age属性赋值,随后又声明了person3对象,这个对象指向person2对象的堆内存空间,所以person3和person2指向了同一个堆内存空间,这样person3对name属性的修改也一定影响到person2对象.
1.2.代码讲解
代码运行结果
本程序实例化了两个对象,分别为两个对象的属性赋值,而后将person1的堆内存传递给了person2,此时person2和person1将指向同一堆内存空间,当使用person2对象修改name属性的内容后,person1的内容也随之发生改变,
2.java封装性
下面代码讲解
加入了private关键字之后,发现Person类的外部将无法直接利用对象调用类中的属性,并且在编译就提示语法错误,在java开发中,如果要访问类的私有属性,需要按下形式定义操作方法.
setter(以"private String name"属性为列):public void setName(String n);
getter((以"private String name"属性为列)public void getName();
2.1代码讲解
在类属性中定义setter()、getter()操作方法目的是为了设置和取得属性的内容,也许某一个操作暂时不使用取得操作、但并不表示以后不会使用,所以必须全部提供,在以后定义类的时候,所有属性都要编写private封装,封装之后属性如果需要被外部操作,要编写setter()、getter()方法。
package lesson11;
class Person3{ //类名称首字母大写
private String name; //属性封装
private int age; //属性封装
void setName(String n){ //setter:设置name属性内容
name =n;
}
void setAge(int a){ //setter:设置age属性内容
if(a>0 && a<250){ //增加检查
age=a;
}
}
public String getName() { //getter:取得name属性内容
return name;
}
public int getAge() { //getter:取得age属性内容
return age;
}
public void tell(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestDeamo13 {
public static void main(String[] args) {
Person3 person=new Person3(); //声明并实例化对象
person.setName("芷若");
person.setAge(18);
person.tell();
}
}
运行结果