一:
为什么要引入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是成员变量
}
}