小编Pra*_*eek的帖子

什么是Java中的故障安全和失败快速迭代器

Java中有两种类型的迭代器:故障安全和故障快速.

这是什么意思,它们之间的区别是什么?

java iterator terminology

96
推荐指数
3
解决办法
9万
查看次数

在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中.

java jakarta-mail

74
推荐指数
8
解决办法
19万
查看次数

Pattern.quote方法有什么用?

我试图理解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对象.

为什么需要此方法以及一些用法示例?

java regex pattern-matching

53
推荐指数
5
解决办法
5万
查看次数

apache HttpClient API中的setConnectionTimeout,setSoTimeout和"http.connection-manager.timeout"之间有什么区别

三者之间有什么区别(标记为评论):

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 httpconnection apache-httpclient-4.x

42
推荐指数
3
解决办法
6万
查看次数

内存一致性 - 发生在Java之前的关系之前

在阅读有关内存一致性错误的Java文档时.我找到了与两个创造事件相关的点 - 在关系之前:

  • 当一个语句调用时Thread.start(),与该语句有一个before-before关系的每个语句也与新线程执行的每个语句都有一个before-before关系.新线程可以看到导致创建新线程的代码的影响.

  • 当一个线程终止并导致Thread.join()另一个线程返回时,终止
    线程执行的所有语句
    与成功连接后的所有语句都有一个before-before关系.现在,执行连接的线程可以看到线程中代码的效果.

我无法理解他们的意思.如果有人用一个简单的例子解释它会很棒.

java java.util.concurrent happens-before

33
推荐指数
3
解决办法
1万
查看次数

如何使用反射在Java 8中获取方法参数名称?

Java 8能够使用Reflection API获取方法参数名称.

  1. 如何获取这些方法参数名称?

  2. 据我所知,类文件不存储正式的参数名称.我如何使用反射获得这些?

java reflection method-parameters java-8

33
推荐指数
4
解决办法
3万
查看次数

为什么以下类型在java中是可恢复和不可恢复的?

在计算中,具体化意味着一种类型的显式表示 - 即运行时类型信息.

oracle教程说,

可重新类型是类型信息在运行时完全可用的类型.这包括基元,非泛型类型,原始类型和未绑定通配符的调用.

不可再生类型是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用.

如果类型是以下之一,则该类型是可恢复的:

  1. 一个原始类型(如int)//理解
  2. 阿非参数化类或接口类型(例如Number,StringRunnable)//为什么
  3. 一个参数化的类型,其中所有类型的参数是无界的通配符(例如List<?>,ArrayList<?>Map<?, ?>)//为什么
  4. 原始类型(如List,ArrayListMap)//为什么
  5. 阵列,其组件类型为reifiable(如int[],Number[],List<?>[],List[],或int[][])//为什么

如果类型是以下之一,则该类型不可再生:

  1. 类型变量(例如T)//为什么
  2. 一个参数化的类型与实际的参数(如List<Number>,ArrayList<String>Map<String, Integer>)//为什么
  3. 具有绑定(例如List<? extends Number>Comparable<? super String>)//为什么的参数化类型

为什么2,3,4,5是可以再生的,6,7,8是不可再生的?

java generics type-erasure

27
推荐指数
4
解决办法
7419
查看次数

Junit是否在每次测试方法调用时重新初始化该类?

当我运行以下代码时,两个测试用例都成为现实:

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)

预期的行为

  1. test1 - 成功
  2. test2 - 失败(正如预期的那样,计数将变为3)

实际行为

  1. test1 - 成功
  2. test2 - 成功

为什么junit适用reinitializing class/variable于每个测试方法调用.这是junit中的错误或故意提供.

java junit unit-testing junit4 junit3

16
推荐指数
4
解决办法
6444
查看次数

为什么String类有复制构造函数?

可能重复:
Java中表达式"new String(...)"的目的是什么?

如果不可变类对象副本将等于原始副本那么为什么StringJava 中的类具有复制构造函数?这是一个错误还是这个实施背后的原因?在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)

java

13
推荐指数
1
解决办法
1713
查看次数

由于java语言规则或jvm,是否将字节转换为int?

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 byte operation type-conversion type-promotion

13
推荐指数
3
解决办法
1万
查看次数