- 浏览: 330056 次
- 性别:
- 来自: 南京
最新评论
文章列表
浅克隆:指对象A本身被克隆成新对象B,但A的属性没有被clone,只是把A属性所指对象赋值到B对应的属性上,A与B的相同属性都引用到同一个对象
深克隆:是指对象A本身被clone成新对象B,同时A的属性也被clone成新对象,赋值给B的对应属性,A与B的相同属性都引用到不同的对象
可见如果要复制的对象只含有基本数据类型和String类型,那么深克隆和浅克隆是一样的
在java中默认是浅克隆,而且一个对象要克隆就是调用Object的clone()本地方法,它所属类一定要实现Cloneable接口(该接口内部什么都没有),否则会抛出java.lang.CloneNotSuppo ...
string对象的对比
- 博客分类:
- java基础
两个对象的对比 a == b 如果a跟b指向同一个对象返回true,否则返回false
Object的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
可见是等同于“==”的对比。
但是String重写了equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
...
方法中对传入参数的修改对参数对象的影响
- 博客分类:
- java基础
public class Test{
public static void main(String[] arg){
Person aaaaaaaaaaaaa = new Person();
change(aaaaaaaaaaaaa);
}
public static void change(Person p)
{
p.name = "mao";
}
}
public class Person{
String name;
}
对上面Test编译产生如下java指令
Classfile /F:/T ...
关系数据库设计三大范式
- 博客分类:
- oracle
关系数据库表中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库表设计所需要满足的规范。只有理解数据库表的设计范式,才能设计出高效率、优雅的数据库表,否则可能会设计出错误的数据库.
范式对数据库表的规范要求是递增的。目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。
范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦,但是操作困难,因为需要联系多个表才能得到所需要数据,而且范式越高性能就会越差。要权衡是 ...
数据库表设计中的超键、主键、候选键
- 博客分类:
- oracle
1.定义
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键
2. ...
关于变量标识和数组标识的地址问题
- 博客分类:
- c
变量是指一块内存,这句话怎么理解?
void main()
{
int a= 2;
int *p = &a;
}
//编译得到
main:
pushl %ebp
movl %esp,%ebp
subl $16,%esp
movl $2, -8(%ebp) // int a = 2;
leal -8(%ebp), %eax // int *p = &a;
movl %eax,-4(%ebp)
leave
ret
at&t汇编,源数据在前目标在后。
①在编译 ...
c没有单独为字符串设置一种数据类型,而是用字符数组来声明它;
如char a[2] = {'a','b'}; char b[] = "ab";
第一中声明方式有可能出问题;
c中默认字符串是以‘\0’结尾的,printf(“%s\n”,a),可能打印出ab后面跟着一些乱码,而printf("%s\n",b)没有这种问题,因为在声明的时候默认在后面加上‘\0’
printf中用%d输出一个float的结果
- 博客分类:
- c
在c中如果有这样一段代码
float f = 125.5;
printf("%d\n",f);
那么他输出的绝对不是125.5;原因是c不像java能够自动隐式转换,除非你在printf函数中的f前加一个(int)进行强转可以得到你想要的结果,那到底像上面那样写会得到什么结果又为什么呢?
了解一下几点知识就行
①intel CPU是little-endien
②printf这种情况下会把float转成double
③浮点数表示法
可以分析一下
125.5用浮点数表示法为1.1111011*2^6,在double中阶码为6+1023=102 ...
以float为例了解浮点数
- 博客分类:
- 计算机
flaot浮点数二进制表达由三个部分组成:
sign(1bit):表示浮点数是正数还是负数,0表示正数,1表示负数
exponent(8bit):指数部分。类似科学计数法中M*10^N中的N,只不过这里是以2为底数,需要注意的是,这部分是要以2^7-1即127做偏移调整的,即指数实际值等于2^E-127
mantissa(23bits):基数部分。浮点数具体数值的实际表示
举个例子:以5.5为例
①5.5用二进制表示为101.1
②将其规格化(Normalize),原理就是保证小数点前只有一个bit。等到如下表达式:1.011*2^2
③填充到各部分
sign:正数所 ...
java中枚举声明需用到enum关键字简单的如:
public enum TestEnum {
Mon,
Tue,
Wen,
Fri
}
但是我们查看一下编译后得到的汇编就能知道,enum编译后得到的还是一个class,现在用javap -verbose TestEnum命令查看编译得到的class文件:
Classfile /F:/TestEnum.class
Last modified 2017-5-8; size 868 bytes
MD5 checksum 485a9071bf44ca9406beceea0dbca950
Compiled ...
WeakCache详解
- 博客分类:
- java基础
WeakCache的作用看名字就知道,是一个缓存类,Weak指的是它的key和value是弱引用。jdk的动态代理就使用WeakCache存储代理类。
WeakCache<K,P,V>中,K代表key值,P代表参数,V代表存储的值。此类用于缓存{(key,sub-key)-->value}键值对。具体实现是一个ConcurrentMap<Object,ConcurrentMap<Object,Supplier<V>>>(Supplier是一个接口,就一个get方法用于获得值,不过是V的包裹类),第一个Object就是key(这里表 ...
Object的hashCode方法是根据对象内存地址返回一个hash值,但是很多类都会重写hashCode方法。
JDK在System类中提供一个方法public static native int identityhashCode(Object x)
不管给的参数对象的类是否重载了hashCode()方法,identityHashCode方法都会返回Object类默认hashCode()方法会返回的值
父类和实现的接口有相同的方法
- 博客分类:
- java基础
转自:http://www.cnblogs.com/bethunebtj/p/4676063.html
Java子类的父类和要实现的接口有相同的方法/函数会冲突吗
答案是,不会。子类优先实现父类的方法,虽然父类的方法和接口的方法长得一模一样。
double-check
- 博客分类:
- java基础
在Effective Java一书中提到double-check模式,并指出该模式在java中通常并不适用。该模式的结构如下
public Resource getResource(){
if(resource==null){
synchronized(this){
if(resource==null){
resource = new Resource();
}
}
}
return resource;
}
该模式是对下面代码的改进
public synchonized Resource getR ...
Reference类是所有引用对象(包括WeakReference、SoftReference、PhantomReference等)的抽象基础类。这个类定义了所有引用对象的公共操作。因为引用对象的实现是跟垃圾收集器紧密关联的,所以这个类不应该被直接继承
ReferenceQueue,引用对象在合适的可达性状态(Reference指向的对象不存在任何强引用)被探测到时,由垃圾收集器将其添加到所注册的那个ReferenceQueue中
我想只要说清楚这两个类的设计上的两个关键点就足够了解它们了
1.如何实现队列
ReferenceQueue是一个先进后出(FILO)的队 ...