5,应该不可以,synchronized用在方法上就是把这个对象锁死了,在它退出之前别的线程是无法访问这个对象的,就更不用提它的方法了, 如果是这样写 class A { String a = "a"; public void test1(){ synchronized(a){ ... } } public void test2(){ } } 一个线程访问test1的时候另一个线程是可以访问test2的
to:qljsd(我本善良) orverride是覆写,overload是继承,构造函数只能被继承,不能被覆写;只测试下是否可继承和覆写用写这么多吗? class Y { public Y(){ } }public class X extends Y{ public String Y(){ return "overload is ok"; } public Y(){ } } 看下哪行报错就知道了
2,引用
3,equals()
4,可以
5,可以
6,正确
2.我认为还是传的对像的引用,如果对像可变,像StringBuffer.
3.用的是equals(),这是API的回答
4.构造器Constructor是不能被override,但能被overload
5.应该不可以
6.对.
不统一)
第二,引用一个强人的观点 jamesfancy()边城狂人(James Fancy) :
“1. 首先明白参数的传递实质是压栈和出栈的过程。即在调用一个方法(或说子程序)之前,先将需要传入的参数压栈,然后执行代码的指针跳转到方法的起始位置,进行出栈操作,原来压入栈中的参数取出置入方法中的局部变量(这里即参数变量)。2. 对于基本类型,传递的参数都是对原变量值的拷贝。每一个基本类型的数据都是以字节形式保存在内存中的(如整型是4个字节,长整型是8个字节等),压栈时会将内存中的变量值按字节存入栈中,而原变量的值(即保存在原位置的内容)并不改变——内存中的数据是保存在堆中的,参数是保存在栈中的,总不可能把内存块搬过来是吧……所以一定是拷贝的!3. 先搞明白引用的实质。当一个对象创建后,它的内容(N个字节)被保存在内存中。它的位置,即一个地址址,被返回,保存在一个引用变量中——所以实际上一个引用变量保存的只是某个类的地址,而引用的类型,并不会改变引用变量的大小,它只是说明一个对象的数据大小。这样,就可以从引用变量找到对象的起始地址,再通过类型,获取对象数据。而通过引用调用的方法,属性这些东西,就是通过在这块内存地址中的位置偏移来寻址的。(当然,实际的操作会比我说的复杂得多,因为还涉及向上向下传型等问题)4. 引用参数的传递,实际上就是传递的引用变量的值,这和传递基本类型的值原理是一样的。但由于引用变量其值的特殊性(只是一个地址,这个地址上保存的才是对象的实际数据),所以,引用变量的值传入参数变量后,通过参数变量对对象的修改(在实际地址上的操作)自然就会影响到同一个对象。——这里,外面的引用变量和参数变量,本身是不同的,但是它们的值相同,都是对象的地址。”
5,可以的.可以访问非该对象的synchronized 方法
如果是这样写
class A {
String a = "a";
public void test1(){
synchronized(a){
...
}
}
public void test2(){ }
}
一个线程访问test1的时候另一个线程是可以访问test2的
2。引用。怎么说呢。java鄙弃这种说法。。
3。equals
4.可以
5可以
6可以
对于第5题应该这样回答
其它线程可以进入该对象的unsynchronized方法
而不能进入该对象的其他synchronized方法
切记类似第1题,大家可以把所有的修饰符都组合一下
看看哪些可以哪些不可以第2题同coolcoolpig(臭美猪) ,所谓传值,传引用
在大家的理解方面只不过是语义不同罢了
只要理解了究竟是怎么传递参数的
不要从词汇上区分什么传值,传引用第4题构造器Constructor是不能被override,但能被overload
obj.setProperties();//这样当然会影响原来对象的值
obj = getNewObj(); //这样你改变的是传递进来的这个“指针”而已,即obj已经指向一个新的地址中,原来的对象还是在原来的地址中没有变化,当然不会产生内容的改变
如果我的答案与标准答案不同,是你的标准答案错了。我的回答可能有错的,但如果说全错不可能。
package mytest;public class OverrideContractor { private String name; public String getName() {
return this.name;
} public OverrideContractor() {
System.out.println("OverrideContractor()");
}
public OverrideContractor(String name) {
this.name = name;
System.out.println("OverrideContractor(String name)");
}
public static void main(String[] args) {
}}package mytest;public class OverrideContractor2 extends OverrideContractor { private String name; public String getName() {
return this.name;
} public OverrideContractor2() {
System.out.println("OverrideContractor2()");
} public OverrideContractor2(String name) {
this.name = name;
System.out.println("OverrideContractor2(String name)");
} public static void main(String[] args) {
OverrideContractor oc = new OverrideContractor2("name");
}}
第2题 引用传递 因为除基本类型外 所有的参数传递是引用传递 传递的是该对象的起始指针
第3题 equals() ==比较的是两个对象是否相等 equals比教的是不是指向同一地址
第4题 不可
第5题 访问同步方法具体看他的同步旗标志 是同一旗标志的不则不能进入 不同的则可
但类中的同步方法一般以this为标志位 所以
第6题 错 a.equals(a1)==true则他们的hashcode一定相等
orverride是覆写,overload是继承,构造函数只能被继承,不能被覆写;只测试下是否可继承和覆写用写这么多吗?
class Y
{
public Y(){
}
}public class X extends Y{ public String Y(){
return "overload is ok";
}
public Y(){
}
}
看下哪行报错就知道了
有何区别?
------------------------------------------------------------------------
equals()
== 比较对象的内存地址
equals则可以定制两个对象值相同(x.equals(y) == true),但却可有不同的hash code
------------------------------------------------------------------------
这句话对。构造器Constructor是否可被override?
------------------------------------------------------------------------
构造器只能被overload,而不是override当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,
那么这里到底是值传递还是引用传递?
------------------------------------------------------------------------
应该是引用传递