小编Ami*_*mar的帖子

何时将静态嵌套类(以及其中的静态成员)加载到内存中?

在这里,我试图使用内部静态助手类为我的数据库连接实现单例类:

package com.myapp.modellayer;

public class DatabaseConnection {

    private DatabaseConnection() {
        //JDBC code...
    }

    private static class ConnectionHelper {
        // Instantiating the outer class
        private static final DatabaseConnection INSTANCE = new DatabaseConnection();
    }

    public static DatabaseConnection getInstance() {
        return ConnectionHelper.INSTANCE;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑这个静态内部类ConnectionHelper何时被加载到JVM内存中:

在加载DatabaseConnection类时,还是在调用getInstance()方法时?

java singleton static-members nested-class

10
推荐指数
2
解决办法
2433
查看次数

如果两个对象引用指向同一个可序列化的对象,那么在java中序列化期间会发生什么?

如果两个对象引用指向同一个可序列化的对象,那么在java中序列化期间会发生什么?Serializable对象是否会保存两次?
例如 :

    class King implements java.io.Serializable {
        private String name="Akbar";
    }

    class Kingdom implements java.io.Serializable {
        King goodKing=new King();
        King badKing=goodKing;
    }

    public class TestSerialization {
        public static void serializeObject(String outputFileName,
                                           Object serializableObject) throws IOException {
            FileOutputStream fileStream=new FileOutputStream(outputFileName);
            ObjectOutputStream outStream=new ObjectOutputStream(fileStream);
            outStream.writeObject(serializableObject);
            outStream.close();
        }

        public static void main(String[] args) {
            Kingdom kingdom=new Kingdom();
            try {
                TestSerialization.serializeObject("Kingdom1.out", kingdom);
            }catch(IOException ex) {
                ex.getMessage();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,是否只为goodKingbadKing参考保存了一个对象状态,或者King对象被保存了两次?

java serialization

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

Java 编译器如何决定静态和实例成员/块的执行优先级

public class Test {
    public static void main(String str[]) {
        Hello h=Hello.INS1;
    }
}

class Hello {
 static Hello INS1=new Hello();
 static Hello INS2=new Hello(12);
{
    System.out.println("Instance Block");
}
static {
        System.out.println("Static Block");
}
private Hello() {
    System.out.println("Hello() Block");
}
private Hello(int ab) {
    System.out.println("Hello() Block");
}
}
Run Code Online (Sandbox Code Playgroud)

静态块总是先执行,但这段代码给出了一些我无法确定的东西。这里究竟发生了什么......?

输出:实例块 Hello() 块实例块 Hello() 块静态块

java compiler-construction static-members

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

为什么输出不会从Servlet的WEB-INF文件夹下的文件名为EmailList.txt中打印出来

这是我的servlet类,它负责从HTML页面获取数据并将该数据存储在WEB-INF目录下的EmailList.txt文件中:

Servlet类的代码片段......

//Get Parameters from the request object
String firstName=request.getParameter("firstName");
String lastName=request.getParameter("lastName");
String emailId=request.getParameter("emailId");

//Get a relative file name
ServletContext context=getServletContext();
String path=context.getRealPath("WEB-INF/EmailList.txt");

//Use Regular Java object to write the data to the file
UserData userData=new UserData(firstName, lastName, emailId);
UserIO.addUser(userData, path);
Run Code Online (Sandbox Code Playgroud)

其中的UserData是一个普通的Java类setter方法getter方法,以及UserIO包含代码的内容写入到文件EmailList.txt

UserIO类的代码如下:

public class UserIO {

    public static void addUser(UserData userData, 
                               String filePath)
                               throws IOException {

        File file=new File(filePath);

        PrintWriter out=new PrintWriter(new FileWriter(file, true));

        out.println(userData.getFirstName()+"\t"
                + userData.getLastName()+"\t"
                + userData.getEmailId()); …
Run Code Online (Sandbox Code Playgroud)

java file-io servlets

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