我正在阅读Java Concurrency in Practice4.3.5会议
@ThreadSafe
public class SafePoint{
@GuardedBy("this") private int x,y;
private SafePoint (int [] a) { this (a[0], a[1]); }
public SafePoint(SafePoint p) { this (p.get()); }
public SafePoint(int x, int y){
this.x = x;
this.y = y;
}
public synchronized int[] get(){
return new int[] {x,y};
}
public synchronized void set(int x, int y){
this.x = x;
this.y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
我不清楚它在哪里说
私有构造函数的存在是为了避免在复制构造函数实现为此时发生的竞争条件(px,py); 这是私有构造函数捕获习惯的一个例子(Bloch和Gafter,2005).
据我所知,它提供了一个getter,可以在一个数组中同时检索x和y,而不是每个都有一个单独的getter,因此调用者将看到一致的值,但为什么是私有构造函数?这里有什么诀窍
可能重复:
Java强制转换操作符如何工作?
Java强制实现
我总是想知道如何使用Java进行对象转换.我理解原始类型它会更像二进制表示级别,但是对象呢?有点像Polymorphism或者dynamic binding在某种程度上会在运行时确定一切吗?例如:
class Parent{
void A(){}
}
class Child extends Parent{
@Override
void A(){}
}
Parent p = new Parent();
Child c = (Child) p;
Run Code Online (Sandbox Code Playgroud)
这是如何在幕后工作的?它是否创建了一个新实例Child?而且,如果你试图施放会发生什么:
Child b = (Child) new Object();
Run Code Online (Sandbox Code Playgroud)
最后一个,在将一个原语转换为包装类时:
Double d = (Double) 3.3;
Run Code Online (Sandbox Code Playgroud)
我知道你没有必要施展它,但如果你这样做呢?在后端发生了什么重大事件?
我想知道,因为编译器内部使用StringBuilder在执行字符串连接时附加2个字符串,那么问题是什么?如果字符串连接已经为你完成了工作,我为什么要使用StringBuilder呢?还有其他具体原因吗?
我想知道在什么情况下我们从接口扩展接口?因为,例如
interface A{
public void method1();
}
interface B extends A{
public void method2();
}
class C implements B{
@Override public void method1(){}
@Override public void method2(){}
}
Run Code Online (Sandbox Code Playgroud)
不等于
interface A{
public void method1();
}
interface B{
public void method2();
}
class C implements A, B{
@Override public void method1(){}
@Override public void method2(){}
}
Run Code Online (Sandbox Code Playgroud)
背后有什么重大原因吗?
我不太明白为什么当我们将两个实例与一个类的相同属性进行比较而不重写equals它将给出的方法时false.但是,true当我们比较一个案例类的两个实例时,它会给出一个.例如
class A(val name: String, val id: Int)
case class B(name: String, id: Int)
object Test {
val a1 = new A('a',1)
val a2 = new A('a',1)
println(a1 == a2) //this returns false
var b1 = B('b',1)
var b2 = B('b',1)
println(b1 == b2) //this returns true
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释原因吗?
有人可以解释为什么Brian Kernighan的算法需要O(log N)来计算整数中的设置位(1).这个算法的简单实现如下(在JAVA中)
int count_set_bits(int n){
int count = 0;
while(n != 0){
n &= (n-1);
count++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
我通过逐个清除最右边的设置位直到它变为0来理解它是如何工作的,但我只是不知道我们如何获得O(log N).
我想知道在处理通过网络传输对象时我们应该选择什么序列化机制.优缺点都有什么 ?
我知道大多数的我们在使用的时候JSON还是XML用于AJAX自传输格式相当多Javascript格式,再加上JSON是相当轻巧的,其占用空间小,因此是Java系列化完全出表的?
java serialization json xml-serialization data-serialization
我是Java的新手,想知道如何对int转换工作?我理解通过采用低32位来实现long很简单,但是对于int(32位)来说,加倍(64位)呢?来自二进制二进制的64位是双精度浮点格式(尾数),那么它如何在内部转换为int?
我想知道一旦它构建完成后我们还能改变它吗?
var O = function(someValue){
this.hello = function(){
return "hello, " + someValue;
}
}
O.prototype.hello = function(){
return "hhhhhhh";
}
var i = new O("chris");
i.hello(); // -> this still returns the old definition "hello, chris"
Run Code Online (Sandbox Code Playgroud)
javascript语句O.prototype.hello = function(){....}不会覆盖并重新定义hello函数行为.这是为什么 ?我知道如果你试图重用参数会有类型错误someValue.
// this will fail since it can't find the parameter 'someValue'
O.prototype.hello = function(){
return "aloha, " + someValue;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它允许在运行时添加功能
O.prototype.newFunction = function(){
return "this is a new function";
}
i.newFunction(); // print 'this …Run Code Online (Sandbox Code Playgroud) 我想知道JSP有没有被编译?为什么我问的原因是因为每当我部署在Web服务器上我的Java EE应用程序,我只看到在WEB-INF文件夹的servlet和豆类类文件,因为它们被编译,但不是说JSP,所以它是如何工作什么是正常请求/响应周期的逻辑流程和大图.
java ×7
casting ×2
algorithm ×1
equality ×1
extends ×1
inheritance ×1
interface ×1
javascript ×1
json ×1
jsp ×1
mantissa ×1
polymorphism ×1
primitive ×1
prototype ×1
scala ×1