初学Java的新手,虚心请教一些问题.望高手回复.谢谢!
我在看孙鑫的视频教程,其中遇到了一些问题
1、final類是為了不讓別的類繼承,那爲什麽還聲明成public的?
2、解釋下:静态方法和静态变量是属于某一个类,而不属于类的对象,那为什么还可以用类的对象obj去调用静态的方法method(),如obj.method()。
3、静态不能调用非静态的,那为什么main函数是静态。这样的话岂不是main函数不能调用别的非静态的函数了?
4、教程里的子类的protected可以被访问,但是我自己作的测试(jdk1.6版的环境下)protected不能被访问,为什么?(我設置在Test2裏面創建一個Test的對象,然後訪問Test裏面的protected對象不可以。但是如果改成Test2的對象就可以)
5、垃圾回收順序。我創建4個對象1、2、3、4,而回收時卻按4、3、2、1的順序收,教程裏是按照1、2、3、4的順序收的
6、为什么定义static静态内部类时,在产生这个内部类的对象的时候就不需要同时存在一个外部类的对象了,为什么?
7、接口中所有的方法都是public abstract。那为什么还得有接口interface,直接声明成public abstract class不也可以实现?
8、String对象是常量对象,它的值是永远不能改变的。怎么理解这句话?
9、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
问题比较多,希望能给予耐心解答。再次表示感谢!!
------解决方案--------------------public只是为了能在保外访问这个类
------解决方案--------------------2,静态方法和静态变量属于整个类,不只属于某个对象.是公共的.大家都可以调用
------解决方案--------------------告诉你第8个问题的答案吧
String类使用了final关键字修饰
这样的话就不能修改 每次对他的操作都是新建一个String类
他使用了一个单例模式
------解决方案--------------------因为super()调用了父类的默认构造函数
------解决方案--------------------7、接口中所有的方法都是public abstract。那为什么还得有接口interface,直接声明成public abstract class不也可以实现?
java支持的是单继承,但它可以同时实现几个接口。这样的话,定义接口的可用性就较高了。
------解决方案--------------------1、final類是為了不讓別的類繼承,那爲什麽還聲明成public的?
答:声明为public是为了让别的类使用它,比如常用的System;
---------------------------------
2、解釋下:静态方法和静态变量是属于某一个类,而不属于类的对象,那为什么还可以用类的对象obj去调用静态的方法method(),如obj.method()。
答:static一般定义工具函数,但类实例也可使用它,类的实类与类对象(class object)都是
可以使用的,类对象是个模板,其中定义static是为一了定程度上消除OOP开销大的问题,静态方法可以理解为方法指针。
---------------------------------
3、静态不能调用非静态的,那为什么main函数是静态。这样的话岂不是main函数不能调用别的非静态的函数了?
答:非静态方法又是实例方法,必须调用具体对象的,static main是不能直接调用类的非静态方法,但可调用实例的非静态方法;
main是程序的入口,在vm调用其时,并不能保证类可生成对象,所以必须为static;
---------------------------------
4、教程里的子类的protected可以被访问,但是我自己作的测试(jdk1.6版的环境下)protected不能被访问,为什么?(我設置在Test2裏面創建一個Test的對象,然後訪問Test裏面的protected對象不可以。但是如果改成Test2的對象就可以)
答:同包内,异包要public
---------------------------------
5、垃圾回收順序。我創建4個對象1、2、3、4,而回收時卻按4、3、2、1的順序收,教程裏是按照1、2、3、4的順序收的
答:VM的GC机制是不确定的--sun未对此做保证,你通过观察每个对象的finalize方法执行即可看出;
---------------------------------
6、为什么定义static静态内部类时,在产生这个内部类的对象的时候就不需要同时存在一个外部类的对象了,为什么?
答:同static method,做方法指针想。
---------------------------------
7、接口中所有的方法都是public abstract。那为什么还得有接口interface,直接声明成public abstract class不也可以实现?
答:可以implements多个interface,但只能extends一个abstract class;
interface一般用于定义“规则”,abstrace class定义模板;
---------------------------------
8、String对象是常量对象,它的值是永远不能改变的。怎么理解这句话?
答:一但创建,即不变---在任何并发访问中,原子类型一般是这样;
引用类型,即对象,则不保证,所以存在同步问题;
---------------------------------
9、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
答:父类肯定会有,都是Object的subClass.
---------------------------------
从楼主提出的问题看你还是认真思考了的,问的很好!
这些问题及我的回答我收录到www.NetJava.cn的论坛上了。
------解决方案--------------------在看视频的同时最好买本书来看看,例如 thinking in java 你就会好理解很多的
------解决方案--------------------关注。。。。
------解决方案--------------------