黑马程序员---总结的java基础知识

时间:2022-07-19 00:43:09

 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

1、生成句柄过程的详解:Dog myDog = new Dog(); 这里的myDog是一个句柄(遥控器),而new Dog();则在内存里生成了一个Dog对象(即Dog类的实例)
2、继承带来的多态性:同一父类的方法,被两个子类覆盖(overriding)后,就可以用同一个命令做出不同的事情,譬如使用makeNoise()让不同的动物发出不同的叫声。
3、覆盖与重载:覆盖(Overriding)就是重写了父类某方法的具体实现,但不能改变原方法的开放程度或参数。而重载(Overloading)则与继承和多态无关,其实是使用同一名称的不同方法,它们以不同的构造函数来区分。
4、非同类的句柄声明:假设Amimal是Dog的父类,那么可以出现 Animal aDog = new Dog(); 但反过来则不行(Dog aDog = new Animal();),而且被表明为Animal的aDog虽然实质上是一个Dog对象的句柄,但它却无法使用Dog特有的方法,好比一个遥控器被抠掉了其特有功能的按钮,只保留了父类提供的基本功能。要想恢复全部功能的话,需要强制转换回来 Dog d = (Dog) aDog;
5、接口与继承:虽然任何类都只能有一个父类,但Java使用接口实现了多重继承的实质。
6、方法与堆栈:三个方法A、B、C,运行中,A调用了B,B又调用了C,那么A、B、C依次像叠盘子一样从下往上堆起来,在最上层的C实现之后,C被拿走,剩下A、B,接着B实现了,被拿走,剩下A,最后A实现了也被拿走,就OK了。

 7、实例变量与本地变量:实例变量(Instance Variable)是类之中方法之外的变量,相当于类的属性值,它与对象(类的实例)一起(确切说是被对象包含),生活在“堆”(Heap)中。而本地变量(Local Variale)则是某个方法内的变量,被方法包含着生活在堆栈中。
 8、对象的生成:当我们写下 Duck myDuck = new Duck();时,实质上new Duck();中,用关键字“new”声明了创建一个构造函数,缺省地,由JVM代劳生成了public Duck(){}这样的默认的不带参数的构造函数。也可以自己写出(重载)带不同参数列表的构造函数,以初始化对象。但是,一旦你写出了带参数的构造函数,那么在无参数的情况下JVM也不再为你自动构建,这时就需要你自己再写个不带参数的构造函数了。
9、构造函数链:在继承体系中,Hippo继承至Animal,Animal继承至Object,那么一个Hippo的构造函数里,理所当然也得包括它的两个超类的构造函数。当然如果你不管它们也可以,JVM又会体统默认的超类构造函数super(); 而你也可以手动修改它,给超类构造你所需要的初始化参数值。
10、this与super:使用this()来召唤同一个类中重载的另一个构造函数,使用super()来指代超类的构造函数,但两者不能同时出现在构造函数中,而且this()必须是包含它的构造函数的第一句话。
11、垃圾回收机制(gc):当一个在堆里生成的对象失去与句柄的关联时(或者因为句柄作为本地变量完成任务消失了,或者原句柄被指向了新的对象,或者原句柄被赋值为null),gc就会自动在适当的时机让该对象消失,以释放内存。
12、静态方法:静态方法不需要生成对象,只需要直接call类就OK了,如int x = Math.min(56,12); ,而且静态方法不能直接调用非静态变量或非静态方法(需要通过对象句柄0来调用)。(可为什么要使用静态方法?)

13、静态变量:静态变量在类被载入时生成并初始化,为同一个类的所有实例对象所共有,而不像非静态变量那样人手一份。(它的生存周期呢?)
14、Final:使用Final关键字,可以使一些变量值无法被修改,方法无法被覆盖,类无法被继承。其中一个例子就是让圆周率值固定,public static final double PI = 3.1415926
15、原始变量与数值对象:在Java 5.0版本以前,不能像对待数值对象一样对待原始变量(primitive),譬如不能在ArrayList里添加一个int变量i,而应该先用 Integer iWap = new Integer(i);来转换成Integer对象。而在Java 5.0版本以后,就可以自动识别混和使用了,但像ArrayList还需要用ArrayList listOfNumbers = new ArrayList(); 来事先确定类型。
16、显示格式:使用“format”方法,可是输出指定格式的字符、数字和日期。
17、静态导入:Java 5.0以后,原本的System.out.println(); 或Math.min();这些静态方法的类可以静态导入,就是JVM在你不知不觉中已经自动加上了 import static java.lang.System.out; improt static java.lang.Math.*; 这样的语句,使得程序员可以直接写成out.pringln();或min(); 所以下回看到这种没有主语的静态方法,就不要奇怪咯。
18、异常机制:有时方法运行中可能发生无法确切地预料地问题,譬如需要的文件不存在,这时就利用异常机制来返回一个问题说明。在API里,一个方法下面有关于它的Throws的说明,那么我们在使用这个方法时就要用try/catch语句来捕捉并处理可能发生的异常,或者在方法后声明抛出一个同样的异常来回避处理,但这个方法就变成了有风险的方法,下一个调用到它的方法就需要捕捉处理或回避处理,如此传递下去。但有意思的是,所有继承自RuntimeException的异常,不管你是否捕捉或回避,编译器都不会理会你。
   19、多个异常:一个方法可以抛出或处理多个异常,但异常作为对象也是有其继承体系的,在catch多个异常时,要注意顺序。子类的异常必须放在其超类异常前处理。

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------