首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Effective Java(第三版)——条目十六:在公共类中使用访问方法不是公共属性

坚持面向对象的程序员觉得这样的类是厌恶的,应该被具有私有属性和公共访问方法的类(getter)所取代,而对于可变类来说,它们应该被替换为setter设值方法: // Encapsulation of data...,则提供访问方法来保留更改类内部表示的灵活性。...在类定义和使用它的客户端代码中,这种方法访问方法产生更少的视觉混乱。 虽然客户端代码绑定到类的内部表示,但是这些代码仅限于包含该类的包。...这些类别应该被视为警示性的示例,不是模仿的例子。 如条目 67所述,暴露Dimension的内部结构的决定是一个严重的性能问题,这个问题在今天仍然存在。...虽然公共类直接暴露属性并不是一个好主意,但是如果属性是不可变的,那么危害就不那么大了。

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

2020最新总结大厂Java高频面试题(含答案解析)

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。 15. java 中 IO 流分为几种? 按功能来分:输入流(input)、输出流(output)。...hashTable同步的,HashMap是非同步的,效率上逼hashTable要高。 hashMap允许空键值,hashTable不允许。 22....最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。...使用下标访问一个元素,ArrayList 的时间复杂度是 O(1), LinkedList 是 O(n)。 26. 如何实现数组和 List 之间的转换?...Vector是同步的,ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。

2.2K20

Java基础常见面试题

如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。...如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 String s = new...,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可...最大的不同是,Hashtable的方法是Synchronize的,HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,HashMap 就必须为之提供外同步。...答∶ 方向划分:输入输出流。 内容分为:字节流,字符流,对象流 访问修饰符有哪些?分别的作用? 答∶ public 能被所有的类(接口、成员)访问

52541

【面试虐菜】—— JAVA面试题(1)

StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3. ...,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized思路方法(线程安全) ,通常性能上较ArrayList差,LinkedList使用双向链表实现存储...最大的区别是,Hashtable的思路方法是Synchronize的,HashMap不是,在多个线程访问Hashtable时,不需要自己为它的思路方法实现同步,HashMap 就必须为的提供外同步。...如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法不需要重新编写相同的方法。...,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值.

76490

性能工具之Jmeter小白入门系列之四

,默认勾选; Script:要运行的脚本; User Parameters 用户参数,用于做几组参数给线程组的各个线程使用,如果线程数多于用户参数组数,则多出来的线程则从第一组用户参数开始依次调用参数组...,根据需要输入,注意结尾不要加”;”; Parameter values:参数名称,如果Query的语句中有”?”...; Result variable name:随意设定一个名称,则此名称会被作为一个参数并对应Query出来的内容;可以使用参数调用的方法来获取此设置的名称对应的值; Query timeout(s):...:其他地方引用时的变量名称,我这里写的phone,可自定义设置,引用方法:${引用名称} Regular Expression 正则表达式:数据提取器,()括号里为你要获取的的值。"...括号里\d+为正则表达式,用来匹配所需要获取的数据,何谓正则表达式文章末尾会附上说明 Template 模板:用于从找到的匹配项创建字符串的模板。

2.4K50

Java集合框架综述,这篇让你吃透!

(程序通过new关键字来创建字符串对象),当使用==运算符判断返回false,使用equals方法比较返回true,所以不能添加到Set集合中,最后只能输出一个元素。...HashSet的实现方式大致如下,通过一个HashMap存储元素,元素是存放在HashMap的Key中,Value统一使用一个Object对象。...当我们构造TreeSet时,若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。...默认是按插入顺序排序,如果指定按访问顺序排序,那么调用get方法后,会将这次访问的元素移至链表尾部,不断访问可以形成按访问顺序排序的链表。 注意,此实现不是同步的。...(2)同步性:HashTable是线程安全的,也就是说是同步的,HashMap是线程序不安全的,不是同步的 。

84130

java面试题-javaSE基础

