我正试图从C++转向Java.
我想知道的是,在C++中,在类定义之后,需要使用分号(;),但在Java中则不是.
也就是说,在C++中:
class Person {
public:
string name;
int number;
}; // Note this semicolon
Run Code Online (Sandbox Code Playgroud)
但在Java中:
class Person {
public String name;
public int number;
} // Semicolon is not required
Run Code Online (Sandbox Code Playgroud)
那很好,我理解.
但是,我的问题是:
当我在类定义结束时添加分号时,Java也可以工作,如:
class Person {
public String name;
public int number;
}; // Now this semicolon is confusing me!
Run Code Online (Sandbox Code Playgroud)
我编译并执行了为Java显示的程序片段,它们都有效.任何人都可以解释为什么会这样吗?Java中类定义结尾的分号代表什么?
如果这个问题质量低,我很抱歉,但我真的需要澄清一下.我希望Java专家能帮助我.
好吧,我已经在课堂定义和其他相关问题中看到过Semicolons.
提前致谢.
运行以下(示例)代码
import java.io.*;
public class test {
public static void main(String[] args) throws Exception {
byte[] buf = {-27};
InputStream is = new ByteArrayInputStream(buf);
BufferedReader r = new BufferedReader(
new InputStreamReader(is, "ISO-8859-1"));
String s = r.readLine();
System.out.println("test.java:9 [byte] (char)" + (char)s.getBytes()[0] +
" (int)" + (int)s.getBytes()[0]);
System.out.println("test.java:10 [char] (char)" + (char)s.charAt(0) +
" (int)" + (int)s.charAt(0));
System.out.println("test.java:11 string below");
System.out.println(s);
System.out.println("test.java:13 string above");
}
}
Run Code Online (Sandbox Code Playgroud)
给了我这个输出
test.java:9 [byte] (char)? (int)63 test.java:10 [char] (char)? (int)229 test.java:11 string below ? test.java:13 string …
Maven的默认合规级别是1.5,每次我在Eclipse中更新maven项目时,它都会将合规级别从1.6恢复到1.5,这对我来说真的很烦人.
我知道我可以在POM文件中将目标设置为1.6,但问题是我不能在父POM中设置它并期望子进程继承它.所以我必须为每个Maven模块做这件事.如何在我的Maven项目或整个eclipse中设置一次"生命周期"而不修改每个Maven模块!?
根据"berks help update",该命令应该是:
"更新Berksfile中指定的cookbook(和依赖项)"
(是的......这就是它所说的!).
但究竟是什么意思呢?
这会如何随着Berksfile中不同类型的"cookbook"规范而变化?
我想询问实现"Serializable"接口的父节点的子节点是否也实现了"Serializable"接口,或者换句话说,该子节点是否可以被序列化?
有时需要允许不安全的HTTPS连接,例如在一些应该与任何站点一起使用的Web爬行应用程序中.我在旧的HttpsURLConnection API中使用了一个这样的解决方案,最近被JDK 11中的新HttpClient API取代了.使用这个新API允许不安全的HTTPS连接(自签名或过期证书)的方法是什么?
UPD:我尝试的代码(在Kotlin中,但直接映射到Java):
val trustAllCerts = arrayOf<TrustManager>(object: X509TrustManager {
override fun getAcceptedIssuers(): Array<X509Certificate>? = null
override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) {}
override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) {}
})
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, SecureRandom())
val sslParams = SSLParameters()
// This should prevent host validation
sslParams.endpointIdentificationAlgorithm = ""
httpClient = HttpClient.newBuilder()
.sslContext(sslContext)
.sslParameters(sslParams)
.build()
Run Code Online (Sandbox Code Playgroud)
但在发送时我有异常(尝试使用自签名证书的localhost):
java.io.IOException: No name matching localhost found
Run Code Online (Sandbox Code Playgroud)
使用IP地址而不是localhost会出现"无主题替代名称存在"异常.
在对JDK进行一些调试之后,我发现sslParams在抛出异常的地方真的被忽略了,并且使用了一些本地创建的实例.进一步调试显示,影响主机名验证算法的唯一方法是将jdk.internal.httpclient.disableHostnameVerification系统属性设置为true.这似乎是一个解决方案.SSLParameters在上面的代码中没有任何影响,所以这部分可以被丢弃.使其仅在全局配置看起来像新的HttpClient API中的严重设计缺陷.
对于这个问题,在这段代码中,不与0xff进行逐位AND运算实际上意味着返回相同的值吗?
byte[] packet = reader.readPacket();
short sh;
sh = packet[1];
sh &= 0xFF;
System.out.print(sh+" ");
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果不包括ANDing,那么我得到-1,但是当包含255时可以解释原因吗?
正如我所看到的,0xff只是1111 1111.不是吗?
我相信开放流会导致java中的内存泄漏(至少java 1.6及更早版本确实存在这个问题).
但是,在搜索时(即使在这里),我发现有些人同意这一点,而其他人却没有.所以,如果我写这个程序:
import java.io.*;
public class CreatingMemoryLeak {
public static void main(String args[])
{
String s = "xxxxxxx";
InputStream in = new ByteArrayInputStream(ss.getBytes());
BufferedInputStream bf = new BufferedInputStream(in);
try {
while(bf.read()>0)
{
System.out.println("got it");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Here is a input stream " + s +" causing a memory leak");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有bf明确关闭流,它会导致内存泄漏吗?
我想尽快将我们的生产设置转移到openjdk 1.8.目前我们在centos 6.5上运行openjdk 1.7u55.
麻烦的是,我似乎无法直接从谷歌那里找到一个1.8的yum存储库.是否已在某处释放可用的rpm?如果是的话,在哪里?如果没有,那么可能会发生粗略的ETA(例如,centos 7或epel?).我可能要等几个星期但不会太久.
我至少能找到一些fedora软件包:https://apps.fedoraproject.org/packages/java-1.8.0-openjdk/builds
所以,这表明人们至少在研究这个问题,但我不知道这些软件包是否与centos一样稳定(或根本不工作).
为清楚起见,我知道这是jdk 1.8的早期阶段,并且我很清楚这些权衡.我不是在寻找有关如何从Oracle下载Oracle Java的构建说明或指令,因为它们缺少yum repo和许可证点击是令人讨厌的.
java ×9
memory-leaks ×2
berksfile ×1
berkshelf ×1
bitwise-and ×1
byte ×1
centos6 ×1
chef-infra ×1
eclipse ×1
encoding ×1
iso-8859-1 ×1
java-11 ×1
jmap ×1
maven ×1
maven-3 ×1
memory ×1
openjdk ×1
short ×1
syntax ×1