面向对象
面向对象概述
面向对象程序设计(简称 OOP)是当今主流的程序设计范型
在OOP中, 不必关心对象的具体实现, 只需满足要求即可
类和对象
类是对现实生活中事物的抽象,对事物的描述
对象,就是事物的一个实体,在系统中用来描述客观事物的一个实体
类和对象的关系
同一个类实例化出来的的所有对象都存在相同的行为
对象
构建对象
使用构造器创建对象实例
Date date = new Date();
对象变量和对象
一个对象变量不是对象,也没有包含对象,而是引用一个对象,java中任何对象变量的值都是对其他地方的对象的引用
类
java是面向对象的语言,类和对象是核心思想
声明类需要用关键字class
1 | class 类名称{ |
类中的变量
一个类的变量包括:成员变量,类变量,局部变量
- 成员变量:定义在类中方法外,又称为实例变量
- 类变量:定义在类中方法外,必须为static类型
- 局部变量:在方法内部
java中,一个类是体现一个事物的,而成员变量代表的是事物的属性,类的方法是描述事物的行为
1 | class Student{ |
以上代码中,学生是类Student,static 修饰的 eyeCount 变量是类变量,学生有姓名的年龄,所以成员变量是name、age,学生有学习的行为,所以对应的方法是study,方法内的变量 stdName 是局部变量
类变量
类变量,用static关键字声明,所以也称静态变量,必须在类中方法外进行声明定义
在创建对象的实例时类变量被创建,对象被销毁时变量被销毁
静态变量可以通过:ClassName.类变量名称 的方式访问,通常类变量命名为大写字母
静态变量在类加载时初始化
成员变量
成员变量,又称为实例变量
在创建对象实例时创建类的成员变量,当对象被销毁时被销毁。
如果在创建对象实例时,未显式分配值的成员变量在声明期间程序会自动分配一个初始值,成员变量的初始化值取决于成员变量的类型。
元素类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0 |
double | 0.0 |
char | “\u0000” |
boolean | false |
对象引用 | null |
静态变量,存储在静态存储区,经常与final关键字共同使用;
方法变量
方法变量必须在使用之前进行显示初始化,否则编译报错
方法变量仅仅在方法的执行期间存在
成员变量和局部变量
成员变量和局部变量的区别:
- 类中的位置:
- 成员变量:在类中,方法外,整个类都可以访问成员变量
- 局部变量:在局部范围,如在方法内,方法内的函数、语句等
- 内存分配位置:
- 成员变量:在堆内存中,类在编译.class文件时放在堆中的方法区
- 局部变量:在栈内存中
- 生命周期:
- 成员变量:随着对象的建立而产生,随着对象的消失而销毁
- 局部变量:方法被调用,创建变量;方法调用完毕,空间被销毁
- 初始化
- 成员变量:有默认初始化值
- 局部变量:没有默认初始化值;必须对变量进行定义赋值才能使用
在成员变量和局部变量名称相同时,在方法执行中采用就近原则
访问修饰符
java中定义类、方法、修饰符等通常会添加访问修饰符,通过访问修饰符来控制对类、变量、方法的访问权限
java中支持4种访问修饰符
修饰符 | 当前类内部 | 同一包内 | 同包内、包外子类 | 所有类 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
- private:只能被自己访问和修改
- default(默认没有修饰符):同一包中的类可以访问,声明时没有加修饰符,认为是friendly
- protected:自身,子类及同一个包中类可以访问
- public:可以被所有其他类所访问