==========================================================
author :Vange
create-time: 2010-03-11
http://hi.baidu.com/romeroad/
==========================================================
为了生存,我又把Java拿出来拜了。一看回面向对象,心里不断浮现以前的一幕幕,感谢Java带给我编程的乐趣,带领我进入编程的世界,如果不是你,我一直都在外面徘徊着。
切入正题,今晚拿了别人的Java书过来啃,发现经过其他语言的洗礼后,再回头看Java,看得比以前更加深刻。JAVA已经帮你完成了很多事情,你只需要去构造一个对象,然后一个点“.“就完成了。一直被她伺候着而没有真正地去了解过她。
啃书是好的,读书百遍其义自见,这不问题就出来了。
1、void 能拿来定义类型吗?
2、final可以修饰局部变量?
3、transient、volatile、native、strictfp 你都用过了吗?
4、null能用来赋值int吗?
5、当父类引用指向子类的对象后,调用一个实例方法名,而这个方法在子类被重写过。那这个操作会出现什么呢?
6、包里面类成员无修饰符时,包外子类能访问吗?
7、Java 是传值还是传引用?关于String的疑惑 (今天碰到的问题,有兴趣就看一下,我只引用一段代码)
一个个解决吧:
(突然发现Eclipse老伙伴已经失去在桌面的地位了)
1、void 能拿来定义类型吗?
void 是不能拿来定义类型的。
2、final可以修饰局部变量?
测试可以通过,就像C++的Const,但是不同的时,Java定义了Final的引用后,可以再赋值一次。
看代码:
final int t;
t = 10;
// t = 11; //这个会错哦。
System.out.println(t);
3、transient、volatile、native、strictfp 你都用过了吗?
关于transient
//引用 http://java.sun.com/docs/books/tutorial/javabeans/persistence/
All fields except static and transient fields are serialized. Use the transient
modifier to specify fields you do not want serialized, and to specify classes that are not serializable.
Default serialization will not serialize transient
and static
fields.
在默认的序列化过程中,除了被transient和Static修饰的属性或对象,其他属性和对象都将被序列化。
当然这个是在默认的情况下:我们可以改变它,重写writeObject 和readObject。
但一般序列化都是一个复杂的过程,一般没有必要去重写它。除此还有接口:Externalizable
关于volatile
//引用 http://www.ibm.com/developerworks/cn/java/j-jtp06197.html
Volatile 变量 具有 synchronized
的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。
关于native
用来定义一个natvie方法(本地方法)。例如Java要调用Win32API, JDK是没有提供的,这样就可以利用本地接口,像C编写的动态链接库去调用Win32API函数了。具体操作可以参考:http://blog.youkuaiyun.com/iori97king/archive/2007/05/27/1627352.aspx 另一方面这个就是JNI啦,哈哈,对JNI理解不清楚。
关于strictfp
修饰类和方法,意思是FP-strict,精确浮点,符合IEEE-754规范的。当一个class或interface用strictfp声明,内部所 有的float和double表达式都会成为strictfp的。Interface method不能被声明为strictfp的,class的可以。
更多可以参看:http://www.javaeye.com/topic/82640
4、null能用来赋值int吗?
int ii = null; 这样是错误的,null是一个引用类型。”引用类型“只能赋值给引用,像基本类型是无法赋值的。
像Integer i = null; 这样是可以的。 在调用函数传值过程就清楚,基本类型是复制传值过去。而引用则直接传引用过去。 看过C语言后才明白C语言才是”纯传值“调用。
5、当父类引用指向子类的对象后,调用一个实例方法名,而这个方法在子类被重写过。那这个操作会出现什么呢?
看代码:
看来B没有忘记自己是谁: hello, i'm b
6、包里面类成员无修饰符时,包外子类能访问吗?
当没有修饰符时,包外是无法访问的。更加没有包外的子类了。呵呵
7、Java 是传值还是传引用?关于String的疑惑
(今天碰到的问题,有兴趣就看一下,我只引用一段代码)
C语言版的String传值:
StringBuffer传值: