小编Jay*_*esh的帖子

模糊重载方法调用已解决

当我调用时,call('a');它输出"char"并且它很好,因为char原始类型将优先于将其装入Character.

static void call(char i){
    System.out.println("char");
}

static void call(Character i){
    System.out.println("Character");
}
Run Code Online (Sandbox Code Playgroud)

如何调用call('a', 'a');是模棱两可的?

static void call(char i, Character j){
    System.out.println("char");
}

static void call(Character i, Character j){
    System.out.println("Character");
}
Run Code Online (Sandbox Code Playgroud)

我想的是第二个参数编译器必须去Boxing和第一个参数完全匹配是char原始类型,所以调用call('a','a');可以解析为call(char i, Character j)方法.

显然我理解错了,有人请解释一下.

解释特定这种示例的一些链接将是有帮助的.

java overloading

4
推荐指数
1
解决办法
192
查看次数

IO和NIO性能差异和示例

我是Java NIO的新手,没有动手.关于Java NIO我知道它比java.IO快.

所以,只是试一试,我想到编写简单的程序"将一个文件的内容复制到另一个文件"."从大文件中搜索一个单词".

同时使用java.io和java.nio包.

另外,我分别在操作开始和结束之前和之后打印时间.

我没有发现任何差异,因为NIO更快.我可能会走错方向.

任何人都可以引导我通过我可以通过示例正确看到差异的场景吗?

编辑:

我很惊讶地知道这个问题会得到反对票.我已经提到我是NIO的新手并指导我,如果我走向错误的方向.我没有发布一个程序,因为它是非常基本的读写操作...请参阅下面我用来测试的程序....

使用IO

public static void copyFile(File in, File out) throws Exception {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Date now = new Date();
    String strDate = sdf.format(now);

    System.out.println("Before Read :"+strDate);


    FileInputStream fis  = new FileInputStream(in);
    FileOutputStream fos = new FileOutputStream(out);
    try {
        byte[] buf = new byte[1024];
        int i = 0;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    } 
    catch (Exception e) {
        throw e;
    }
    finally …
Run Code Online (Sandbox Code Playgroud)

java io nio java-ee

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

在运行时在属性文件中设置值

是否可以在运行时设置属性文件中的值.

我尝试了这个,它在读取属性的同时发生了变化,但是当我在文件中检查到没有反映出变化时.

       try {
            Properties props = new Properties();
            props.setProperty("ServerAddress", "ee");
            props.setProperty("ServerPort", "123");
            props.setProperty("ThreadCount", "456");
            File f = new File("myApp.properties");

            OutputStream out = new FileOutputStream( f );
            props.store(out, "This is an optional header comment string");

            System.out.println(props.get("ServerPort"));
            out.close();
       }
        catch (Exception e ) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

输出:123.

我需要有一个属性文件应用程序,并通过GUI网页配置可以更改.

java properties

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

通过值传递混淆并通过java中的引用传递

可能重复:
Java是"传递引用"吗?

嗨,我已经开发了以下代码.在交换方法中,我交换了两个对象的引用.然后它将在被调用的方法(这里是swap())中更改但在主方法中没有改变.为什么?

class Check
{

    public void swap(PassByRefDemoMain obj1,PassByRefDemoMain obj2)
    {

        PassByRefDemoMain temp;
        temp=obj1;
        obj1=obj2;
        obj2=temp;
        System.out.println(obj1.id+ " "+ obj2.id);

    }
}


public class PassByRefDemoMain {
    int id;
    PassByRefDemoMain(int id)
    {
        this.id=id;
    }
public static void main(String[] args) {
        PassByRefDemoMain obj1=new PassByRefDemoMain(10);
        PassByRefDemoMain obj2=new PassByRefDemoMain(20);

        Check obj=new Check(); 
        obj.swap(obj1,obj2);

        System.out.println(obj1.id + " " + obj2.id);

    }

}
Run Code Online (Sandbox Code Playgroud)

java java-ee

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

Java replaceAll抛出空指针异常

在使用String类的replaceAll API时,我遇到了Null Pointer Exception.

然后我尝试用下面粘贴的小片段,我正在接受NPE.

    String s = "HELLO @WORLD@ I AM.";
    System.out.println(s.replaceAll("@WORLD@", null)) ; 
Run Code Online (Sandbox Code Playgroud)

我也发现在String.java类中

  public Matcher appendReplacement(StringBuffer sb, String replacement) {
        .......//code

        while (cursor < replacement.length()) { ..//code}
        .......//code
}
Run Code Online (Sandbox Code Playgroud)

所以这里它称之为replacement.length()NPE的原因.

是否有规则我们不能将第二个参数作为null传递?

我知道如果替换单词为null,JVM将替换什么.

java

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

当Java刷新线程缓存到实际复制时

我阅读了一些关于易变性线程缓存的文章,发现它没有例子太简短,所以初学者很难理解.

请帮我理解下面的程序,

public class Test {
    int a = 0;
    public static void main(String[] args) {        
        final Test t = new Test();
        new Thread(new Runnable(){
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (Exception e) {}
                t.a = 10;
                System.out.println("now t.a == 10");
            }
        }).start();

        new Thread(new Runnable(){
            public void run() {
                while(t.a == 0) {}
                System.out.println("Loop done: " + t.a);
            }
        }).start();
    }

}
Run Code Online (Sandbox Code Playgroud)

当我做a变量volatile和运行我的程序那么一段时间后停止,但是当我删除volatilea变量,那么它的推移,我的程序不会停止.

我对volatile的了解是"当变量被声明为volatile时,线程将直接读/写到变量内存而不是从本地线程缓存读/写.如果没有声明volatile,那么可以看到实际值更新的延迟."

另外,根据我对刷新缓存副本的理解,我认为程序会在一段时间内停止但是为什么在上面的程序中它继续运行而不是更新.

那么什么时候Thread引用它的本地缓存开始引用主副本或者用主副本刷新它的值?

如果我理解错了,请纠正我.

请用一些小代码片段或链接向我解释.

java multithreading volatile

0
推荐指数
1
解决办法
664
查看次数

标签 统计

java ×6

java-ee ×2

io ×1

multithreading ×1

nio ×1

overloading ×1

properties ×1

volatile ×1