C06(高级语言特征)

来源:互联网 发布:淘宝卖家泄露买家信息 编辑:程序博客网 时间:2024/05/16 14:10

描述static变量,方法和初始程序
static的变量在所有类的实例中共享,如果在某个实例里改变了它的内容,则在所有的实例中都发生改变,因为static变量是存放全局区域,这个区域对于所有的实例只有一个,所以当这个区域的变量改变内容,则在所有的实例中都会取到改变后的内容。static方法则是在对象被实例前就已经存在可以使用的,如果定义成为public修饰符后,就可以在对象不被实例化的情况下就直接调用它,这也是为什么main函数要写成static的,因为它是一个程序的入口,是所有程序的开始,如果不写成static的,那么不实例它就没有办法进入程序,在所有程序都没有开始运行的时候,是没有实例对象的,就没有办法开始程序了,写成static后,在没有任何对象被实例化的时候,编译器直接就可以找到main方法开始执行。而非静态变量或方法只限于实例,并只能通过实例引用被访问。说到main方法,还要注意的是main()方法其实并不属于哪个类,也就是说,不是你把main方法写到哪个类,就可以直接使用该类的变量,这样做是会被编译错误的,除非这个变量或者方法是static的,则可以不用写类名而直接使用。还需要注意的一点是,static变量不能在某个方法中定义,构造函数也不行,但是可以在方法中赋值。静态的方法不能在子类中被覆盖成为非静态。方法程序体中不存在的代码在static中类可以包含该代码,这是完全有效的。当类被装载时,静态块代码只执行一次,如果有一个以上的静态块,则按照在类中出现的顺序被执行,也就是说你可以在类中写下static{}并在{}内写下函数,它在类被装载的时候执行一次,就好像构造函数一样。


描述final类,方法和变量
被定义为final的类不能生成子类,被定义成final的方法,不能被覆盖,被定义成为final的变量则表示是常数,在第一次被赋值之后(可以是定义的时候就赋值,也可以是定义后在构造器中赋值),就不能再被改变了。如果是reference type的变量定义为final,则是该变量不能再指向任何其他对象,但是可以改变对象的内容,因为final的只是reference的内容。

确认降级类并解释如何从JDK1.0升迁到JDK1.1到JDK1.2
降级就是过时的构造函数和方法调用,过时的方法和构造函数由具有更标准化的命名规则的方法所取代,所以在编译的时候,使用javac -deprecation MyFile.java就可以报告在降级过的类中使用的任何方法。

描述如何应用收集和反射
收集(或容器)是代表一个对象组的单个对象,被认为是它的元素。收集典型地处理许多对象的类型,所有的类型都有一个特殊的种类(也就是说,它们都是从一个共同父类型延续来的)。Java编程语言支持收集类Vector,Bits, Stack,Hashtable ,LinkedList等等。例如,Stack实现后进先出(LIFO)的顺序,Hashtable提供一个相关的对象数组。


abstract类和方法
声明方法的存在而不实现它的类叫做抽象类,有时候在开发中,要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该行为。而是在子类中实现该方法。不能创建abstract类的实例,然而可以创建一个变量,类型是一个抽象类,并让它指向具体子类的一个实例,不能有抽象构造函数或者抽象静态方法。

何时使用接口
由于Java是单根继承,这种机制本身上使得Java有了非常清晰的思路,但是也带来了一些不便,比如我们想实现好几个机体的特征,但是我们不能extends这几个类,所以有了interface,它是abstract类的变体,接口中所有的方法都是抽象的,变量要是常数(static final),没有一个程序体,这样,就克服了Java的单根继承的局限性,同时使得Java具有更大的灵活性,同时,Java的接口可以实现多根继承,而多根继承也紧紧之在接口中才能使用。同抽象类一样,不能创建接口的实例,但是可以创建一个变量,类型是一个接口,并让它指向具体子类的一个实例。
在声明方法,期望一个或者更多的类来实现该方法,在决定一个对象的编程界面,而不解释类的实际程序体,在捕获无关类之间的相似性而不强迫类关系的时候,可以使用接口来解决。同时,在编写方法的时候,接口可以作为参数来传递那些实现了该接口的类的实例。

解释如何以及何时使用内部类
关于内部类的使用要注意的是在内部类的变量不能是static,内部类本身可以是static,只有在内部类是static的情况下,才允许对变量或方法定义成为static的,内部类可以使用外部类的变量,但是如果内部类定义了与外部类相同名字的变量,则在内部类使用的时候,只会用到内部类的变量。内部类可以定义成为atstract。

描述==和equals()之间的不同
==比较的是两个对象是否指向相同的对象,而equals()则表示两个对象的内容是否相等。

如何保持一个类或方法不被分成子类或被覆盖?
在定义类或者方法的时候,只要将类或方法定义加上final修饰符就可以了。
 

原创粉丝点击