小编Ale*_*lex的帖子

Java中的原始强制转换和赋值

我理解为什么以下是错误的:

byte a = 3; 
byte b = 8; 
byte c = a + b;  // compile error
Run Code Online (Sandbox Code Playgroud)

它不会编译.表达式总是导致int.所以我们应该做了明确的演员:

byte c = (byte) (a + b);   // valid code
Run Code Online (Sandbox Code Playgroud)

我不明白为什么以下是正确的:

byte d = 3 + 8;   // it's valid! why?
Run Code Online (Sandbox Code Playgroud)

因为字面整数(例如3或8)总是隐式的int.并且int-or-smaller表达式也总是导致int.谁能解释一下这里发生了什么?

我唯一可以猜到的是编译器将此表达式等同于以下内容:

byte d = 11;
Run Code Online (Sandbox Code Playgroud)

并不认为这是一个表达.

java

45
推荐指数
2
解决办法
2159
查看次数

您可以在Java接口中声明常量的目的是什么?

规范规定,界面旨在定义合同什么类可以做,并包含了一组以实现所需的方法.但与此同时,界面可能有常量.

出于什么目的,Java中允许它?

接口中常量的存在点是什么,它们如何在其中使用?据我所知,他们只能被方法视为参数.但是我没有看到太多意义,因为接口没有说明如何实现其方法.

java oop interface

17
推荐指数
1
解决办法
678
查看次数

UnknownFormatConversionException是由String.format()中的符号'%'引起的

String template = "%s and '%'";
String result = String.format(template, "my string");
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

预期:

my string and '%'
Run Code Online (Sandbox Code Playgroud)

但结果是:

java.util.UnknownFormatConversionException: Conversion = '''
Run Code Online (Sandbox Code Playgroud)

为什么?如何正确地声明序列'%'以使其被忽略String.format()

java string replace string-formatting

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

为什么Java在运行时检查类型与转换的不兼容性,并且在编译时键入不匹配转换?

假设有2个班级.并Child扩展Parent.

public class Parent {}
Run Code Online (Sandbox Code Playgroud)

public class Child extends Parent {}
Run Code Online (Sandbox Code Playgroud)

我知道以下代码不正确:

Child obj = new Parent(); // causes java.lang.Error
Run Code Online (Sandbox Code Playgroud)

要么

Child obj = (Child) new Parent(); // causes java.lang.ClassCastException
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我在第一种情况下得到编译错误,在第二种情况下得到运行时异常.毕竟,父母永远不能转换或投射到孩子身上.为什么在编译时没有检查第二种情况?

我会非常感谢一个明确而合理的想法!

java compiler-errors runtimeexception

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

为什么我没有得到NotSerializableException?

class NotSerializable {}

class MyClass implements Serializable {
   private NotSerializable field; // class NotSerializable does not implement Serializable!!
}

public class Runner {
   public static void main(String[] args) {
      MyClass ob = new MyClass();

      try {
         FileOutputStream fs = new FileOutputStream("testSer.ser");
         ObjectOutputStream os = new ObjectOutputStream(fs);
         os.writeObject(ob);
         os.close();
      } catch (IOException e) { 
          e.printStackTrace(); 
      }

      try {
         FileInputStream fis = new FileInputStream("testSer.ser");
         ObjectInputStream ois = new ObjectInputStream(fis);
         MyClass copyOb = (MyClass) ois.readObject();
         ois.close();
      } catch (Exception e) { 
          e.printStackTrace(); 
      } …
Run Code Online (Sandbox Code Playgroud)

java io serialization notserializableexception

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