这篇博文以及之后的一系列文章都是自己历时一个半月Java学习的总结。自己还没有作过什么真正的Java项目,对Java的理解水平自己估计也只有大学里期末应对考试的程度。所以有谁不凑巧看到这些博文请你一带而过,这里的文章仅仅是自己的一个学习总结,还有一点就是我本身已经学过C语言并且自认为功力还算可以所以在说Java时像什么变量啊、运算符啊、流程控制语句啊我就不会说了,太没劲了。
相对来说Java的学习还是比较轻松的。Java既是一门面向对象的语言,同时也是一个平台,它将许多底层较为复杂一般程序员难以实现或者实现起来很繁琐的东西都封装成API供程序员使用。在我看看来对Java的学习也多集中在JavaAPI的学习上。而对学习JavaAPI,我的心得是先”拿来主义“,不管怎样先用着再说,之后在使用过程中会慢慢对一些功能的底层实现有着希望理解的需求,那么这时结合自己的使用经验理解这些功能背后的设计思想及实现手段理解起来会更加容易。
言归正传,我们从面向对象中类和对象的关系开始。类就是对现实中某类共同特征的抽象描述,它就相当于建造房子的图纸。而对象就是某个类描述事物的实实在在的个体,就像按照某张图纸建造的房子,对象是类的具体存在。用面向对象的思维去解决问题,就是先考虑什么样的人可以做,也就是设计相关功能的类,再让这类人中具体哪个去做,就是由类实例化一个对象去做具体事务。类的设计一般只关心3样东西:类名,事物应有的属性也叫成员变量,以及事物具有的功能也叫成员方法。这里设计类的功能要坚持这样一个原则:谁最清楚这个功能的行为怎么做就把这个功能放在这个类中设计。
面向对象有三大特性:封装(Encapsulation)、继承(Inherit)以及多态(Polymorphism):
封装(Encapsulation):隐藏功能实现的具体细节仅对外提供访问接口以使使用者访问或调用。封装的好处:将变化隔离、便于使用、提高代码的复用性、加强安全性。
继承(Inherit):一个类获得了另一个类的成员方法和成员变量。继承者叫子类,被继承者叫父类。值得注意的是Java只支持单继承,不支持多继承因为这会带来安全隐患,例如当多个父类有同名功能但功能内容不同时,子类继承这些父类调用这个功能时该怎样选择呢?不过Java支持多层继承,然后形成一个继承体系,Java还支持多实现。关于实现下面有具体说明。继承的作用:提高代码的复用性、使类和类之间产生关系,有了这个关系才有了多态的特性。
多态(Polymorphism):某类事物的多种存在形态。多态有个前提:必须是类与类之间有关系,要么继承要么实现,通常还要求子类对父类成员方法进行覆写。Java中多态的基本体现:父类引用可以指向自己子类的对象、父类引用也可以接受自己的子类对象。可以想见多态大大提高了程序的扩展性。
明确两个概念重载(Overload)和覆写(Override):重载(Overload):在同一个类中允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。区别重载函数与函数返回值或前面的修饰符无关,只看参数列表。覆写(Override):当两类有继承关系,子类保留父类方法的声明但改写内部具体的实现。
一些关键字的使用说明(同时通过对这些关键字的说明为主线来介绍Java语言基础部分要注意的地方):
Package:定义一个类所属的包。一个完整的Java类名由包名.类名组成。包名的一般要求:所有字母都要小写、一般情况下包名是你公司域名倒过来写。
Import&Import static:Import向Java程序中导入所使用类的包,Import static导入所使用的静态类。好处是简化完整类名的书写。
Class:用来定义Java中的类。
Abstract:用来定义Java中的抽象类或抽象方法。抽象方法是只有函数定义没有函数体的函数。抽象类是Java中一个特殊的类具体表现为:抽象类不能够生成对象、如果一个类中包含有抽象函数,那么这个类必须被声明为抽象类、如果一个类中中没有抽象函数,这个类也可以被声明为抽象类、抽象类中的方法要被使用,必须由其子类覆写所有它的所有抽象方法后在建立子类对象调用,子类只覆写了部分抽象方法,那么其子类还是一个抽象类。
Interface:用来定义接口类。接口同抽象类一样也是Java中特殊的类。接口类的特点:无法创建对象、接口中的方法都是抽象方法,接口的成员变量由public static final修饰,成员函数由public abstract修饰。接口不可以创建对象,需要被子类实现,子类对接口中的抽象方法全部覆写后,子类才可以常见对象,否则子类是一个抽象类、接口和接口之间可以有继承关系。
Extends:用于一个类继承另一个类。Java只支持单继承。
Implements:用于一个类实现一个接口。Java支持多实现。
Public:访问权限修饰符。可以修饰类、成员变量和成员函数。没有任何限制,同一个包中,或者不同包中都可以访问。
Private:访问权限修饰符。可以修饰成员变量和成员函数。被其修饰的成员变量和成员函数只对所在类可见。
Protected:访问权限修饰符。可以修饰成员变量和成员函数。同一个包中,不同包中都可以访问。
Default:访问权限修饰符。没写任何修饰符就是default,可以修饰类、成员变量和成员函数。所修饰内容在同一个包中可*访问。
Static:用于修饰成员函数和成员变量。被此关键字修饰后具备一些特点:随着类的加载而加载,随着类的消失而消失、优先于对象存在、所修饰内容被所有对象共享、可以直接被类名调用。使用时注意:静态方法只能访问静态成员,静态方法里不可以有this、super关键字。
Final:可以修饰类、成员方法、成员变量以及普通变量。修饰后的内容有以下特点:被final修饰的类不可以被继承;被final修饰的成员方法不可以被覆写;被final修饰的变量(普通和成员变量)是一个常量,只能被赋值一次。
This:代表它所在函数所属对象的引用。可以简单地理解为那个对象调用了成员方法,在这个方法内部的this就代表这个对象。
Super:代表父类对象的引用。
Java类中几个比较特殊的部分:
构造代码块:作用是给对象进行初始化,对象一建立就运行并且优先于构造函数。
静态代码块:随着类的加载而执行,只执行一次,用于给类初始化,并优先于主函数执行。
内部类:当一个类定义在另一个类里面,对里面那个类就称为内部类。内部类可以直接访问外部类的成员,包括由Private修饰的成员。而外部类要访问内部类中的成员必须建立内部类的对象。一个类内部可以有多个内部类。
匿名内部类:定义匿名内部类的前提是匿名内部类继一个类或实现一个接口。
请记住并且清楚下面这个对象实例化的过程:
Person aPerson = new Person();
1.因为用到Person类,所以先将Person类的.class文件加载到内存;
2.如果有的话先执行Person类中的静态代码块给Person类初始化;
3.为内存中开辟空间,分配内存地址给建立的Person对象,并对该对象的特有属性默认初始化;
4、对属性进行显示初始化;
5.执行构造代码块内容;
6.执行构造函数;
7.将Person对象在内存中的地址赋给Person类类型变量p。
以上就是Java总结的第一部分。