1、面向对象概述
面向对象编程是当今主流的程序设计思想,已经取代了过程化程序开发技术,Java 是完全面向对象编程语言,所以必须熟悉面向对象才能够编写 Java 程序。
面向对象的程序核心是由对象组成的,每个对象包含着对用户公开的特定功能和隐藏的实现部分。程序中的很多对象来自 JDK 标准库,而更多的类需要我们程序员自定义。
从理论上讲,只要对象能够实现业务功能,其具体的实现细节不必特别关心。
面向对象有以下特点:
(1)面向对象是一种常见的思想,比较符合人们的思考习惯;
(2)面向对象可以将复杂的业务逻辑简单化,增强代码复用性;
(3)面向对象具有抽象、封装、继承、多态等特性。
面向对象的编程语言主要有:C++、Java、C#等。
2、类与对象的关系
对象是类实例化出来的,对象中含有类的属性,类是对象的抽象。
下面我简单举例说明一下:
比如“人”就是一个类,那么具体的某个人“张三”就是“人”这个类的对象,而“名字、年龄、身高、体重”等信息就是对象的属性,人的动作比如“穿衣服、脱衣服与吃饭”等等都是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。
3、类与对象创建
创建对象应有5种方式:
(1)使用new关键字进行创建
(2)使用Class类的newInstance方法进行创建
(3)使用Constructor类的newInstance方法进行创建
(4)使用clone方法进行创建
(5)使用反序列化进行创建
4、方法
方法(Method)是用来定义类的功能和作用的,也是用来给类进行赋值和引用。在java中,类是一个程序的轮廓,但是类最终呈现的功能由方法决定。java语音中的“方法”也在一些其它语言中将之成为“函数”。一个完整方法应该包含以下部分:
- 修饰符:public、private等等
- 返回值类型:就是功能结果的数据类型
- 方法名:可以简单理解为起了一个名字,方便我们调用该方法。
- 参数类型:就是参数的数据类型
- 参数名:就是变量
- 参数分类:
- 实参:实际参与运算的数据
- 形参:方法上定义的,用于接收实际参数的变量
- 方法体语句:就是完成功能的代码块
- return:结束方法
- 返回值:就是功能的结果,由return带给调用者。
5、对象创建内存分析
一个对象的创建包含两个过程:初始化以及实例化
我们在使用一个对象时,JVM(java的虚拟机)首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。
当到实例化的过程时,java虚拟机就会为其分配内存来存放自己及其从父类继承过来的实例变量。在为这些实例变量分配内存的同时,这些实例变量先会被赋予默认值(为0)。内存分配完成之后,JVM才会对新创建的对象赋予我们程序员给定的值。
6、构造方法
Java的构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new)之后自动调用。Java中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
Java 构造方法有以下特点:
- 方法名与类名必须相同
- 只能与 new 结合使用
- 默认返回类型就是对象类型本身
- 可以没有参数或有1 个参数或有多个参数
- 没有任何返回值
7、方法的重载
在Java中,如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载,这就是方法重载;Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。具体应为:
- 方法名相同
- 方法的参数类型,参数个不一样
- 方法返回类型可以不同
- 方法修饰符可以不同
- main 方法也可以被重载
8、匿名对象
匿名对象:通俗来讲就是不给对象起名;
例如:
类名 对象名(自己命名)=new 类名();
匿名对象为 “ new 类名()”;
9、封装
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
10、this 关键字
this主要有三个作用:
- 调用一个类中的成员变量
- 调用一个类中的其他方法
- 调用一个类中的其他构造方法(调用时需放到其首行)
11、static
static在Java中主要有三大作用
(1)修饰成员方法
(2)修饰代码块
(3)修饰成员变量
12、包
在Java中包的主要作用应有4个:
(1)把功能相近/有关的类/接口放到一个包中,这样做就方便诶后查和用
(2)能更好地维护程序结构
(3)能避免因类名一样起的冲突
(4)包有访问权限,有这个包的访问权限才能访问这个包里的类
13、权限修饰符
权限修饰符共有4种:
(1)public(公开的):访问权限最高,可跨包访问;
(2)protect(受保护的):权限第二,可在同包和子/父类中访问;
(3)default(默认的 (一般不写) ):权限第三,可在同包中访问;
(4)private(私有的):权限最低,只能在本类中访问;
14、代码块
代码块共有4种:
(1)普通代码块
(2)构造代码块
(3)静态代码块
(4)同步代码块
15、main
在Java中,main() 方法是 Java 应用程序的入口方法,程序在运行的时候,第一个执行的方法就是 main() 方法。main() 方法和其他的方法有很大的不同。
17、继承
被继承的类称为父类或超类或基类,而继承得到的类称为子类或派生类;子类继承父类的状态(属性)和行为(方法),同时也可以有自己的特征。
18、子类实例化内存分析
当创建一个类( A a=new A(); ),并且这个类是首次被加载时,方法区会开辟出一块内存存放类的class文件并且将全部成员放入。之后会在堆中开辟一块内存,存储这个类并且将这个类的非静态的成员变量拷贝过来(静态成员不拷贝,所有实例共享),并持有对应的方法区的方法的句柄,这块内存有一个唯一内存地址,栈中的a对象指向的就是这个内存地址。
19、super
super主要有三种用法:
(1)一般引用(利用super引用父类成员)
(2)引用构造函数
(3)子类中的成员变量或方法中与父类中的成员变量或方法命名相同
20、重写
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。重写的好处在于子类可以根据需要,定义特定于自己的行为。
21、重写与重载的区别
(1)参数个数不同
(2)参数类型不同
(3)参数次序不同
22、final(保持不变)
(1)对于基本数据类型,表示永不改变的编译时常量
(2)对于普通对象(保持不变),不能指向另外一个对象,但是该对象本身是可以进行修改的
23、抽象
(1)数据抽象:创建复杂数据类型,只公开与数据类型交互有意义的操作,对外界隐藏了所有实现细节
(2)控制抽象:识别所有语句并将其作为一个工作单元展现的过程
24、接口(Interface)
接口不是类,编写接口的方式和类很相似(两者不同概念)。类描述对象的属性和方法。接口则包含类要实现的方法,接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
25、多态性
允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。
26、instanceof
用法:
(布尔类型) = (任意对象表达式) instanceof (任意已定义的对象类);
27、Object 类
Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
28、API 使用(Java类库)
方法是使用import语句
29、内部类概述
在类的内部又定义了一个新的类。
分类:
- 静态内部类
- 实例内部类
- 局部内部类
30、包装类
(1)对象型包装类(不继承任何其他类(Object的直接子类))
(2)数值型包装类(继承于Number类)
31、可变参数
在定义方法时,在最后一个形参后加上三点 (…),就表示该形参可以接受多个参数值,多个参数值被当成数组传入。
32、递归
递归的三要点:
(1)一定有一种可以退出程序的情况
(2)总是在尝试将一个问题化简到更小的规模
(3)父与子的问题不能有重叠的部分