先看下面TestModel:

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.DualHashBidiMap; public class TestModel {
BidiMap bidiMap = new DualHashBidiMap(); BidiMap getBidiMap() {
bidiMap.put("testkey","testvalue");
return bidiMap;
}
}

运行下面测试代码,你猜结果会是什么?

    @Test
public void test() {
TestModel testModel = new TestModel();
System.out.println(testModel.bidiMap.size());
testModel.getBidiMap();
System.out.println(testModel.getBidiMap().getKey("testvalue"));
}

结果是:

0
testkey

结论:

(1)一个类的属性和方法,在不加访问修饰符的情况下,可访问性默认可不是private哦!    所以,在定义类成员时,注意使用修饰符来限定可访问性。  按照编程规范,将成员变量定义成private,即限定为私有字段,然后通过get/set方法将其暴露出去。

(2)从上面案例可以看出来,直接访问TestModel的bidiMap时,与getBidiMap()无关,jvm并不会执行这个get方法。

(3)诸如上面的TestModel,定义的就不好,可读性差,容易给人造成误解。bidiMap和getBidiMap()都能被外界访问,那么别人在使用TestModel时就会模棱两可。

(4)补充(1):默认可访问性既然不是private,那是什么?——————是protected。怎么理解这个protected呢?首先是可以在派生类是可见的,其次呢,是在当前package下也是可见的。上面的test方法,就要求与TestModel在同一个package下。否则,编译器会编译不通过,会提示错误:'bidiMap' is not public in 'package1.TestModel'. Cannot be accessed from outside package.

java类成员的默认可访问性是什么?你猜的更多相关文章

  1. 【转】Java类成员变量默认初始化规则

    一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: -------------------------------------------------------------- ...

  2. Delphi 类成员的默认访问权限(用RTTI检测)

    类的成员,如果没有private.public等显示什么,直接在class下面,没有写访问权限的限定符,这种成员是不是默认的访问权限啊?还是publish的访问权限啊? --------------- ...

  3. Java 类成员的初始化顺序

    Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究.   1  无继承情况下的Jav ...

  4. Java类是如何默认继承Object的

    前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写extends Object,它是怎么默认继承Object的呢? 那么今天我们就来看看像Java这种依赖于虚 ...

  5. Java类是如何默认继承Object的?

    原:https://juejin.im/post/5ca1e8ade51d454e6a300048 前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写exte ...

  6. Java类成员访问控制权限

    类成员访问控制权限 在JAVA中有四种访问控制权限,分别为:private, default, protected, public 1.Private 如果一个成员方法或变量名前使用了private, ...

  7. Java类成员访问级别

    类可以是public或default(或包级别).在本教程中主要介绍 public,private,protected 这几个访问级别修辞符的使用.类成员的访问级别确定程序的哪个区域可以访问它. 以下 ...

  8. Java类成员(成员变量和方法)的覆盖与隐藏归纳

    以前就知道重写override和重载overload的区别,平时也是逮着用就是了,Eclipse报错再说. 最近看一本书里面出现了重写.替换.覆盖.置换.隐藏.重载,简直乱得不行,归纳整理一下. 从全 ...

  9. C#的默认可访问性级别

    1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型.2.在一个类里面,属性和方法默认是private的,可以显示的定义为publ ...

随机推荐

  1. 用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)

    public static void main(String[] args) { /** * 冒泡排序 * 思路:每个轮次都让第一个数和其后所有的数进行轮比较,如果这轮的第一个数大则和其下一个数交换位 ...

  2. 【解决】image ... could not be accessed on a registry to record its digest.

    [问题]image jmdiservice:1206 could not be accessed on a registry to record its digest. Each node will ...

  3. matlab安装出现“无法访问所在网络位置”的正确解决办法

    今天安装matlab时出现了如下错误:无法访问您试图使用的功能所在的网络位置,单击"确认"重试或者在下面输入包含"vcredist.msc"的文件夹路径. (由 ...

  4. display:none和visibility:hidden两者的区别

    display与元素的隐藏 如果给一个元素设置了display: none,那么该元素以及它的所有后代元素都会隐藏,它是前端开发人员使用频率最高的一种隐藏方式.隐藏后的元素无法点击,无法使用屏幕阅读器 ...

  5. Go 修改map slice array元素值

    在“range”语句中生成的数据的值其实是集合元素的拷贝.它们不是原有元素的引用.这就意味着更新这些值将不会修改原来的数据.我们来直接看段示例: package main import "f ...

  6. django----session相关配置

    1. 数据库Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 2. 缓存Session SESSION_E ...

  7. return之为什么能够终止函数,代码演练

    ''' return 有终止函数的作用,下面通过执行到return x 以后, 就结束了程序的下一步执行,所以就没有往下面走,所以终端上也就只能 看到打印结果100,看不到打印呢 ''' def se ...

  8. 基于TCP协议之SSH

    #SSH客户端 import socket # 1. 创建符合TCp协议的手机 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # ...

  9. 2016/06/27 HDFS概述

    参考:http://www.cnblogs.com/linuxprobe/p/5594431.html 1.初识HDFS     HDFS作为一个分布式文件系统,具有高容错的特点,它可以部署在廉价的通 ...

  10. 清晰明了的javascript版动态规划

    算法是一种艺术,给人感觉很不好接近,但是一旦你和ta熟络了,你就能发现这门艺术的内在是多么美妙且多变. 对于前端来说,算法也许不是最重要的,在日常工作中,几乎很少用到.所以很多人也不是很感冒. 不过呢 ...