• Java中get()和set()作用


    一、前言

    在程序的设计中,我们普遍的定义一个private变量,然后为这个变量加上get() 、set()方法,那为何不直接定义一个public变量呢?

    很多人是这样回答的:

    1、关系到安全性的问题,貌似具有说服力,使用pubilc变量有何不安全呢?使用get()和set()安全在哪里呢?(假如你开发一个类给别人用,人家只要输入.get就能知道所有的属性。)

    2、有些人说封装性,但是变量本身就是封装在类里面的呀!

    其实大部分人都是人云亦云,说什么安全性和封装性,只要学java的人都知道这些名词。

    我的理解它的更多的作用是数据输入输出的控制。

    二、get()和set()作用

    (1)、安全性

    程者可以选择只读或者只写 或者读写都行。

    public class Circle {  
        private double radius;  
          
        private double pai = 3.14;  
      
        public double getPai() {  
            return pai;  
        }  
      
        public void setRadius(double radius) {  
            this.radius = radius;  
        }  
          
        /** 
         * 计算周长 
         */  
        public double getC() {  
            return 2*pai*radius;  
        }  
    }  
    

    定义了一个圆类,定义了属性半径和pai,半径只提供写的方法,但不提供读,而pai只提供读,但不能写,并提供了一个计算周长的方法getC。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。

    (2)、灵活性

    如在定义一个Person类时,设置一个属性name,当取名字的时候,不只是显示名字,代码如下:

    public class Person {  
        private String name;  
      
     
        public String getName() {  
            return "我的名字叫" + name;  
        }  
      
        public void setName(String name) {  
            this.name = name;  
        }  
    }  
    

    (3)、封装性

    (4)、健壮性

    其实java中对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作。提高代码的健壮性。

    简单小栗子:

    class Person
    {
    	private int age;
    	public void setAge(int a)
    	{
    		if(a>0 && a<130)
    		{
    			age = a;
    			speak();
    		}
    		else
    			System.out.println("feifa age");
    	}
    
    	public int getAge()
    	{
    		return age;
    	}
    	private void speak()
    	{
    		System.out.println("age="+age);
    	}
    }
    
    class PersonDemo
    {
    	public static void  main(String[] args)
    	{
    		Person p = new Person();
    
    		//p.age = -20;
    		p.setAge(-40);
    		//p.speak();
    	}
    }
    

    总结

    更多的用法只能在使用中多体会了。

  • 相关阅读:
    LC 综合 中级算法笔记
    LC 212. 单词搜索2
    [NLP] 2.2 文本正规化 (Text Normalization)
    本地秘钥复制到github,实现两者之间的交互
    Python 实例化对象
    C# 左补齐+ 生成一个星期的日期
    hello world
    迭代器模式、观察者模式
    代理模式、桥接模式、装饰器模式、适配器模式
    外观模式、组合模式、享元模式
  • 原文地址:https://www.cnblogs.com/xing-nb/p/14136882.html
Copyright © 2020-2023  润新知