哈工大软件构造-对于修饰符的理解

哈工大软件构造-对于修饰符的理解


前言

本文主要针对于修饰符private与static在应用中的理解


一、公有访问修饰符-public

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。

如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

二、私有访问修饰符-private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。

声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

public class Person {
    public String Name;

    Person(String name)
    {
        this.Name=name;
    }

    public String getName(){
        return this.Name;
    }
}
public class Graph {
    public static void main(String[] args) {
        Person ross=new Person("Ross");

        ross.Name="Kitty";
        System.out.println("直接访问:"+ross.Name);
        System.out.println("getter访问"+ross.getName());
    }
}

输出结果:
直接访问:Kitty
getter访问Kitty

如图,定义了一个Person类,将成员变量Name设为public时,其他类(Graph)同样可以直接访问并且修改该成员变量,这样做通常来说是错误的,会造成一些意想不到的bug。

正确写法:应该将Perosn的Name成员改为private修饰
那么如图,在Graph类中以下两行会出现编译错误,代表除Person以外的其他类均不能访问或者修改private修饰的成员变量,仅仅能通过getter实现访问在这里插入图片描述

二、static

1.静态变量:

static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
代码如下(示例):

public class Person {
    private String Name;//人名
    private static String Site="Harbin";//人们所在地点
    Person(String name)
    {
        this.Name=name;
    }

    public static void main(String[] args) {
        Person ross = new Person("Ross");
        Person bob = new Person("Bob");

        System.out.println(Person.Site);
        System.out.println("Ross所在位置:"+ross.Site);
        System.out.println("Bob所在位置:"+bob.Site);

        bob.Site="Beijing";

        System.out.println("Ross所在位置:"+ross.Site);
        System.out.println("Bob所在位置:"+bob.Site);
    }
}

输出结果如下:
Harbin
Ross所在位置:Harbin
Bob所在位置:Harbin
Ross所在位置:Beijing
Bob所在位置:Beijing

由此可见,静态成员变量Site可以直接通过类进行访问而非实例。同样,静态成员变量Site被所有实例化的对象所共同占有(共享)。

2.静态方法:

static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
代码如下(示例):

public class Person {
    private String Name;//人名
    private static String Site="Harbin";//人们所在地点
    Person(String name)
    {
        this.Name=name;
    }

    public static String getSite(){
       //System.out.println(this.Name);该行出现编译错误,因为静态方法无法访问非静态变量
        return Site;
    }
    public static void main(String[] args) {
        Person ross = new Person("Ross");
        Person bob = new Person("Bob");

        System.out.println(Person.getSite());
        System.out.println("Ross所在位置:"+ross.getSite());
        System.out.println("Bob所在位置:"+bob.getSite());

    }
}

输出结果为:
Harbin
Ross所在位置:Harbin
Bob所在位置:Harbin

由此可见:静态方法不能访问非静态成员变量。
静态方法可以被非实例化类直接调用,也能被实例化对象调用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值