Java内存图解、Private私有化

内存图解

虚拟机中的内存区域划分:所谓的内存区域划分也只是程序界给出的一种虚拟的概念

  1. 程序运行的区域,效率最高,方法的调用执行,基本数据类型定义(局部变量)

  2. 堆 用于存储引用数据类型的区域

  3. 方法区 所有类的方法都在方法区

  4. 计数器 当前线程所执行的字节码的行号指示器

  5. 本地方法区 执行native修饰的方法

 

 

 

public class Test{
    public static void main(String[] args){
        User user1 = new User();
        user1.setName("张飞");
        user1.setAge(12);
        User user2 = new User();
        user2.setName("赵云");
        user2.setAge(13);
        String name1 = user1.getName();
        int age2 = user2.getAge();
        System.out.println(name1+"--"+age2);
    }
}
class User{
    public String name;
    public Int age;
    public void setName(String newName){
        name = newName;
    }
    public String getName(){
        return name;
    }
    public void setAge(int newAge){
        age = newAge;
    }
    public int getAge(){
        return age;
    }
}

 

 

private私有化

调用者:通常说的是其它类(除了本身之外的类)

限制方案:缩小属性的可见范围,只能在本类中可见,其他类中不可见

思问题考:非静态的属性和方法只能通过对象进行调用,然后呢,通过对象去调用方法给属性进行赋值是赋值的一种方法,发现也可以通过对象直接调用属性来进行赋值操作,因此,就考虑两者之间有什么区别?

public class PrivateDemo{
   public static void main(String[] args){
       User user = new User();
       System.out.println(user.age);//0
       user.age = 13;
       System.out.println(user.age);//13
       user.setAge(11111);
       System.out.println(user.age);//11111
  }
}
class User{
   public int age;
   public String name;
   
   public void setAge(int newAge){
       age = newAge;
  }
   public int getAge(){
       return age;
  }
}

思考后的结果:如果是通过对象调用属性进行赋值,那么,调用者可以随意的去修改属性值,这种操作是不安全的,然后发现,使用方法的形式可以添加约束来限制调用者可赋值的一些规则。

public class PrivateDemo{
   public static void main(String[] args){
       User user = new User();
       System.out.println(user.age);//0
       user.age = 13;
       System.out.println(user.age);//13
       user.setAge(11111);
       System.out.println(user.age);//11111
  }
}
class User{
   public int age;
   public String name;
   
   public void setAge(int newAge){
       if(newAge>0 && newAge<130){
           age = newAge;
      }
  }
   public int getAge(){
       return age;
  }
}

需要处理的问题:如何能够避免让调用者去随意的修改属性值,其实就是如何能避免调用者查找到类中的具体属性,然后暴露出一些规则,让调用者可以进行正常的使用?

方案:将属性私有化,并提供带有规则的公共的方法以供调用者使用

public class PrivateDemo{
   public static void main(String[] args){
       User user = new User();
       System.out.println(user.age);//0
       user.age = 13;
       System.out.println(user.age);//13
       user.setAge(11111);
       System.out.println(user.age);//11111
  }
}
class User{
   private int age;
   private String name;
   
   public void setAge(int newAge){
       if(newAge>0 && newAge<130){
           age = newAge;
      }
  }
   public int getAge(){
       return age;
  }
}

 

posted @ 2020-06-04 22:15  梦想0高度  阅读(299)  评论(0编辑  收藏  举报