类和对象的关系
- 面向对象的思想(Object Oriented Programming,简称 OOP)
面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式
面向对象更加强调运用人类在日常的思维逻辑中经常采用的思维方法与原则
- 面向对象的三个特征
封装
继承
多态
- 类的定义
在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)。
- 语法
类的成员
}
修饰符一般为public,也可以没有修饰符
注意类名的命名规范。类名一般大写
类的成员:
成员变量(属性)
成员函数(方法)
通过“.”调用属性和方法
- 类和对象的关系
类(class)——是对某一类事物的描述
对象(object)——是实际存在的某类事物的个体也称为实例(instance)
类是创建对象的模板,对象是类的实例
- 对象的创建
语法:类名 对象名 = new 构造函数
- 匿名对象
创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
例:
Person p1 = new Person(); ===> new Person().sayHello()
P1.sayHello();
使用匿名对象的情况
如果对一个对象只需要进行一次方法调用
构造方法
- 构造方法(构造函数/构造器,Constructor)
具有与类相同的名称
不含返回值类型
不能在方法中用return语句返回一个值
一般访问权限为public
在一个类中,具有上述特征的方法就是构造方法。
- 构造方法的作用
一般使用构造方法来完成对成员变量的初始化
- 默认的构造方法
在Java中,每个类都至少要有一个构造方法,如果程序员没有在类里定义构造方法,系统会自动为这个类产生一个默认的构造方法
一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法
方法的重载
- 方法的重载(overload)
函数的重载就是在同一个类中允许同时存在一个以上同名的函数
- 方法重载的规则
函数名称相同
函数的参数必须不同
参数个数不同 或
参数类型不同
函数的返回值类型可以相同,也可以不同
对象创建的内存模型
- 引用类型变量
除了8种基本数据类型的变量,其他变量都是引用类型变量
类(class)
Person p;
接口(interface)
Animal a;
数组
Int[] c ;
变量的作用域
- 全局变量
类体中声明的成员变量为全局变量
全局变量在类的整个生命周期中都有效
- 局部变量
方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量
局部变量只在方法调用的过程中有效,方法调用结束后失效
- 变量初始化的顺序
隐式赋予变量默认值
成员变量
显式赋予初始值
通过构造方法体赋予新值
垃圾回收机制
- 垃圾回收器
Java的一个重要特点句是具有一个垃圾回收器,并且能够自动回收垃圾,这也是Java相对其他语言有优势的地方
对内存的释放和回收的工作是由Java运行系统(JRE)承担的,不用编程者关注
在Java程序运行过程中,一个垃圾回收器会不定时地被唤起检查是否有不再被使用的对象,并释放它们所占用的内存空间
垃圾回收器的启用不由程序员控制,也无规律可循
- 垃圾回收机制——System.gc()、null
Java里提供了一个System.gc()方法,使用这个方法可以建议垃圾回收器回收垃圾
在Java中,可以通过将对象的引用变量设置为null,来暗示垃圾回收器来回收该对象
Java中的关键字
- this关键字
一个引用
指向调用该方法的当前对象
通常在类的方法定义中使用
- 用this关键字的情况
方法中的变量与成员变量重名
在一个构造方法中,调用其他重载的构造方法
返回当前对象的引用
- static关键字
staitc可以修饰的元素
属性
方法
代码块
需要注意的问题
只能修饰类成员,不能修饰局部变量
- static修饰的变量——静态变量
所有对象共享
也称为类变量
用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在
两种方式访问:
直接访问:类名.属性
实例化后访问:对象名.属性
- staic修饰的方法——静态方法
不需要实例化,可以直接访问
也称为类方法
两种方式访问:
直接访问:类名.方法名()
实例化后访问:对象名.方法名()
- static方法的作用
简化方法的使用;
便于访问静态属性;
注意事项
静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
静态方法中不能使用this、super关键字
静态方法不能被非静态方法覆盖,静态方法不能修饰构造方法
- static修饰的代码块——静态代码块
当类被载入时,静态代码块被执行,且只被执行一次
静态块精彩用来进行类属性的初始化