基础问题一大把

joejoe1991 2007-10-26 07:22:23
积累了N多问题 就等着今天呢。总算有100分了

1.线程操作 。 怎么样才算得到了对象的锁呢? 是调用对象上的方法就会得到 还是怎么样?
2.Hibernate 更新数据 把主键和要更新的数据封装到了pojo里
我粗心把update写成了save 结果发现居然也更新了 而且数据库里没有出现也没有新增加一条记录 这是咋回事?
3.用Hibernate对数据库进行查询 然后将结果保存在request到 forward到一个页面上去显示
在显示以后 手动到数据库里加一条记录 这时刷新页面 并没有看到新增加的页面 。 只有把tomcat重起以后 再刷新 才能看到
这是为啥 宝宝说可能是Hibernate缓存?

4.
String str = "sdfdfddd\0123123";
System.out.println(str);
谁帮忙解释一下这两行代码的输出情况啊 主要是看不懂为什么会少输出几个字符
5.Server ser = new Server();
ser.setID(Integer.parseInt(request.getParameter("id")));
ser.setTitle(request.getParameter("title"));
ser.setContent(request.getParameter("content"));
session.update(ser);

上面这些代码 对数据表进行更新 Server是一个pojo
结果发现并没有对原始记录进行更新 也是另外新加了一条记录。
这是咋回事呢?
不过我换成这样就能正常更新了:
Server ser = session.get(Server.class,request.getParameter("id"));
ser.setID(Integer.parseInt(request.getParameter("id")));
ser.setTitle(request.getParameter("title"));
ser.setContent(request.getParameter("content"));
session.update(ser);

6. 在做一个swing小东西时发现的问题
界面上有50多个JLabel 我要循环设置每个JLabel的Text属性的值 。
难道 要把每个label都加到集合里 然后再循环吗 这样是不是太麻烦 如果是上百个咋办呢? 有什么方法能方便一点呢? 好像用反射可以做到?

7.Java编程思想上写到:<< 只有对数值右端的5位才有用 这样可以防止我们移位超过int类型所具有的位数
这句话是什么意思啊。/ 为什么超过5位就会超过int类型所具有的位数呢?

谢谢大牛指教 小菜我学习一下

...全文
581 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
weijiepeng 2007-11-22
  • 打赏
  • 举报
回复
.
joejoe1991 2007-10-30
  • 打赏
  • 举报
回复
还有人回答没啊。。。。。。。。。。。。。。。。
胡矣 2007-10-29
  • 打赏
  • 举报
回复
楼主的知识真全面,按自己的理解说说,不对之处,莫怪...
5.Server ser = new Server();
ser.setID(Integer.parseInt(request.getParameter("id")));
ser.setTitle(request.getParameter("title"));
ser.setContent(request.getParameter("content"));
session.update(ser);

上面这些代码 对数据表进行更新 Server是一个pojo
结果发现并没有对原始记录进行更新 也是另外新加了一条记录。
这是咋回事呢?
不过我换成这样就能正常更新了:
Server ser = session.get(Server.class,request.getParameter("id"));
ser.setID(Integer.parseInt(request.getParameter("id")));
ser.setTitle(request.getParameter("title"));
ser.setContent(request.getParameter("content"));
session.update(ser);


hibernate 每一个对象对应数据库中一条数据,你新实例化一个对象当然是新建立了一条数据.

6. 在做一个swing小东西时发现的问题
界面上有50多个JLabel 我要循环设置每个JLabel的Text属性的值 。
难道 要把每个label都加到集合里 然后再循环吗 这样是不是太麻烦 如果是上百个咋办呢? 有什么方法能方便一点呢? 好像用反射可以做到?


呵呵 楼主一说循环,我的第一反映就是for循环,假设50个JLabel,把JLabel命名为jlabel1....jlabel50
for(int i=1;i<51;i++)
{
....
}

7.Java编程思想上写到: < < 只有对数值右端的5位才有用 这样可以防止我们移位超过int类型所具有的位数
这句话是什么意思啊。/ 为什么超过5位就会超过int类型所具有的位数呢?


楼上的已经说的很明白了,我只是想补充一下,其实不用像楼上那样转来转去的,直接用移位数对32取模就行了,比如要移34位,34%32 结果是2,就移2位就行了.
  • 打赏
  • 举报
回复
12 楼的 wushui1215 说得很对

在移位运算操作中 int 类型只取操作数的低5位(二进制),而 long 类型只取操作数的低6位(二进制)
这些是由 Java 虚拟机规范所规定的。

这样也就是说 >> 32 与 >> 0 的效果是一样的,因为 32 的二进制位是 100000,低 5 位是 00000,那就是 0 了。
yztommyhc 2007-10-29
  • 打赏
  • 举报
回复
pc_wang说到:
关于那个hibernate的问题,我有一些意见。
update的确是要与session关联才可以的。new()出来的对象是没有关联,但是只要设置了ID,执行update方法时hibernate会去检查数据库是否有此ID的数据,如果有就会执行update方法。
你出错的可能会不会是没有得到ID?或者你设置了version,此时你要update的话必须要得到ID和version两个参数才能执行。
*****************************************************************
你说的是对的。我的理解有误。
koj5201314 2007-10-29
  • 打赏
  • 举报
回复
JF
sharpyuce 2007-10-29
  • 打赏
  • 举报
回复
小弟能力有限,我所知道的就只能这样得到锁。
关注!
veardn 2007-10-29
  • 打赏
  • 举报
