private setter getter

一:
为什么要引入private关键字
先看这个例子

class Person{
    int age;
    void show(){
        System.out.print("你"+age+"岁了");
    }
}

新建一个Person对象,属性是age年龄

class Test03{
    public static void main(String[] args){
        Person p=new Person();
        System.out.println(p.age);
        p.age=-10;
        System.out.println(p.age);
    }
}

现在为题来了,假如我把这个年龄设置为**-10**,它也可以运行成功,这不符合实现的逻辑,一个人不可能年龄是**-10岁,那么该咋办呢?
此时我们的
private**关键字就来了,那么private关键字到底表示什么?
private关键字表示私用权限,该成员变量或成员函数只能够在类中被访问,外界不可访问

class Person{
    private int age;
    void show(){
        System.out.print("你"+age+"岁了");
    }
}

现在我们给成员变量加一个private,这时就修改不行,获取也不行了
在这里插入图片描述
那么我们不能直接进行修改,那我们就要间接的进行修改(是不是加上相应的对值的判断if-else),就相当于我给营业员100块钱,那么对于这个100块钱的真假,是由营业员自己判断,我就相当于是外界,营业员就是这个对象(我们要操作的对象)
那么这个对象就是用setter来对传入值进行判断
setter就是java当中的规范,修改器,主要负责修改成员变量,本身就是一个函数,命名方式一般为setX()

class Person{
    private int age;
    void show(){
        System.out.print("你"+age+"岁了");
    }
    //setter修改器
    public void setAge(int a){
        if(a<0||a>150){
           age=0;
        }
        else{
            age=a;
        }
    }
}

现在往里面传值就是setAge()了,修改代码是:

class Test03{
    public static void main(String[] args){
        Person p=new Person();
        System.out.println(p.age);
       // p.age=-10;
       //那么我们这里就应该变下
       p.setAge(10);//要用setter来修改
        System.out.println(p.age);
    }
}

但是还会依旧会报上面的错误
那是为啥呢?
因为我们进行了间接的修改,所以获取的话,也要间接的进行获取
间接的进行获取就要用到getter()了

***getter(主要返回我们的成员变量)***主要负责访问我们的成员变量

class Person{
    private int age;
    void show(){
        System.out.print("你"+age+"岁了");
    }
    //setter修改器
    public void setAge(int a){
        if(a<0||a>150){
           age=0;
        }
        else{
            age=a;
        }
    }
    public int getAge(){
        return age;
    }
}

所以我们用setter修改,就得用getter()进行接收

class Test03{
    public static void main(String[] args){
        Person p=new Person();
        //System.out.println(p.age);
       // p.age=-10;
       //那么我们这里就应该变下
       p.setAge(10);//要用setter来修改
        System.out.println(p.getAge());
    }
}

所以呢,建议在今后的代码中,成员变量一律私有,然后再去设置修改器和访问器
现在我们再写一个例子:

class Point{
    //属性
  private  double x;
   private double y;
   public void setX(double x){
       if(x>12){
        this.x=x;//这里的this指针主要是为了区分成员变量和局部变量
       }
       else{
           Point p=new Point();
       }
        
   }
   public void setY(double y){
    this.y=y;
}
public double getX(){
    return this.x;
}
public double getY(){
    return this.y;
}
    //行为
    public  double getDistance(Point other){
        return Math.hypot(x-other.x, y-other.y);
    }
}
class Test01{
   public static void main(String[] args){
       Point p1=new Point();
       Point p2=new Point();
       p1.setX(11);
       p1.setY(25);
       p2.setX(12);
       p2.setY(23);
       System.out.println(p1.getDistance(p2));//求p1与p2之间的距离
        System.out.println(p1.getX());
   }
}

局部变量

public void setAge(int age){//setAge()里面的age全是局部变量
        if(age<0||age>150){
           age=0;
        }
        else{
            age=age;
        }
    }

全局变量 加了this之后才是成员变量

public void setAge(int age){
        if(age<0||age>150){
           this.age=0;//this.age是成员变量
        }
        else{
            this.age=age;//this.age是成员变量
        }
    }
发布了52 篇原创文章 · 获赞 0 · 访问量 1200

猜你喜欢

转载自blog.csdn.net/qq_37244548/article/details/104533523