没有合适的资源?快使用搜索试试~ 我知道了~
Java 比较全的笔记
资源推荐
资源详情
资源评论
Java
C/C++的区别
被 f'inal 的类没有子类
子类不继承超类构造函数,要用 super()
Java 原理
整体运作结构
继承与接口区别
接口是声明一种对象间传递消息的协议,这样可以针对接口编程而不必知道底层实现,
好处就是在你底层代码发生变动时,只要接口不变就可以改变底层代码而不必改变调
用者的代码
继承的概念不用多说,很好理解。为什么要继承呢?因为你想重用代码?这绝对不是理
由,继承的意义也在于抽象,而不是代码重用。如果对象 A 有一个 run()方法,对象 B
也想有这个方法,所以有人就 Class B extends A。这是不经大脑的做法。如果在 B 中实
例化一个 A,调用 A 的 Run()方法,是不是可以达到同样的目的?如下:
Class B
{
A a=new A();
a.run();
}
这就是利用类的聚合来重用代码,是委派模式的雏形,是 GoF 一贯倡导的做法。
继承的意义何在?其实这是历史原因造成的,最开始的 OO 语言只有继承,没有接口,
所以只能以继承来实现抽象,请一定注意,继承的本意在于抽象,而非代码重用(虽然
继承也有这个作用),这是很多 Java 烂书最严重的错误之一,它们所造成的阴影,我至
今还没有完全摆脱,坏书害人啊,尤其是入门类的,流毒太大。什么时候应该使用继
承?只在抽象类中使用,其他情况下尽量不使用。抽象类也是不能实例化的,它仅仅提
供一个模版而已,这就很能说明问题。
在 abstract class 方式中,可以有自己的数据成员,也可以有非 abstarct 的成员方法,
而在 interface 方式的实现中,只能够有静态的不能被修改的数据成员(也就是必须是
static final 的,不过在 interface 中一般不定义数据成员),所有的成员方法都是
abstract 的。从某种意义上说,interface 是一种特殊形式的 abstract class。
String 对象
1,String s = new String("oops!");解释为新建一个引用 sz 指向 String 对象,
String t = s;t 也指向引用 s;
2,那考虑到==,与 equals 的区别,
String r = new String("oops!");
那么 r==t;r==s;r.equals(s);s.equals(t);的最终结果呢?
看我写的一段源代码;
class test
{
public static void main(String args[])
{
String s = new String("oops!");
String t = s;
String r = new String("oops!");
boolean i,j,k;
i = (r==t);
j = (r==s);
k = (t==s);
System.out.println("r==t:"+i+" r==s:"+j+" t==s:"+k);
i = r.equals(s);
j = t.equals(s);
System.out.println("r.equals(s):"+i+" t.equals(s):"+j);
}
}
结果:
r==t:false r==s:false t==s:true
r.equals(s):true t.equals(s):true
可以看出“==”是比较引用这个“指针”;而“equals”则是比较 String 的值;
3,String s = new Srting("oops!"); String s = s + "ooh!";
由于 Sting 是不可变类,上面的代码会产生两个类,第一个类会被抛弃!所以建议适当
使用 StringBuffer;
s = "Initial Value"; s = new String("Initial Value");
这两个的区别就在于后者每次都会调用构造器,生成新对象,性能低下且内存开销大,
并且没有意义,。所以~~这个暂时还不懂~
至于为什么要把 String 类设计成不可变类,是它的用途决定的。其实不只 String,很多
Java 标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计
不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,
比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些
缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。
还有扩展知识,很重要的。他讲得比我好,就直接给链接吧!
http://www.cnblogs.com/Mr-Hannibal/archive/2012/05/18/2508094.html
原文://
Java 六大必须理解的问题
对于这个系列里的问题,每个学 Java 的人都应该搞懂。当然,如果只是学 Java 玩玩就
无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归
初学者行列。内容均来自于 CSDN 的经典老贴。
问题一:我声明了什么!
String s = "Hello world!";
许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个 String,内
容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一
半的人大概会回答错误。
这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为 String 的任何对象,
目前指向"Hello world!"这个 String 类型的对象。这就是真正发生的事情。我们并没有声
明一个 String 对象,我们只是声明了一个只能指向 String 对象的引用变量。所以,如
果在刚才那句语句后面,如果再运行一句:
String string = s;
我们是声明了另外一个只能指向 String 对象的引用,名为 string,并没有第二个对象产
生,string 还是指向原来那个对象,也就是,和 s 指向同一个对象。
问题二:"=="和 equals 方法究竟有什么区别?
==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则 a==b 将是 true。
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则 a==b 将返回 false。
根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,
而不是对象本身。a 和 b 都使用了 new 操作符,意味着将在内存中产生两个内容为
"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a 和 b 的值其实是两
个不同的内存地址的值,所以使用"=="操作符,结果会是 false。诚然,a 和 b 所指的对
象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是 equals 方法做的事。
看一下 Object 对象的 equals 方法是如何实现的:
boolean equals(Object o){
return this==o;
}
Object 对象默认使用了==操作符。所以如果你自创的类没有覆盖 equals 方法,那你的
类使用 equals 和使用==会得到同样的结果。同样也可以看出,Object 的 equals 方法没
有达到 equals 方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类
的创建者决定,所以 Object 把这个任务留给了类的创建者。
看一下一个极端的类:
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}
}
我覆盖了 equals 方法。这个实现会导致无论 Monster 实例内容如何,它们之间的比较
永远返回 true。
剩余46页未读,继续阅读
资源评论
woaiangela
- 粉丝: 2
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功