【问题标题】:private static ClassName ClassInstanceVariableName=null;.....what is this?private static ClassName ClassInstanceVariableName=null;.....这是什么?
【发布时间】:2013-05-23 05:13:23
【问题描述】:

好吧这里有一个静态实现,我不明白。我以前使用过静态但没有广泛使用,任何人都可以帮助我理解代码。这是代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class Connection_Class {
String driver_ClassName="com.mysql.jdbc.Driver";
String URL_connection="jdbc:mysql://localhost:3306/vendor";
String user="root";
String password="lifesuckzz";
   //can anybody explain what the following line means, especially the static part.......
    private static Connection_Class connectionclass=null;

private Connection_Class(){
    try{
        Class.forName(driver_ClassName);

    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }
}

public Connection getConnection() throws SQLException{
    Connection con=null;
    con=DriverManager.getConnection(URL_connection,user,password);
    return con;
}

public static Connection_Class getInstance(){
    if(connectionclass==null){
                 //I know its returning an instance here
        connectionclass=new Connection_Class();
    }
    return connectionclass;
}


}

【问题讨论】:

  • 参见 docs.oracle.com/javase/tutorial/java/javaOO/classvars.html - 如果您不明白 static 的含义,我强烈建议您在进行任何数据库工作之前了解更多关于核心 Java 语言功能的信息。
  • 使用静态实例来保存类实例的唯一原因是静态方法getInstance可以访问它......我相信下面的所有答案都会告诉你为什么这个单例不会作为单身人士工作....
  • @Thihara:明白了....这正是我对概念产生怀疑的地方...
  • @Why-K-Rum:这不是被冒犯的问题。这是在你能走路之前尝试跑步的问题 - 我认为在开始做数据库工作之前尝试理解语言的核心很重要。
  • 你会在浪费时间——你自己的和其他人的。老实说,如果你以合理的顺序学习东西,你会发现你能更快地达到最终目标。试图走捷径只会给你带来麻烦。我已经看过很多次了。

标签: java methods static static-methods


【解决方案1】:

这是 singleton 模式的一个示例。它在您的应用程序(严格来说,在您的类加载器中)创建连接类的一个引用。

Singleton 是许多 OO 语言中相当常见的模式,但由于它使测试变得困难,因此经常被视为反模式。

【讨论】:

    【解决方案2】:

    这是一种设计模式,称为单例设计模式

    当需要一个对象来协调整个系统的动作时,这很有用

    http://en.wikipedia.org/wiki/Singleton_pattern

    回答你的问题

    单例维护对唯一单例实例的静态引用,并从静态 getInstance() 方法返回对该实例的引用。

    【讨论】:

      【解决方案3】:

      static 表示该变量是类本身的成员(只有一个副本),而不是类对象的成员(每个对象一个)。您可以在没有对象的情况下访问 static 变量。在这种情况下,您可以调用Connection_Class.getInstance() 来获取整个程序共享的单个Connection_Class 对象。

      【讨论】:

        【解决方案4】:

        这是Singleton 设计模式的示例。通过将构造函数标记为私有,您可以确保您*控制实例化以使每个 JVM 拥有 一个且只有一个实例*。

        public final class Singleton {
        
            private static Singleton INSTANCE = new Singleton();
        
            private Singleton () {
                if (INSTANCE != null)
                    throw new IllegalStateException("Already instantiated.");
            }
        
            // getInstance() method here (refer below)
        }
        

        关键字static 确保单例可以作为类的成员访问(如Singleton.getInstance())而不需要构造函数调用,这是不可能的现在因为它被标记为private

        此外,您的 Singleton 实现不是线程安全的。 同步你的getInstance()方法。

        public static synchronized Connection_Class getInstance(){
            if(connectionclass == null){
                connectionclass = new Connection_Class();
            }
            return connectionclass;
        }
        

        这避免了请求此连接对象的多个线程之间的任何竞争条件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-08
          • 2016-06-23
          相关资源
          最近更新 更多