首页
学习
活动
专区
圈层
工具
发布

关于 java 中的 set,get方法,而为什么不推荐直接使用public

set,get....举一个简单的例子,如果只是简单的赋值操作,直接public 和 set get并无两样,但是如果里面有一些逻辑,比如限制数据的大小,这样直接Public 就没办法控制了。...这里引入其中的一句话: 在任何相互关系中,具有关系所涉及的各方都遵守的边界是十分重要的事情,当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用...如果所有的类成员对任何人都是可用的,那么客户端程序员就可以对类做任何事情,而不受约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程的封闭性与安全性,private 修饰的set get方法将方法封闭在了一个特定类中,其他类就无法对其变量进行方法,这样就提高了数据的安全性

2.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java工程师需要掌握的技能_java软件工程师需要学什么

    ConcurrentHashMap的问题在面试中问得特别多 ConcurrentHashMap与HashTable的区别主要是锁的粒度不同,HashTable当写数据时,锁住整个Hash表,而ConcurrentHashMap...表,提高了性能 每个segment则是一个传统意义上的hashtable (2)ConcurrentHashMap的读是否要加锁,为什么 答:读大部分情况下不加锁。...当在get的时候,经过Hash,找到Hash表中的段(桶),再找到key在该段对应的index值,后会进行遍历数据,详见代码readValueUnderLock(): 在判断存在hash值的节点,且...= null) return v; return readValueUnderLock(e); // recheck } e = e.next; } } return null...; } V readValueUnderLock(HashEntry e) { lock(); try { return e.value; } finally { unlock

    57210

    详解ConcurrentHashMap原理

    2.5.3 读取实现 get(Object key) 与put操作类似,当我们从ConcurrentHashMap中查询一个指定Key的键值对时,首先会定位其应该存在的段,然后查询请求委托给这个段进行处理...(hash).get(key, hash); } 我们紧接着研读Segment中get操作的源码: V get(Object key, int hash) { if...并且,在ConcurrentHashMap中,所有不加锁读方法在进入读方法时,首先都会去读这个count变量。...比如我们在上一节提到的get方法: V get(Object key, int hash) { if (count !...和clear)在对链表做结构性修改之后,在退出写方法前都会去写这个count变量;所有未加锁的读操作(get、contains和containsKey)在读方法中,都会首先去读取这个count变量。

    94310

    http中的get和post方法的区别

    http中的get和post方法的区别 一、https和http的区别 1、简要描述 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密...为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密...3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。   ...4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。...2、get和post方法区别 get:get方法的参数在URL中,可以被看到,并且可以缓存 post:post方法数据在请求体内,具有一定的隐蔽性,不可以缓存 具体的区别,如下图所示,图源来自

    1.2K10

    浅谈web开发中的Get和Post方法get和post的区别

    在http协议中,实际上有八个http方法。但在实际开发中,绝大多数情况我们只会用到两个方法,就是get和post。所以我们来稍微谈谈两种方法的区别,以及何时应该选取何种方法。...get和post的区别 post有一个体! 这个是关键。 ? Paste_Image.png ?...Paste_Image.png get和post都能发送参数,但是利用get的话,对参数数据量有限制,因为参数只能是放在请求行的内容中。而post由于在体中,则没有数据量的限制。...---- ** 所以总结一下,第一方面的区别数据量的大小限制 ** ---- 但不仅仅是数据的大小。 使用get时,参数数据会显示在浏览器的输出栏,这就引发了安全问题。...** get是幂等的,而post不是幂等的**

    2.4K20

    ConcurrentHashMap和HashTable的区别

    ConcurrentHashMap锁的方式是稍微细粒度的。 ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶。...在segment的get函数中,通过getFirst函数得到第一个值,然后就是通过这个值的next,一路找到想要的那个对象。如果不空,则返回。如果为空,则可能是其他线程正在修改节点。...而之前的 get操作都未进行锁定,根据bernstein条件,读后写或写后读都会引起数据的不一致,所以这里要对这个e重新上锁再读一遍,以保证得到的是正确值。...readValueUnderLock中就是用了lock()进行加锁。 put操作已开始就锁住了整个segment。这是因为修改操作时不能并发的。 ?...至于entry为什么要设置为不变性,这跟不变性的访问不需要同步从而节省时间有关。

    91060

    为什么要禁止除GET和POST之外的HTTP方法?

    因此,有必要说明一下,为什么要禁止除GET和POST之外的HTTP方法。 换句话说,对于这些HTTP不安全方法,到底有多不安全呢?...其中,GET方法主要用来获取服务器上的资源,而POST方法是用来向服务器特定URL的资源提交数据。...而其它方法出于安全考虑被禁用,所以在实际应用中,九成以上的服务器都不会响应其它方法,并抛出404或405错误提示。...写到这里,也许大家都明白了,为什么要禁止除GET和POST外的HTTP方法,一是因为GET、POST已能满足功能需求,二是因为不禁止的话威胁影响大。...自纠自查方面,可以使用OPTIONS方法遍历服务器使用的HTTP方法。但要注意的是,不同目录中激活的方法可能各不相同。而且许多时候,虽然反馈某些方法有效,但实际上它们并不能使用。

    2.5K60

    http请求中get和post方法的区别

    HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。...不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。...二、使用时最直观的区别 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。...get请求: 1.png post请求: 2.png 三、为什么get比post更快 1.post请求包含更多的请求头 因为post需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段...四、面试是一般怎么回答get和post的区别 (1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) (2)post发送的数据更大(get有url长度限制)

    12.4K32

    get的过程中另一个线程恰好新增entry

    return null; }   ConcurrentHashMap完全允许多个读操作并发进行,读操作并不需要加锁。...在代码清单“HashEntry 类的定义”中我们可以看到,HashEntry 中的 key,hash,next 都声明为 final 型。...下面分析在get的时候的线程安全性 get的过程中另一个线程恰好新增entry 图片.png   HashEntry 类的 value 域被声明为 volatile 型,Java 的内存模型可以保证...在 ConcurrentHashMap 中,不允许用 null 作为键和值,当读线程读到某个 HashEntry 的 value 域的值为 null 时,便知道发生了指令重排序现象(注意:volatile...如果get的过程中另一个线程修改了一个entry的value   由于对 volatile 变量的可见性,写线程对链表的非结构性修改能够被后续不加锁的读线程“看到”。

    37230

    HTTP协议中的GET、POST请求方法的区别

    HTTP 请求方法有:HEAD、PUT、DELETE、OPTIONS、CONNECT 两种最常被用到的HTTP方法是:GET 和 POST。 本篇文章讲讲GET和POST两种请求方法的区别。...在浏览器上表现的区别 GET GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求参数在URL中的是可见的 GET 请求有长度限制 POST POST 请求不会被缓存...简单的就不再说了,这里再说说请求参数的可见性和容易让人产生误区的数据长度限制 请求参数可见性 在GET请求中,查询字符串是在 GET 请求的 URL 中发送的 index.php?...因为post请求是将参数放在HTTP主体中,所以在常规浏览器地址栏上是看不到参数的,这就是请求参数在URL中的可见性的不同。 两种请求方法请求头和请求体的对比 可以看到参数存放位置不一样 ?...POST 请求参数不能 GET 请求对数据长度有要求,POST 请求没有(这里指的是浏览器对url长度的要求) 在HTTP协议中,对于GET、POST的数据长度是没有限制的 在WEB服务器中,可以通过配置参数来决定要服务的

    7.1K10

    Java集合: ConcurrentHashMap原理分析

    如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。...get操作 ConcurrentHashMap的get操作是直接委托给Segment的get方法,直接看Segment的get方法: V get(Object key, int hash) {...除非读到的值是空的才会加锁重读,我们知道HashTable容器的get方法是需要加锁的,那么ConcurrentHashMap的get操作是如何做到不加锁的呢?...这使得getFirst(hash)可能返回过时的头结点,例如,当执行get方法时,刚执行完getFirst(hash)之后,另一个线程执行了删除操作并更新头结点,这就导致get方法中返回的头结点不是最新的...V readValueUnderLock(HashEntry e) { lock(); try { return e.value;

    70440

    面试官再问currentHashMap,就将这篇文章甩给他

    如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。...get操作 ConcurrentHashMap的get操作是直接委托给Segment的get方法,直接看Segment的get方法: V get(Object key, int hash) {...除非读到的值是空的才会加锁重读,我们知道HashTable容器的get方法是需要加锁的,那么ConcurrentHashMap的get操作是如何做到不加锁的呢?...这使得getFirst(hash)可能返回过时的头结点,例如,当执行get方法时,刚执行完getFirst(hash)之后,另一个线程执行了删除操作并更新头结点,这就导致get方法中返回的头结点不是最新的...V readValueUnderLock(HashEntry e) { lock(); try { return e.value;

    44310

    PHP中 对象自动调用的方法:__set()、__get()、__tostring()

    但是,对属性的读取和赋值操作是非常频繁的,因此在 PHP5中,预定义了两个函数 “__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法 “__unset...我们为每个属性做了设置和获取的方法,在PHP5中给我们提供了专门为属性设置值和获 取值的方法,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面去的,...= $value; } __get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入 你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法...实际上,PHP的toString魔术方法的设计原型来源于 Java。Java中也有这么一个方法,而且在Java中,这个方法被大量使用,对于调试程序比较方便。...为什么直接echo一个对象就会报语法错误,而如果这个对象实现toString方法后就可以直接输出呢?

    3.4K40

    JAVA面试50讲之7:ConcurrentHashMap如何高效实现线程安全

    如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。...get操作 ConcurrentHashMap的get操作是直接委托给Segment的get方法,直接看Segment的get方法: V get(Object key, int hash) {...除非读到的值是空的才会加锁重读,我们知道HashTable容器的get方法是需要加锁的,那么ConcurrentHashMap的get操作是如何做到不加锁的呢?...这使得getFirst(hash)可能返回过时的头结点,例如,当执行get方法时,刚执行完getFirst(hash)之后,另一个线程执行了删除操作并更新头结点,这就导致get方法中返回的头结点不是最新的...V readValueUnderLock(HashEntry e) { lock(); try { return e.value;

    1.2K20
    领券