所有,我想知道使用Oracle提供的安装程序安装JDK和使用安装后创建的JDK目录有什么区别。
假设我在机器 M1 上使用 oracle 的安装程序安装了 JDK7u1,位置为:C:\Program Files\Java\JDK7u1
我可以将 JDK7u1 目录(包括它的所有子目录)复制到另一台机器 M2 中的文件夹中
“D:\JVMs”所以目录看起来像:“D:\JVMs\JDK7u1”。如果我将 JAVA_HOME 设置为“D:\JVMs\JDK7u1”并将“D:\JVMs\JDK7u1\bin”添加到路径变量。
有什么不同吗?
如果它们没有不同,为什么 Oracle 的 Windows 发行版不附带 .zip 发行版?
另外,如果我已经在我的机器上安装了 JDK6u23,安装 jdk7 安装程序会导致任何问题吗?
我的系统信息:Windows XP SP3 32 位机。
谢谢
嗨,我尝试写入不存在的文件
public static void main(String[] args) throws IOException {
Path newFile = Paths.get("output.txt");
Files.write(newFile, "Sample text".getBytes());
}
Run Code Online (Sandbox Code Playgroud)
一切都好,但如果我把选项
Files.write(newFile, "Sample text".getBytes(),StandardOpenOption.DELETE_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)
出现错误
Exception in thread "main" java.nio.file.NoSuchFileException: problem.txt
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
所以为了工作,我必须添加选项
StandardOpenOption.CREATE_NEW
Run Code Online (Sandbox Code Playgroud)
为什么在第二次尝试StandardOpenOption.DELETE_ON_CLOSE中不起作用,但第一次没有任何选项可以工作并创建文件?
我正在使用 java 版本(构建 1.7.0_45-b18)
出现错误 - case 表达式必须是常量表达式当我尝试在 switch case 语句中使用 enum 类时,:
我的枚举类是,
public enum TestEnumClass {
TEST1("TEST1"),
TEST2("TEST2"),
TEST3("TEST3");
private String enumConstant;
private TestEnumClass(String algoConstant) {
this.enumConstant = algoConstant;
}
public String getEnumConstant() {
return enumConstant;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在另一个类文件中使用 enum TestEnumClass 如下,
public class TestIndexOf {
public static void main(String[] args) {
String str = args[0];
switch(str){
case TestEnumClass.Test1.getEnumConstant() : System.out.println("test1"); break;
case TestEnumClass.Test2.getEnumConstant() : System.out.println("test2"); break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我编译时错误:
case 表达式必须是常量表达式
请建议我,我哪里出错了。
如果匿名类正在扩展/实现类/接口,为什么我不能添加新方法?
换句话说,这有效:
class A {
void a() {
System.out.println("a in A");
}
}
class B extends A {
@Override
void a() {
System.out.println("a in B");
}
void b() {
System.out.println("b in B");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用:
class C {
A anonA() {
return new A() {
void b() {
System.out.println("b in C");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于:
public static void main(String[] args) {
B b = new B();
b.b();
// C c = new C();
// A anonA = c.anonA();
// …Run Code Online (Sandbox Code Playgroud) 我想让一个函数返回一个保证实现两个接口的对象。在编译时不一定知道确切的对象。我的代码看起来像:
class HelloWorld {
public interface A {}
public interface B {}
public static class C implements A, B {}
public static class D implements A, B {}
public static <T extends A & B> void g(T t) {}
public static <T extends A & B> T f(boolean b) {
if (b)
return new C(); // Doesn't compile
return new D(); // Doesn't compile
}
public static void main(String []args){
g(f(true));
g(f(false));
<what_should_I_write_here> x = f(<user_inputted_boolean>);
}
}
Run Code Online (Sandbox Code Playgroud)
尝试编译时出现以下错误:
HelloWorld.java:13: …
我想在我的Android Studio项目中包含firebase SDK.但它给了我一个错误.我使用的是最新的JDK版本(1.7.0_71),它要求将更高版本升级到(1.7.0_67).
我需要帮助android上的基本firebase设置SDK.我尝试通过以下链接参考设置它:https://firebase.google.com/docs/android/setup#add_the_sdk.
我收到以下错误:请检查附加的屏幕截图

总结:Salesforce.com 最近为其沙盒实例 (test.salesforce.com) 禁用了 TLSv1,并且只能支持 TLSv1.1 及更高版本的 API 集成,用于入站和出站请求。
我使用 Java Axis1.0 客户端代码和 JDK 7.0 连接(通过 webservice soap)到 salesforce.com。我收到异常“UNSUPPORTED_CLIENT:TLS 1.0 已在该组织中禁用。使用 https 连接到 Salesforce 时,请使用 TLS 1.1 或更高版本。”
With Java7.0
Supported Protocols:SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2
Enabled Protocols: TLSv1
`使用Java8.0,当我尝试使用java8 客户端连接到salesforce.com 时,连接成功。
支持的协议:SSLv2Hello、SSLv3、TLSv1、TLSv1.1、TLSv1.2 启用协议:TLSv1、TLSv1.1、TLSv1.2`
我必须使用 Java 7,因为我们的应用程序正在使用它。我尝试设置虚拟机参数: -Dhttps.protocols=TLSv1.1,TLSv1.2 -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -Ddeployment.security.TLSv1.1 =true -Ddeployment.security.TLSv1.2=true”但没有成功。
你能帮我找出 Java7 中的设置来启用 TLSv1.1 吗?
我有以下代码:
Map<String, List<String>> map;
for(String k : map.keySet()){
List<String> list = map.get(k);
boolean empty = list.isEmpty();//CME
if(!empty && somecheck(k, ...)){
list.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在ConcurrentModificationException使用 isEmpty() 方法。列表是一个ArrayList. 没有其他线程修改列表,因为它之前是在此方法中创建的(以及所有映射)。唯一修改列表的地方是clear(),但它在 isEmpty() 之后调用并且循环不能在一个列表上执行两次。
我正在使用 Java 1.7
java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)
at java.util.ArrayList$SubList.size(ArrayList.java:998)
at java.util.AbstractCollection.isEmpty(AbstractCollection.java:86)
Run Code Online (Sandbox Code Playgroud) 当我运行以下代码时:
int year = 2017;
int month = 7;
int dayOfMonth = 10;
Calendar dateOfBirth = new GregorianCalendar(year, month, dayOfMonth);
dateOfBirth.getTime(); // See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490
dateOfBirth.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("Original Day Of Month:\t\t" + dayOfMonth);
System.out.println("Calendar:\t\t\t" + dateOfBirth);
System.out.println("Calendar substring:\t\t" + dateOfBirth.toString().substring(dateOfBirth.toString().indexOf("DAY_OF_MONTH"), dateOfBirth.toString().indexOf("DAY_OF_MONTH") + 15));
System.out.println("Formatted date:\t\t\t" + new SimpleDateFormat("dd").format(dateOfBirth.getTime()));
System.out.println("get(Calendar.DAY_OF_MONTH):\t" + dateOfBirth.get(Calendar.DAY_OF_MONTH));
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
Original Day Of Month: 10
Calendar: java.util.GregorianCalendar[time=1502312400000,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=7,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=10,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
Calendar substring: DAY_OF_MONTH=10
Formatted date: 10
get(Calendar.DAY_OF_MONTH): 9
Run Code Online (Sandbox Code Playgroud)
可以看到,返回的值dateOfBirth.get(Calendar.DAY_OF_MONTH)是不正确的。
我使用 UTC 是因为它是出生日期,我不希望它依赖于特定的时区。为了正确执行此操作,我需要调用dateOfBirth.getTime()- 参见http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490。如果我拨打那个电话,这可以正常工作,但随后我会遇到其他错误。
知道我能做些什么来准确地获得一个月中的正确日期吗?
我使用的是 Java v1.7.0_79,如果有问题,我目前使用 …
我使用 java 8 创建了一个 Windows 应用程序。但是我的客户在他的机器上使用 java 7 并且无法在机器上升级 java。
因此,当我在 java 8 中编译的 java7 上运行 jar 时,它会出错,所以我可以将 jar 兼容转换为较低版本的 java