java基础面向对象知识点概要
面向对象与面向过程
所谓面向过程就是以功能行为为主体,强调的是实现的功能行为,而面向对象是以对象为主体,强调的是每一个对象,将功能行为封装进每一个对象,再由对象去实现功能行为。
面向对象的三大特征:
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
Java基本元素:类和对象
类是对一类事物的描述,是抽象的,概念上的定义。
对象是实际存在的该类事物的每个个体,因为也被成为实例。
举例: 如人就是一个类,有名字,年龄这些属性,吃饭,睡觉这些行为。而如詹姆斯就是一个具体的人,名字詹姆斯,年龄34,具有吃饭睡觉,打篮球这些行为。
Java类及类的成员:Field = 属性 = 成员变量,Method = (成员)方法 = 函数
对象的创建和使用
创建对象语法: 类名 对象名 = new 类名();
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。如:new Person().shout();
使用情况:如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
我们经常将匿名对象作为实参传递给一个方法调用。
根据内存分析:匿名对象只在堆内存中开辟空间,而没有在栈内存的引用,因此可以减少内存消耗。
类的成员之一:属性
属性也称为域,或字段。
语法格式:
修饰符 数据类型 属性名 = 初始化值 ;
说明1: 修饰符
常用的权限修饰符有:private、缺省、protected、public、static、final
说明2:数据类型
任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
说明3:属性名
属于标识符,符合命名规则和规范即可
类的成员之二:方法
什么是方法(method、函数):
方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
将功能封装为方法的目的是,可以实现代码重用,简化代码
Java里的方法不能独立存在,所有的方法必须定义在类里。
注 意:
方法被调用一次,就会执行一次
没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
定义方法时,方法的结果应该返回给调用者,交由调用者处理。 方法中只能调用方法或属性,不可以在方法内部定义方法。
重载
重载的概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
重载示例:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
可变形参
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定
义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可
变的实参
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String…books);
说明:
- 声明格式:方法名(参数的类型名 …参数名)
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
4. 可变参数方法的使用与方法参数部分使用数组是一致的
5. 方法的参数部分有可变形参,需要放在形参声明的最后
6. 在一个方法的形参位置,最多只能声明一个可变个数形参
方法参数的值传递机制
方法,必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
递归方法
递归方法包含了一种隐式的循环,它会重复地执行某段代码,但这个循环无须控制。
递归方法必须要向一个已知的方向递归,否则这种递归就变成了无穷递归,也就是循环里的死循环。
类的成员之三:构造器
构造器的特征:
它具有与类相同的名称
它不声明返回值类型。(与声明为void不同)
不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
构造器的作用:创建对象;给对象进行初始化
根据参数不同,构造器可以分为如下两类:
隐式无参构造器(系统默认提供)
显式定义一个或多个构造器(无参、有参)
注 意:
Java语言中,每个类都至少有一个构造器
默认构造器的修饰符与所属类的修饰符一致
一旦显式定义了构造器,则系统不再提供默认构造器
一个类可以创建多个重载的构造器
父类的构造器不可被子类继承
属性赋值过程:
赋值的位置:
① 默认初始化
② 显式初始化
③ 构造器中初始化
④ 通过“对象.属性“或“对象.方法”的方式赋值
赋值的先后顺序:
① - ② - ③ - ④
JavaBean
JavaBean是一种Java语言写成的可重用组件。
所谓javaBean,是指符合如下标准的Java类:
类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法
OOP特征一:封装与隐藏
封装属性
Java中通过将类的属性和方法进行私有化处理,可以将类的属性和方法进行封装,从而不被外界所直接引用,我们可以通过getter(),setter()方法来调用属性,从而:
- 隐藏一个类中不需要对外提供的实现细节。
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作。
- 便于修改,增强代码的可维护性。
Java权限修饰符public、protected、(缺省)、private置于类的成员定义前,
用来限定对象对该类成员的访问权限。
对于class的权限修饰只可以用public和default(缺省):
public类可以在任意地方被访问。
default类只可以被同一个包内部的类访问。
封装方法
例如当我们在一个类里定义了一个public类型的方法,但是这个方法由类中多个方法组成时,这时这些辅助方法是不能被外部所调用,它的唯一作用就是辅助public类型的方法,被调用也毫无意义。这时我们可以将其声明为priviate类型。
单例模式(封装构造器)
当我们仅需要创建一个对象,而不需要创建多个对象时(如创建一个地球对象),为了防止创建出多个对象,需要封装构造器,并创建一个方法来调用构造器。同时需要将该方法声明为static静态的,也就是本地方法,也可以成为类方法。该方法在该进入编译器时就存在了,不管实例化多少次这个类,这个方法内的方法体都只执行一次。因此可以保证只构造一个对象!保证唯一性,从而达成单例模式!
封装类
当该类不希望被其他包所引用时,可以将该包改成defalut(缺省)的。
关键字:this
在Java中,this关键字比较难理解,它的作用和其词义很接近。
它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象。
this 可以调用类的属性、方法和构造器
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。
具体的:我们可以用this来区分属性和局部变量。
比如:this.name = name;
注意:
可以在类的构造器中使用"this(形参列表)"的方式,调用本类中重载的其他的构造器!
明确:构造器中不能通过"this(形参列表)“的方式调用自身构造器
如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(形参列表)”
"this(形参列表)“必须声明在类的构造器的首行!
在类的一个构造器中,最多只能声明一个"this(形参列表)”
关键字:package、import
package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:package 顶层包名.子包名 ;
为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。
语法格式:
import 包名. 类名;
注意:
- 在源文件中使用import显式的导入指定包下的类或接口
- 声明在包的声明和类的声明之间。
- 如果需要导入多个类或接口,那么就并列显式多个import语句即可
- 举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
- 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
- 如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的
是哪个类。 - 如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
- import static组合的使用:调用指定类或接口下的静态的属性或方法