小编Ste*_*n C的帖子

为什么分号不是必需的,但在类定义结束时允许使用分号?

我正试图从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.

提前致谢.

java syntax

15
推荐指数
3
解决办法
2万
查看次数

Java InputStream编码/字符集

运行以下(示例)代码

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 …

java encoding iso-8859-1

14
推荐指数
2
解决办法
7万
查看次数

在Eclipse中为Maven项目设置默认的Java合规性级别

Maven的默认合规级别是1.5,每次我在Eclipse中更新maven项目时,它都会将合规级别从1.6恢复到1.5,这对我来说真的很烦人.

我知道我可以在POM文件中将目标设置为1.6,但问题是我不能在父POM中设置它并期望子进程继承它.所以我必须为每个Maven模块做这件事.如何在我的Maven项目或整个eclipse中设置一次"生命周期"而不修改每个Maven模块!?

java eclipse maven-3 maven

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

"berks update <cookbook-name>"到底是做什么的?

根据"berks help update",该命令应该是:

"更新Berksfile中指定的cookbook(和依赖项)"

(是的......这就是它所说的!).

但究竟是什么意思呢?

这会如何随着Berksfile中不同类型的"cookbook"规范而变化?

chef-infra berkshelf berksfile

14
推荐指数
1
解决办法
6570
查看次数

Java的."Serializable"父级的子级是否自动"可序列化"

我想询问实现"Serializable"接口的父节点的子节点是否也实现了"Serializable"接口,或者换句话说,该子节点是否可以被序列化?

java serialization

14
推荐指数
2
解决办法
1万
查看次数

允许Java JDK 11 HttpClient的不安全的HTTPS连接

有时需要允许不安全的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中的严重设计缺陷.

java java-http-client java-11

14
推荐指数
3
解决办法
3993
查看次数

与0xff进行逐位AND运算很重要?

对于这个问题,在这段代码中,不与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 byte short bitwise-operators bitwise-and

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

unclosed流是否导致java中的内存泄漏?

我相信开放流会导致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明确关闭流,它会导致内存泄漏吗?

java memory-leaks memory-management

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

执行jmap时JVM是否停止了?

当jmap进行内存转储时,我的java应用程序是否继续运行?

java memory memory-leaks jmap

12
推荐指数
2
解决办法
1万
查看次数

适用于centos 6.5的openjdk 1.8软件包

我想尽快将我们的生产设置转移到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 openjdk centos6

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