回复
update()这个方法生成的update的SQL语句。它只能用于持久化的对象和游离状态的对象。而

server ser=new server(); 这个ser是自由状态的,它不能用update,只能用save()方法或者

saveOrUpdate()方法。
laowang2 2007-10-29
  • 打赏
  • 举报
回复
up
yztommyhc 2007-10-28
  • 打赏
  • 举报
回复
特别是Hibernate的问题

Server ser = session.get(Server.class,request.getParameter("id")); // 对象和session关联

我这样得到一个对象
和Server ser = new Server(); 建的一个对象 程序怎么 知道哪个是和Session关联的而哪个又不是呢? 谢谢回答!@
######################################################################

这个是hibernate的事情.
你通过session得到的对象就是和session关联的了,由hibernate控制的.
new()出来的对象就是还没关联,因为你没涉及到hibernate操作.
ybm 2007-10-28
  • 打赏
  • 举报
回复
问题1::旧版本的jdk有synchronized关键字,jdk1.5用ReentrantLock类
基本结构为:

import java.util.concurrent.locks.*;
//......

public static void main(String[] args) {
// ......
Lock myLock=new ReentrantLock();
myLock.lock();
try{
//critical section;
}
finally{
myLock.unlock();
}
//.....

最好用finally这样unlock都能执行!
pc_wang 2007-10-28
  • 打赏
  • 举报
回复
关于那个hibernate的问题,我有一些意见。
update的确是要与session关联才可以的。new()出来的对象是没有关联,但是只要设置了ID,执行update方法时hibernate会去检查数据库是否有此ID的数据,如果有就会执行update方法。
你出错的可能会不会是没有得到ID?或者你设置了version,此时你要update的话必须要得到ID和version两个参数才能执行。
FL1429 2007-10-28
  • 打赏
  • 举报
回复
恩,这编帖子不错,让更多的人了解到自己基础的不足。。。。。
liuliu20036 2007-10-28
  • 打赏
  • 举报
回复
好多问题啊
joejoe1991 2007-10-27
  • 打赏
  • 举报
回复
汗 你说的那些我也知道
我还是没有表达清楚么
那个问题我主要想问的是:
对一个对象做什么样的操作就有可能得到它的锁
是不是只有调用这个对象的同步方法或者进入这个对象的同步块里才能得到这个对象的锁?除了这两种情况还有没有别的什么情况能得到这个对象的锁?

sharpyuce 2007-10-27
  • 打赏
  • 举报
回复
不知道你上面说的是不是这种同步:
比如:

class A{
public synchronizied void m1(){
................
}

private Object object = new Object();

public void m2(){
synchronizied(object){}
}
}

class ThreadA extends Thread{
private A a;

public ThreadA(A a){
this.a = a;
}
public void run(){
a.m1();
}
}

public class TestThread{
public static void main(String[] args){
A a = new A();

Thread t = new ThreadA(a);
t.start();
a.m2();
}

}

上面的这种情况m1和m2这2个方法虽然是同步的,但是他们的锁不同,m1得到的是A的一个类对象(实例)的锁,而m2则是的到的synchronizied(object),object的锁,他们2个的同步是独立的,这中情况下,这2个线程不会产生阻塞状态。不知道说没说没明白,是不是你要所表达的意思
sharpyuce 2007-10-27
  • 打赏
  • 举报
回复
to sharpyuce 你回答的几个问题的答案我都不是太满意
第一个:你说的那些我知道 可是没有回答到我问的点上 可能是我没有表达清楚
synchronized(obj)
{.......} 这个同步块 要得到obj的锁才能进入 如果我在这个同步块被线程a执行之前调用了另一个方法b b并不是同步方法 并把obj传为参数

传了进去
这时 我在b方法里对这个obj做什么操作 就算是得到了对象的锁 使的那个线程a不能进入同步块? 你说的进入synchronized修饰的方法就会得到锁
和没说一样嘛 对不?

不知道你到底问的什么?你写个例子?对象的得锁与不得锁 说白了就是和其他同步线程之间的通信,你最好写个例子,或者说个具体实现,直接说怎么得到对象的锁,很抽象。。。
joejoe1991 2007-10-27
  • 打赏
  • 举报
回复
最后一个问题已经明白 谢谢大家的回答 特别是wushui1215 和 johnsoncr

请大家接着帮忙回答一下别的问题哈。

特别是Hibernate的问题

Server ser = session.get(Server.class,request.getParameter("id")); // 对象和session关联

我这样得到一个对象
和Server ser = new Server(); 建的一个对象 程序怎么 知道哪个是和Session关联的而哪个又不是呢? 谢谢回答!@
wuy13862574600 2007-10-27
  • 打赏
  • 举报
回复
由于\是转义字符,而\后接一到三位八进制的数,可表示ASCII中相应的字符,而\012是换行字符,所以
输出结果为sdfdfddd
3123

===============================================
是不是还有表示其他相关操作的字符呢?
\n 后面的n是不是char型,和\一起就成了换行符?

wushui1215 2007-10-26
  • 打赏
  • 举报
回复
别的问题这么多 我懒的看,一眼看到最后一个了 记得我以前看过 就粗略说说:

移位操作符操作的是位,你把两端的数以二进制的形式来运算。低5位是指移位符号右侧二进制码的5个低位。因为2的5次方是32,也就是说5个低位最大可表示为32,也就是最大可以移32位。而int型只有32位。5个低位就够用了。所以“右端的低5位才有用”。。不知道这样解释是否明了?
加载更多回复(11)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