Java中有两种类型的迭代器:故障安全和故障快速.
这是什么意思,它们之间的区别是什么?
我想使用以下方法向多个收件人发送邮件:
message.addRecipient(Message.RecipientType.TO, String arg1);
Run Code Online (Sandbox Code Playgroud)
要么
message.setRecipients(Message.RecipientType.TO,String arg1);
Run Code Online (Sandbox Code Playgroud)
但令人困惑的是,在第二个争论中,如何传递多个地址,如:
message.addRecipient(Message.RecipientType.CC, "abc@abc.com,abc@def.com,ghi@abc.com");
Run Code Online (Sandbox Code Playgroud)
要么
message.addRecipient(Message.RecipientType.CC, "abc@abc.com;abc@def.com;ghi@abc.com");
Run Code Online (Sandbox Code Playgroud)
我也可以使用替代方法发送消息,但想知道上述方法的目的.如果我不能使用它(因为直到现在我还没有得到上述要求的任何答案)那么这个方法需要在邮件API中.
我试图理解Pattern.quote
使用以下代码:
String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545");
System.out.println("Pattern is : "+pattern);
Run Code Online (Sandbox Code Playgroud)
产生输出:
Pattern is : \Q1252343% 8 567 hdfg gf^$545\E
Run Code Online (Sandbox Code Playgroud)
什么是\Q
和\E
这里?文档说明说:
返回
String
指定的文字模式String
.此方法生成一个
String
可用于创建Pattern
与字符串匹配的字符s
,就好像它是文字模式一样.输入序列中的元字符或转义序列将没有特殊含义.
但是Pattern.quote
返回类型是String
而不是编译Pattern
对象.
为什么需要此方法以及一些用法示例?
三者之间有什么区别(标记为评论):
MultiThreadedHttpConnectionManager connManag = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams managParams = connManag.getParams();
managParams.setConnectionTimeout(connectiontimeout); // 1
managParams.setSoTimeout(sotimeout); //2
HttpMethodBase baseMethod = null;
try {
HttpClient client = new HttpClient(connManag);
client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3
baseMethod = new GetMethod(…);
int statusCode = client.executeMethod(…);
…
}
catch (ConnectTimeoutException cte ){
//Took too long to connect to remote host
}
catch (SocketTimeoutException ste){
//Remote host didn’t respond in time
}
catch (Exception se){
//Some other error occurred
}
finally {
if (baseMethod != null)
baseMethod.releaseConnection();
}
Run Code Online (Sandbox Code Playgroud)
1. setConnectionTimeout …
在阅读有关内存一致性错误的Java文档时.我找到了与两个创造事件相关的点 - 在关系之前:
当一个语句调用时Thread.start()
,与该语句有一个before-before关系的每个语句也与新线程执行的每个语句都有一个before-before关系.新线程可以看到导致创建新线程的代码的影响.
当一个线程终止并导致Thread.join()
另一个线程返回时,终止
线程执行的所有语句
与成功连接后的所有语句都有一个before-before关系.现在,执行连接的线程可以看到线程中代码的效果.
我无法理解他们的意思.如果有人用一个简单的例子解释它会很棒.
Java 8能够使用Reflection API获取方法参数名称.
如何获取这些方法参数名称?
据我所知,类文件不存储正式的参数名称.我如何使用反射获得这些?
在计算中,具体化意味着一种类型的显式表示 - 即运行时类型信息.
oracle教程说,
可重新类型是类型信息在运行时完全可用的类型.这包括基元,非泛型类型,原始类型和未绑定通配符的调用.
不可再生类型是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用.
如果类型是以下之一,则该类型是可恢复的:
- 一个原始类型(如
int
)//理解- 阿非参数化类或接口类型(例如
Number
,String
或Runnable
)//为什么- 一个参数化的类型,其中所有类型的参数是无界的通配符(例如
List<?>
,ArrayList<?>
或Map<?, ?>
)//为什么- 原始类型(如
List
,ArrayList
或Map
)//为什么- 阵列,其组件类型为reifiable(如
int[]
,Number[]
,List<?>[]
,List[]
,或int[][]
)//为什么
如果类型是以下之一,则该类型不可再生:
- 类型变量(例如
T
)//为什么- 一个参数化的类型与实际的参数(如
List<Number>
,ArrayList<String>
或Map<String, Integer>
)//为什么- 具有绑定(例如
List<? extends Number>
或Comparable<? super String>
)//为什么的参数化类型
为什么2,3,4,5是可以再生的,6,7,8是不可再生的?
当我运行以下代码时,两个测试用例都成为现实:
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
public class MyTest{
private int count;
@Before
public void before(){
count=1;
}
@Test
public void test1(){
count++;
assertEquals(2, count);
}
@Test
public void test2(){
count++;
assertEquals(2, count);
}
}
Run Code Online (Sandbox Code Playgroud)
预期的行为
实际行为
为什么junit适用reinitializing class/variable
于每个测试方法调用.这是junit中的错误或故意提供.
如果不可变类对象副本将等于原始副本那么为什么String
Java 中的类具有复制构造函数?这是一个错误还是这个实施背后的原因?在Java文档中,它被指定为:
/**
* Initializes a newly created {@code String} object so that it represents
* the same sequence of characters as the argument; in other words, the
* newly created string is a copy of the argument string. Unless an
* explicit copy of {@code original} is needed, use of this constructor is
* unnecessary since Strings are immutable.
*
* @param original
* A {@code String}
*/
public String(String original) {
....
....}
Run Code Online (Sandbox Code Playgroud) byte a = 1;
byte b = 1;
byte c = a + b;
Run Code Online (Sandbox Code Playgroud)
引发错误:可能会损失精度
byte subt = a_s - a_b;
^
required: byte
found: int
Run Code Online (Sandbox Code Playgroud)
这种行为是与jvm有关还是在java语言中定义的.
编辑:如果它是用java语言定义然后这样做是因为记住jvm?
表示如果java支持byte
数据类型,那么为什么会operation on byte
产生结果int
java ×10
byte ×1
generics ×1
iterator ×1
jakarta-mail ×1
java-8 ×1
junit ×1
junit3 ×1
junit4 ×1
operation ×1
reflection ×1
regex ×1
terminology ×1
type-erasure ×1
unit-testing ×1