靠的是父类或接口定义的引用变量可以指向子类具体实现类的实例对象,程序调用的方法运行期间才能动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法不是引用变量的类型中定义的方法...java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常。...StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对象;使用场景:对字符串经常改变情况下,主要方法:append(),insert...如果不是我想要线程安全的集合怎么办? ArrayList、HashSet、HashMap不是安全的;在集合中 Vector 和 HashTable 倒是线程安全的。...HashTable 是线程安全的一个集合,不允许 null 值作为一个 key 值或者 Value 值 HashTable 是 sychronize,多个线程访问时不需要自己为它的方法实现同步, HashMap

12910

张嘴,深入浅出一下Java的HashMap

需要切记的一点是——HashMap不是线程安全的数据结构,所以不要在多线程场景中应用它。...通常情况下,我们使用Map的主要目的是用来放入(put)、访问(get)或者删除(remove),而对顺序没有特别的要求——HashMap在这种情况下就是最好的选择。...通常情况下,我们习惯使用String字符串来作为Map的键,请看以下代码: Map map = new HashMap(); String[] cmower = {...既然HashMap在put的时候使用键的散列值作为实际的键,那么在根据键获取值的时候,自然也要先对get(key)方法的key进行hash运算,请看以下代码: public V get(Object key...但,当我强迫自己每周要输出一篇Java方面的技术文章后,我对HashMap真的“深入浅出”了——散列值(哈希值)、散列冲突(哈希冲突)、初始容量和负载因子,竟然能站在我面前一直笑——原先,我见到这些关键字就逃之夭夭了

56830

Java基础面试题-可能读了个假书?

集合 ArrayList和LinkedList HashMap和HashTable HashMap底层实现 comparable和comparator 小结 Java基础 字符型常量和字符串常量 字符常量是单引号引起的一个字符...字符常量相当于一个整型值,可以参加表达式运算,字符串常量代表一个地址值。 字符常量只占2字节,字符串常量占若干字节。 重载和重写的区别 重载:是同样的一个方法能够根据输入数据的不同,做出不同处理。...重载是同一个类中多个同名方法根据不同的传参执行不同的逻辑处理。 重写:是当子类继承自父类的相同方法输入数据一样,但是要做出的和父类不一样的响应时,就要重写父类方法。...成员变量可以被static、private、public等修饰符修饰,局部变量是不能被访问修饰符锁修饰的,但是他们都可以被final关键字修饰。...所谓扰动函数指的就是HashMap的hash方法使用hash方法之后可以减少碰撞。

99450

《面试季》经典面试题(一)

问题一: 简单介绍下你自己   解题思路: 要回答好这个问题,首先要了解面试官询问的意图,不是上来就像记流水账一样回答,这样给面试官的印象分就减少了。   ...HashMap不是线程安全的,Hashtable是线程安全的。...遍历方式不同,HashMap使用Entry数组方式进行遍历,Hashtable使用Enumeration方式遍历,JDK1.8后使用fail-fast方式。...创建大小时如果有给定大小,则HashMap使用直接给定的值,Hashtable则会将其扩容为2的幂次方。...重写要遵循"两同两大一小原则","两同"表示:方法名称、参数类型(包括顺序)与父类方法一致,"两大"表示:子类返回值类型、子类抛出的异常类型要小于等于父类的返回值类型和异常,“一大”表示:子类的访问权限要大于等于父类抛出的异常

20011

22道Java面试题,看看你会了多少?

(如果学过双向链表的同学会更好的理解它的源代码),此链表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序 1.按插入顺序的链表:在LinkedHashMap调用get方法后,输出的顺序和输入时的相同...,这就是按插入顺序的链表,默认是按插入顺序排序 2.按访问顺序的链表:在LinkedHashMap调用get方法后,会将这次访问的元素移至链表尾部,不断访问可以形成按访问顺序排序的链表。...> String String最慢的原因: String为字符串常量,StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量...6.基于cookie 进行session共享(唯一值token) 20)git,svn区别 Git是分布式的,Svn不是分布的 Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以...ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。

48910

Rust常见集合

("{}-{}-{}", s1, s2, s3); 向一个字符串末尾追加字符,可以使用 push_str 方法。push_str 方法采用字符串 slice,因为并不需要获取参数的所有权。...let mut s = String::from("foo"); s.push_str("bar"); 3.3 索引字符串 Rust 的字符串不支持索引访问字符串字符。...这是由于 String 采用 UTF-8 编码,不同语言字符占用的字节数不同,因此 Rust 无法在常数时间内判断用户期待返回的字符占用的字节数及在字符串中对应的位置。...哈希表可以用于需要任何类型作为键来寻找数据的情况,不是像数组那样通过索引。 类似于向量,哈希表也是同质的:所有的键必须是相同类型,值也必须都是相同类型。...4.2 访问哈希表 可以通过 get 方法并提供对应的键来从哈希表中获取值: use std::collections::HashMap; let mut scores = HashMap::new(

78910

数组刷题套路分析

说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。...反转字符串中的元音字母 编写一个函数,以字符串作为输入,反转该字符串中的元音字母。...反转字符串 编写一个函数,其作用是将输入字符串反转过来。输入字符串以字符数组 char[] 的形式给出。...中,那么就要恢复原来的值,因为左边的值必定被右边right访问过,right访问的时候只要在hashMap中,就会减去1,所以这里要恢复,也就是+1,同是如果此时恢复过后的值>0就需要,让t_len+...第3道题则是先确定一个包含所有字符串t的窗口,不断压缩这个最大窗口,然后再继续移动左右指针。

56320

5. Mybatis获取参数值的两种方式

MyBatis 获取参数值的两种方式:​${} 和 #{}​ ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接 sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引...#{}​ 使用的是预编译语句,用于将输入参数的值与 SQL 语句分开处理,防止 SQL 注入等安全问题,同时也有效的提高了 SQL 语句的查询性能。...单个字面量类型的参数 ‍ 若 mapper 接口中的方法参数为单个的字面量类型 此时可以使用 {}和#{}以任意的名称获取参数的值,注意 {}需要手动加单引号 ​ ​ ‍ 2.......为键,以参数为值;因此只需要通过${}和#{}访问 map 集合的键就可以获取相 对应的值,注意${}需要手动加单引号 ​ ​ ‍ 3. map 集合类型的参数 ‍ 若 mapper 接口中的方法需要的参数为多个时...实体类类型的参数 ‍ 若 mapper 接口中的方法参数为实体类对象时 , 此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值 ‍ 注意 : ${} 需要手动添加单引号 ‍ 根据属性名获取属性值​

22010

周末复习 Android & Java 面试题

当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过事件回调代码来处理XML文件,适合对XML的顺序访问;顾名思义,StAX把重点放在流上,实际上StAX与其他解析方式的本质区别就在于应用程序能够把...当一个字符串已经被创建并且该字符串在池中,该字符串的引用会立即返回给变量,不是重新创建一个字符串再将引用返回给变量。...如果字符串不是不可变的,那么改变一个引用(如: string2)的字符串将会导致另一个引用(如: string1)出现脏数据。...这种方法意味着不必每次使用时都重新计算一次哈希码——这样,效率会高很多。...如果 String 不是不可变的,网络连接、文件将会被改变——这将会导致一系列的安全威胁。操作的方法本以为连接上了一台机器,但实际上却不是

53720

JWT & SpringBoot & 授权

用户登录后,每个后续请求都将包括 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销小,并且能够轻松地跨不同的域使用。...声明是关于实体(通常为用户)和其他数据的语句。有三种类型的索赔:已登记、公共和私人索赔。 已注册声明:这些是一组预定义声明,不是强制性的,但建议提供一组有用的、可互操作的索赔。...其中一些是:iss(发行人)、exp(到期时间)、子(主题)、aud(访问者)和其他。请注意,声明名称只有三个字符,只要 JWT 是紧凑的。 公共声明:这些可以由使用JWT的人可以当即定义。...私人声明:这些是为在同意使用它们的各方之间共享信息创建的自定义声明,它们既不是已注册的,也不是公开声明。...(hashMap); /* JWT 常用方法 JWTUtils.getInfo(token).getHeader(); JWTUtils.getInfo(

1.3K10
领券