Java学习笔记——类和对象
面向对象编程的思想更接近于人的思维,程序用对象及对象间的相互作用来完成程序的功能,程序中的对象是对现实生活中存在的对象的抽象。
面向对象程序设计三个重要特征是封装、继承、多态。
面向对象的设计思想(OOP)
面向对象程序设计的基本思想是将现实世界中的事物抽象为对象,并给抽象出来的对象赋予相应的状态和行为,通过对消息的响应完成一定的任务。
在现实世界中任何事物都可以被认为是对象,如:
学生、教师等。
对象可以是人,也可以是物体;可以是具体的,也可以是抽象的。
对象既包含数据又包含功能,因此具有自身处理数据的能力,是能进行处理的主体。
在面向对象的程序中,对象的状态称为对象的“属性”,对象的行为或功能称为对象的“方法”,一个对象的方法实现对象的一项功能。
面向对象程序设计方法就是把现实世界中对象的状态和行为抽象为程序设计语言中的对象,达到二者的统一。
抽象
现实世界中的对象很多,我们不可能为每一个对象都来定义一组属性和方法。而且这样做会产生大量重复性的工作,因为现实世界中的很多对象是有共性的。
我们需要对现实中的对象进行分类和抽象,将具有共性的一类对象(即具有相同的属性和方法)抽象为一个类。例如学生类、空调类、汽车类等。
类与对象
类:是一种抽象的数据类型,是同种对象的集合与抽象,是具有共同行为和属性的若干对象的统一描述体。
对象:现实世界中某个存在的实体在计算机逻辑中的映射和体现。
类与对象的关系
- 类声明的语法:
[修饰符] class 类名 {
[private/protected/public] 成员的声明和定义 ;
}
其中,private、public及protected被称为访问修饰符。 - 对象的实例化格式:
–<类名> <对象名> = new <类名> ([参数1,参数2,…]) ;
–<类名> <对象名>;
–<对象名> = new <类名> ([参数1,参数2,…]) ;
例:Student mary = new Student(); - 访问属性的一般形式:
–<对象名>.<属性名> - 访问方法的一般形式:
–<对象名>.<方法名>([<参数1>,<参数2>,…]);
类体
Java中方法只能定义在类中,称为类的成员方法,基本的语法:
[方法修饰符] 方法返回值 方法名([<参数列表>]) {
方法体;
}
成员方法修饰符:主要有public、private、protect、final 、static、abstract和synchronized 7种, 用来说明方法的访问权限。
方法重载
方法重载的依据:方法名相同;参数列表必须不同(参数个数,参数类型,参数顺序)
- 注意
返回值可以不同(返回值不作为重载的依据)
是否静态的也不作为重载依据
重载的方法之间可以互相调用
构造方法
– 功能:初始化对象
– 方法名:与类名相同
– 参数:可有,可无
– 返回值:不指定返回值(不能写void )
– 调用方法:创建对象时自动调用
在对象的生命周期中构造方法只会调用一次。
一个类中如果没有定义构造方法,Java编译器会自动为类产生一个默认的无参构造方法。只要类中有显示声明的构造方法,Java编译就不产生默认的构造方法。
在一个类中可以定义多个构造方法,但构造方法的参数列表不能相同。
构造函数重载调用要使用this语句,并放到方法中的第一句,若访问某个属性则位置随意。
方法传参
Java中方法参数共有两种类型:
- 基本数据类型
- 引用类型
当参数是基本数据类型时,方法不能修改实际参数的值。
当参数是引用类型时,方法通过地址引用改变了实际参数对象的内容。
Java的“垃圾收集器”
Java的“垃圾收集器”为内存管理提供了一种自动解决方案。
对于程序中不再使用的内存资源,“垃圾收集器”能自动将其释放。
垃圾收集器受JVM的控制,JVM决定什么时候运行垃圾收集器。
- 内存不足
- 请求运行
当没有线程能够访问对象时,该对象就是适合进行垃圾收集的。
垃圾回收情形:空引用、隔离引用
包(package)
命名空间,避免命名冲突。
- 必须放在源程序的除注释外的第一行。
- 相当于类的前缀
使用方法:系统内置的包、自定义包、第三方提供的包
访问另一个包中的公有类
第一种方式:在每个类名之前添加完整的包名。
第二种方式:通过import关键字引入包。import指定类;import整个包
通过import关键字引入包
- import语句,必须位于package和类声明之间。
- 默认会引入java.lang包。
- import语名的唯一价值是减少键入。
import导入声明可分为两种:
- 单类型导入(single-type-import) 。
例:import java.util.ArrayList; - 按需类型导入(type-import-on-demand) 。
例:import java.util.*;