在JAVA里面常常可以看见这样写的类,把成员变量设成private static,再把方法设成public static,如下:public class Classname{private static Objct A = null; //这个时候给A分配了堆空间了吗 ?且A可以看成该空间首地址?
private static int B;
……
public static FunctionName()
(
A = ……;
return A; //返回的是A地址?
}}对于以上代码,A被返回,这个时候请问返回的是A的地址吗?
我是这样想的:
如果是,并在定义A的时候给A分配了空间,A可以看成该空间首地址.
设存在另外一个类 otherclass, 里面也定义有一个private static Objct B=null,也给B分配了空间,B可以看成是该空间首地址;当我们让B=Classname.FunctionName()时.B就指向了A的一片堆空间,而自己原来的空间就被系统回收.
请问以上推论正确吗?本人刚学JAVA不知道有什么文章介绍这些,找不着就上来麻烦大家了.如果大家知道有这方面的资料,请大家告诉一下,谢谢!
private static int B;
……
public static FunctionName()
(
A = ……;
return A; //返回的是A地址?
}}对于以上代码,A被返回,这个时候请问返回的是A的地址吗?
我是这样想的:
如果是,并在定义A的时候给A分配了空间,A可以看成该空间首地址.
设存在另外一个类 otherclass, 里面也定义有一个private static Objct B=null,也给B分配了空间,B可以看成是该空间首地址;当我们让B=Classname.FunctionName()时.B就指向了A的一片堆空间,而自己原来的空间就被系统回收.
请问以上推论正确吗?本人刚学JAVA不知道有什么文章介绍这些,找不着就上来麻烦大家了.如果大家知道有这方面的资料,请大家告诉一下,谢谢!
private static Objct A = null;
定义一个Object类型的对象引用AA = new Objcet();
开辟内存空间,存储Object对象,并把引用A指向该地址我是这么理解的,有不对的请指教
哦,没有加上返回类型了,给补上,还是原来的问题.
我现在明白了,应该是这样:
private static Objct A = null;
这句话是不开辟内存的.A只是被编译器记录为一个Objct型变量(编译器应该有这么一张记录表),如果要为它开辟空间,就开辟Objct型所需要的大小.
B也同理.
当 运行A = ……;时,编译器给A开辟空间.上面函数返回的是这个空间的地址.
这样如何做到面向对象好的封装???
我举个例子,在做一个简单的数据库连接时,我们经常用下面一段简单的代码://先创建一个与数据库连接的CONNECTION,把它作为一个返回值。
public class ConnectionDB {
private static Connection con = null; //Connection con 是static 的
private static String DriverClass = "oracle.jdbc.driver.OracleDriver";
private static String url ="jdbc:oracle:thin:@localhost:1521:Oracle";
private static String user = "scott";
private static String pwd = "tiger";
public static Connection getConnection()
{
try {
Class.forName(DriverClass);
con =DriverManager.getConnection(url,user,pwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con; //把这个con返回
}
}那么接下来用一个简单的方法获得这个con并简单使用数据库。public class GetConnection { private static PreparedStatement pst = null;
private static ResultSet rs = null;
private static Connection conn = null;
private static String sql = "select * from login";
public static String[] gettable()
{
conn = ConnectionDB.getConnection(); //此处conn不就是和原来的con指向同一块内存了吗,莫非楼上有好的想法不让它们共
享对象?
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next())
{
在这里做你爱做的事情;
}
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return col;
}
}
都有自己的特点,最好自己研究下,那么这个问题就是小case了
不是static的不就不共享了么... connection怎么能共享呢
static方法只能使用static变量。不把Connection con 声明为是static的,也行,把它的声明放方法体里。那样的话它的生存周期就在返回时就结束了,返回的值就可能是个未知值。
呵呵,本来该结束了,还看看有人怎么说。
要不你可以不把连接对象设为static,每个对象都有一个连接对象,就不会有问题了,但是这似乎又
浪费了资源。